Comment résoudre l'erreur « InvalidIdentityToken » de l'appel d'API AWS STS AssumeRoleWithWebIdentity ?

Date de la dernière mise à jour : 18/05/2022

L'appel d'API AWS Security Token Service (AWS STS) AssumeRoleWithWebIdentity a échoué avec une erreur similaire à la suivante :

« An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation. Couldn't retrieve verification key from your identity provider. » (Une erreur s'est produite (InvalidIdentityToken) lors de l'appel de l'opération AssumeRoleWithWebIdentity. Impossible de récupérer la clé de vérification auprès de votre fournisseur d'identité.)

Brève description

Une erreur peut se produire pour les raisons suivantes :

  • L'URL .well_known et le jwks_uri du fournisseur d'identité (IdP) sont inaccessibles depuis l'internet public.
  • Un pare-feu personnalisé bloque les requêtes.
  • Il y a une latence de plus de 5 secondes dans les requêtes d'API provenant de l'IdP pour atteindre le point de terminaison AWS STS.

Remarque : cette erreur n'est pas enregistrée dans l'historique des événements AWS CloudTrail car elle échoue du côté client.

Solution

1.    Vérifiez que l'URL .well_known et le jwks_uri du fournisseur d'identité (IdP) sont accessibles au public. Ceci peut être vérifié à l'aide de votre navigateur, d'une commande Windows ou d'une commande Linux.

Effectuez l'une des actions suivantes :

Naviguez vers les liens suivants dans votre navigateur pour vérifier l'accès :

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

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

-ou-

Exécutez les commandes suivantes :

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

Remarque : vérifiez le code de statut « 200 » dans la réponse à la requête pour confirmer si les liens sont accessibles.

2.    Si l'URL .well_known et le jwks_uri de l'IdP ne sont pas accessibles, vérifiez les paramètres du pare-feu pour confirmer que les domaines ne figurent pas sur une liste de refus.

Selon la configuration actuelle du pare-feu, il peut être nécessaire d'ajouter les domaines à une liste d'autorisation.

Si les paramètres du pare-feu ne sont pas accessibles, utilisez le navigateur avec un appareil d'un réseau différent (par exemple, un téléphone). Vérifiez l'accès depuis le navigateur en suivant les instructions de l'étape 1. Si la requête Web réussit, cela signifie que la requête est bloquée par le pare-feu.

Si le serveur effectuant l'appel d'API AssumeRoleWithWebIdentity est une instance Amazon Elastic Compute Cloud (Amazon EC2), assurez-vous que les paramètres de configuration sont corrects. Pour obtenir des instructions, consultez la section Pourquoi ne puis-je pas me connecter à un site Web hébergé sur mon instance EC2 ?

3.    Vérifiez la latence pour l'ensemble de l'opération.

La latence totale pour l'opération comprend :

  • Temps de requête/réponse du STS
  • Temps de requête/réponse de l'IdP

Minimisez la latence d'AWS STS

Utilisez des points de terminaison régionaux au lieu de points de terminaison globaux pour le service AWS STS. Cela permet de vérifier que les requêtes sont acheminées vers le serveur le plus proche géographiquement afin de minimiser la latence. Pour plus d'informations, consultez la section Écriture du code pour l'utilisation des régions AWS STS.

Remarque : pour les kits SDK AWS, le point de terminaison de destination des requêtes est acheminé par le paramètre Région AWS où l'appel est effectué dans la configuration sts_regional_endpoint.

Évaluation de la latence de l'IdP

L'IdP est responsable de l'envoi des requêtes au point de terminaison STS. Les paquets sortants de l'IdP doivent être analysés dans les journaux de l'IdP pour vérifier si la requête au point de terminaison STS prend trop de temps.

Remarque : si la requête de l'IdP vers le point de terminaison STS prend plus de 5 secondes, elle risque d'être interrompue et d'échouer. Vous pouvez contacter votre fournisseur d'identité pour demander une augmentation de la disponibilité géographique afin de réduire la latence pour cet appel d'API.

4.    (Facultatif) Utilisez le backoff exponentiel.

Utilisez le backoff exponentiel pour des attentes progressivement plus longues entre les tentatives de réponses aux erreurs. L'API AssumeRoleWithWebIdentity dépend de la récupération d'informations auprès du fournisseur d'identité (IdP). La plupart des IdP ont des limites d'API pour éviter les erreurs de limitation, et les appels d'API peuvent ne pas obtenir les jetons requis en retour de l'IdP. Implémentez un intervalle de délai maximum et un nombre maximum de nouvelles tentatives. Pour plus d'informations, consultez la section Nouvelles tentatives après erreur et backoff exponentiel dans AWS.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?