Se ha producido el error “InvalidIdentityToken” en la llamada a la API AssumeRoleWithWebIdentity de AWS Security Token Service (AWS STS). Quiero solucionar este problema.
Resolución
Cuando se produzca un error en la llamada a la API AssumeRoleWithWebIdentity, es posible que recibas un error similar al siguiente mensaje:
“An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation. Couldn't retrieve verification key from your identity provider.” (Se ha producido un error [InvalidIdentityToken] al llamar a la operación AssumeRoleWithWebIdentity. No se pudo recuperar la clave de verificación de tu proveedor de identidades.)
Nota: El historial de eventos de AWS CloudTrail no registra este error porque se produce en el lado del cliente.
Verificación del acceso público a .well-known y jwks_uri
Si no puedes acceder a la URL .well-known ni a jwks_uri del proveedor de identidades (IdP), es posible que recibas un error. Comprueba que puedas acceder de forma pública a la URL .well-known y a jwks_uri del IdP.
Para comprobar la accesibilidad, ve a los siguientes enlaces en tu navegador:
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
Alternativa:
Para comprobar la accesibilidad, ejecuta uno de los siguientes comandos.
Para Windows:
wget https://BASE_SERVER_URL/.well-known/openid-configurationwget https://BASE_SERVER_URL/.well-known/jwks.json
Para Linux:
curl https://BASE_SERVER_URL/.well-known/openid-configurationcurl https://BASE_SERVER_URL/.well-known/jwks.json
Nota: Sustituye BASE_SERVER_URL por la URL base de tu IdP.
Para confirmar que puedes acceder a los enlaces, comprueba el código de estado HTTP 200 en la respuesta a la solicitud.
Comprobación de la configuración del firewall
Si no puedes acceder a la URL .well-known ni a jwks_uri del IdP, comprueba la configuración del firewall. Asegúrate de que los dominios no estén en una lista de denegados. En función de la configuración actual del firewall, es posible que sea necesario añadir los dominios a una lista de permitidos.
Si un firewall personalizado bloquea las solicitudes, es posible que recibas un error.
Si no puedes acceder a la configuración del firewall, usa el navegador con un dispositivo desde otra red distinta, como, por ejemplo, un teléfono.
Dirígete a los siguientes enlaces en tu navegador:
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
Nota: Sustituye BASE_SERVER_URL por la URL base de tu IdP.
Si el servidor que realiza la llamada a la API AssumeRoleWithWebIdentity es una instancia de Amazon Elastic Compute Cloud (Amazon EC2), comprueba los ajustes de configuración. Para obtener más información, consulta ¿Por qué no puedo conectarme a un sitio web alojado en mi instancia de EC2?
Comprobación de la latencia de operación
Cuando la latencia de las solicitudes de la API del IdP tarde más de 5 segundos en llegar al punto de enlace de AWS STS, es posible que recibas un error.
Comprueba la latencia de toda la operación. Esto incluye el tiempo de solicitud y respuesta de STS y el tiempo de solicitud y respuesta de los atributos del IdP.
Minimización de la latencia del STS
Usa los puntos de enlace regionales de AWS en lugar de los puntos de enlace globales para el servicio STS. Esto verifica que las solicitudes se dirijan al servidor más cercano geográficamente para minimizar la latencia. Para obtener más información, consulta Código de escritura para utilizar en regiones de AWS STS.
Nota: En el caso de los SDK de AWS, el parámetro Region dirige el punto de enlace de destino de la solicitud al lugar donde se realiza la llamada en la configuración sts_regional_endpoint.
Evaluación de la latencia del IdP
El IdP realiza solicitudes al punto de enlace de STS. Para comprobar si la solicitud al punto de enlace de STS tarda demasiado, revisa los paquetes salientes del IdP en los registros del IdP.
Nota: Es posible que se agote el tiempo de espera de la solicitud y quese produzca un error si tarda más de 5 segundos en pasar del IdP al punto de enlace de STS. Puedes ponerte en contacto con tu proveedor de identidades para solicitar un aumento de la disponibilidad geográfica con el fin de reducir la latencia de esta llamada a la API.
(Opcional) Uso de un retroceso exponencial y aumento del número de reintentos
El IdP admite AssumeRoleWithWebIdentity al proporcionar información. La mayoría de los IdP tienen límites de API para evitar errores de limitación, y es posible que el IdP no devuelva las claves necesarias de las llamadas a la API. Si la API tiene problemas intermitentes para comunicarse con el IdP, usa las siguientes opciones de solución de problemas:
- Usa un retroceso exponencial.
- Aumenta el número de reintentos y, a continuación, establece un número máximo de reintentos. Además, implementa un intervalo de retardo máximo. Para obtener más información, consulta Retry behavior (Comportamiento de reintento).
Reducción de las solicitudes de STS a .well-known y jwks_uri
Si tu conjunto de claves web JSON (JWKS) establece los encabezados de respuesta Pragma: no-cache o Cache-Control: no-cache, STS no almacena en caché tus JWKS. STS realiza una devolución de llamada para las claves a las que se hace referencia en un ID_TOKEN, pero no en la caché. En este caso, es posible que STS realice demasiadas solicitudes a tu URL .well-known y jwks_uri.
Para reducir las llamadas desde STS, comprueba que tu JWKS no configure ninguno de estos encabezados de respuesta. Esto permite que STS almacene en caché tu JWKS.
Reducción de la cantidad de claves en el JWKS
STS solo admite hasta 100 claves en un JWKS. Si tu JWKS tiene más de 100 claves, STS no puede verificar los tokens firmados con tus claves. Es posible que recibas el error “InvalidIdentityToken” cuando llamas a AssumeRoleWithWebIdentity y tu JWKS tiene más de 100 claves.
Para resolver el error, elimina de tu JWKS las claves que ya no necesites. O bien, reduce la cantidad de claves presentes en tu JWKS.
Información relacionada
Welcome to the AWS Security Token Service API Reference (Te damos la bienvenida a la referencia de la API de AWS Security Token Service)
¿Cómo puedo solucionar los errores de limitación de API o «tasa excedida» en IAM y AWS STS?