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

Última actualización: 18/05/2022

La llamada a la API AssumeRoleWithWebIdentity de AWS Security Token Service (AWS STS) falló con un error similar al siguiente:

“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 ha podido recuperar la clave de verificación de su proveedor de identidad).

Descripción corta

Este error puede producirse si:

  • La URL .well_known y el elemento jwks_uri del proveedor de identidad (IdP) son inaccesibles desde la Internet pública.
  • Un firewall personalizado bloquea las solicitudes.
  • Hay una latencia de más de 5 segundos en las solicitudes de API del IdP para llegar al punto de conexión de AWS STS.

Nota: este error no se registra en el historial de eventos de AWS CloudTrail porque falla en el lado del cliente.

Resolución

1.    Compruebe que la URL .well_known y el elemento jwks_uri del proveedor de identidad (IdP) sean de acceso público. Esto se puede comprobar mediante el navegador, un comando de Windows o un comando de Linux.

Aplique alguna de las siguientes acciones:

Navegue a los siguientes enlaces en su navegador para comprobar el acceso:

https://<base_server_url>/.well-known/openid-configuration 

https://<base_server_url>/.well-known/jwks.json

De forma alternativa, realice lo siguiente:

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: compruebe el código de estado “200” en la respuesta a la solicitud para confirmar si se puede acceder a los enlaces.

2.    Si no se puede acceder a la URL .well_known y al elemento jwks_uri del IdP, compruebe la configuración del firewall para confirmar que los dominios no estén en una lista de denegación.

Según la configuración actual del firewall, es posible que sea necesario agregar los dominios a una lista de dominios permitidos.

Si no es posible acceder a la configuración del firewall, utilice el navegador con un dispositivo desde otra red (por ejemplo, un teléfono). Compruebe el acceso desde el navegador siguiendo las instrucciones del paso 1. Si la solicitud web se realiza correctamente, significa que el firewall está bloqueando la solicitud.

Si el servidor que realiza la llamada a la API AssumeRoleWithWebIdentity es una instancia de Amazon Elastic Compute Cloud (EC2), asegúrese de que los valores de configuración sean correctos. Para obtener instrucciones, consulte ¿Por qué no puedo conectarme a un sitio web alojado en mi instancia de EC2?

3.    Compruebe la latencia de la operación total.

La latencia total de la operación incluye:

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

Minimizar la latencia de AWS STS

Utilice puntos de conexión regionales en lugar de puntos de conexión globales para el servicio AWS STS. Esto verifica que las solicitudes se dirigen al servidor geográficamente más cercano para minimizar la latencia. Para obtener más información, consulte Escribir código para usar las regiones de AWS STS.

Nota: en el caso de los SDK de AWS, el punto de conexión de destino de las solicitudes lo dirige el parámetro de región de AWS en el que se realiza la llamada dentro de la configuración sts_regional_endpoint.

Evaluación de la latencia del IdP

El IdP es el responsable de realizar solicitudes al punto de conexión de STS. Los paquetes salientes del IdP deben analizarse dentro de los registros del IdP para comprobar si la solicitud al punto de conexión de STS se está demorando demasiado.

Nota: si la solicitud del IdP al punto de conexión de 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 identidad para solicitar un aumento de la disponibilidad geográfica a fin de reducir la latencia de esta llamada a la API.

4.    (Opcional) Utilice el retroceso exponencial.

Utilice el retroceso exponencial para esperar más tiempo de manera progresiva entre reintentos de respuestas a errores. La API AssumeRoleWithWebIdentity depende de la recuperación de información del proveedor de identidad (IdP). La mayoría de los IdP tienen límites de API para evitar errores de limitación, y es posible que las llamadas a la API no obtengan los tokens necesarios del IdP. Implemente un intervalo de demora máximo y un número máximo de reintentos. Para obtener más información, consulte Reintentos de error y retroceso exponencial en AWS.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?