¿Cómo puedo resolver el error "InvalidIdentityToken" en la llamada a la API AssumeRoleWithWebIdentity de AWS STS?

5 minutos de lectura
0

Se ha producido el error "InvalidIdentityToken" en la llamada a la API AssumeRoleWithWebIdentity de AWS Security Token Service (AWS STS).

Descripción breve

Si se produce un error en la llamada a la API AssumeRoleWithWebIdentity, es posible que reciba 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 su proveedor de identidades.)

Este error puede producirse en los siguientes escenarios:

  • No se puede acceder a las URL .well_known y jwks_uri del proveedor de identidades (IdP) desde Internet.
  • Un firewall personalizado bloquea las solicitudes.
  • La latencia de las solicitudes de API que se envían desde el IdP al punto de conexión de AWS STS es superior a 5 segundos.
  • STS está realizando demasiadas solicitudes a sus URL .well_known o jwks_uri del IdP.

Nota: Dado que este problema se produce en el lado del cliente, el historial de eventos de AWS CloudTrail no registra este error.

Resolución

Verificación del acceso público a .well_known y jwks_uri

Compruebe que las URL .well_known y jwks_uri del IdP sean de acceso público. Esto se puede comprobar mediante el navegador, con el comando de Windows o el comando de Linux. Para ello, realice una de las siguientes acciones:

Para comprobar el acceso, vaya a los siguientes enlaces en su navegador:

  • https://BASE_SERVER_URL/.well-known/openid-configuration
  • https://BASE_SERVER_URL/.well-known/jwks.json

\ -o bien-

Ejecute los siguientes comandos:

Windows:

wget https://BASE_SERVER_URL/.well-known/openid-configuration
wget https://BASE_SERVER_URL/.well-known/jwks.json

Linux:

curl https://BASE_SERVER_URL/.well-known/openid-configuration
curl https://BASE_SERVER_URL/.well-known/jwks.json

Nota: Para confirmar que puede tener acceso a los enlaces, compruebe el código de estado 200 en la respuesta a la solicitud.

Comprobación de la configuración del firewall

Si no puede tener acceso a las URL .well_known y a jwks_uri del IdP, compruebe la configuración del firewall. Asegúrese de que los dominios no estén en una lista de denegados.

Dependiendo de la configuración actual del firewall, es posible que sea necesario añadir los dominios a una lista de permitidos.

Si no puede acceder a la configuración del firewall, use el navegador con un dispositivo desde otra red distinta, como, por ejemplo, un teléfono. Para comprobar el acceso desde el navegador, siga las instrucciones del paso 1. Si la solicitud web se realiza correctamente, el firewall está bloqueando la solicitud.

Si el servidor que realiza la llamada de la API AssumeRoleWithWebIdentity es una instancia de Amazon Elastic Compute Cloud (Amazon EC2), compruebe los ajustes de configuración. Para obtener instrucciones, consulte Why can't I connect to a website that is hosted on my EC2 instance? (¿Por qué no puedo conectarme a un sitio web alojado en mi instancia de EC2?).

Comprobación de la latencia de operación

Compruebe la latencia de toda la operación. Esto incluye los atributos siguientes:

  • Tiempo de solicitud/respuesta de STS
  • Tiempo de solicitud/respuesta del IdP

Minimización de la latencia del STS

Use los puntos de conexión regionales de AWS en lugar de los puntos de conexión 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, consulte 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 conexión 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 conexión del STS. Para comprobar si la solicitud al punto de conexión del STS tarda demasiado, analice los paquetes salientes del IdP en los registros del IdP.

Nota: Si la solicitud del IdP al punto de conexión del STS tarda más de 5 segundos, es posible que se agote el tiempo de espera de la solicitud y se produzca un error. Puede ponerse en contacto con su proveedor de identidades para solicitar un aumento de la disponibilidad geográfica con el fin de reducir la latencia de esta llamada de la API.

(Opcional) Uso de un retroceso exponencial y aumento del número de reintentos

La API AssumeRoleWithWebIdentity depende de la recuperación de información del proveedor de identidades (IdP). Para evitar errores de limitación, la mayoría de los IdP tienen límites de API y es posible que el IdP no devuelva las claves necesarias a las llamadas de la API. Para ayudarle a asumir correctamente un rol si la API tiene problemas intermitentes para conectar con su IdP, siga los pasos que se indican a continuación:

Reducción de las solicitudes de STS a .well_known y jwks_uri

Si su conjunto de claves web JSON (JWKS) establece los encabezados de respuesta Pragma: no-cache o Cache-Control: no-cache, STS no almacena en caché sus JWKS. Para las claves a las que se hace referencia en un ID_TOKEN pero que no están en la memoria caché, STS realiza una devolución de llamada. En este caso, es posible que STS realice demasiadas solicitudes a sus URL .well_known y jwks_uri.

Por lo tanto, para reducir las llamadas desde el STS, compruebe que su JWKS no configure ninguno de estos encabezados de respuesta. Esto permite que STS almacene en caché sus JWKS.

Información relacionada

Welcome to the AWS Security Token Service API Reference (Le damos la bienvenida a la referencia de la API de AWS Security Token Service)

How can I resolve API throttling or "Rate exceeded" errors for IAM and AWS STS? (¿Cómo puedo resolver los errores de limitación de la API o de "tasa superada" en IAM y AWS STS?)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año