L'appel d'API AWS Security Token Service (AWS STS) AssumeRoleWithWebIdentity a échoué avec l'erreur « InvalidIdentityToken ».
Brève description
Si votre appel d'API AssumeRoleWithWebIdentity échoue, vous pouvez recevoir une erreur similaire au message suivant :
« 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é. »
Cette erreur peut se produire dans les scénarios suivants :
- Les URL .well_known et jwks_uri du fournisseur d'identité (IdP) sont inaccessibles depuis l'Internet public.
- Un pare-feu personnalisé bloque les demandes.
- Les requêtes d'API provenant de l'IdP avant d'atteindre le point de terminaison AWS STS présentent une latence de plus de 5 secondes.
- STS envoie trop de requêtes à votre URL .well_known ou au jwks_uri de l'IdP.
**Remarque :**Comme ce problème échoue côté client, l'historique des événements AWS CloudTrail n'enregistre pas cette erreur.
Résolution
Vérifiez l'accès public pour ..well_known et jwks_uri
Vérifiez que les URL .well_known et jwks_uri de l'IdP sont accessibles au public. Cela peut être vérifié à l'aide de votre navigateur, de la commande Windows ou de la commande Linux. Pour ce faire, effectuez l'une des actions suivantes :
Pour vérifier l'accès, cliquez sur les liens suivants dans votre navigateur :
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
-ou-
Exécutez les commandes suivantes :
Fenêtres :
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 :**Pour vérifier si vous pouvez accéder aux liens, recherchez le code d'état 200 dans la réponse à la demande.
Vérifiez les paramètres du pare-feu
Si les URL .well_known URL et jwks_uri de l'IdP ne sont pas accessibles, vérifiez les paramètres du pare-feu. Assurez-vous 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 appartenant à un autre réseau, tel qu'un téléphone. Pour vérifier l'accès depuis le navigateur, suivez les instructions de l’étape 1. Si la requête Web aboutit, c'est que le pare-feu bloque la demande.
Si le serveur qui effectue l'appel d'API AssumeRoleWithWebIdentity est une instance Amazon Elastic Compute Cloud (Amazon EC2), vérifiez les paramètres de configuration. Pour obtenir des instructions, consultez Pourquoi ne puis-je pas me connecter à un site Web hébergé sur mon instance EC2 ?
Vérifiez la latence de fonctionnement
Vérifiez la latence pour l'ensemble du fonctionnement. Cela inclut les attributs suivants :
- Délai de demande/réponse de la part de STS
- Délai de demande/réponse de la part de l'IdP
Réduire la latence STS
Utilisez les points de terminaison régionaux AWS plutôt que les points de terminaison globaux pour le service STS. Cela permet de vérifier que les demandes sont acheminées vers le serveur le plus proche géographiquement afin de minimiser la latence. Pour plus d'informations, consultez la section Écrire du code pour utiliser les régions AWS STS.
**Remarque :**Pour les kits SDK AWS, le paramètre Region achemine le point de terminaison de destination de la demande vers l'endroit où l'appel est effectué dans la configuration sts_regional_endpoint.
Évaluez la latence de l'IdP
L'IdP envoie des demandes au point de terminaison STS. Pour vérifier si la demande envoyée au point de terminaison STS prend trop de temps, analysez les paquets sortants de l'IdP dans les journaux de l'IdP.
**Remarque :**Si la demande envoyée par l'IdP au point de terminaison STS prend plus de 5 secondes, elle risque d'excéder le délai imparti 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 de cet appel d'API.
(Facultatif) Utilisez le retard exponentiel et augmentez le nombre de nouvelles tentatives
L'API AssumeRoleWithWebIdentity dépend de la récupération d'informations auprès du fournisseur d'identité (IdP). Pour éviter les erreurs de limitation, la plupart des IdP ont des limites d'API, et les appels d'API peuvent ne pas obtenir les clés requises de la part de l'IdP. Pour vous aider à assumer correctement un rôle si l'API rencontre des problèmes intermittents pour atteindre votre IdP, procédez comme suit :
Réduisez les requêtes STS à .well_known et jwks_uri
Si votre JSON Web Key Set (JWKS) définit les en-têtes de réponse Pragma : no-cache ou Cache-Control : no-cache, STS ne met pas en cache votre JWKS. Pour les clés référencées dans un ID\ _TOKEN mais qui ne figurent pas dans le cache, STS effectue un rappel. Dans ce cas, STS peut envoyer trop de requêtes à votre URL .well_known et jwks_uri.
Par conséquent, pour réduire les rappels provenant de STS, vérifiez que votre JWKS ne définit aucun de ces en-têtes de réponse. Cela permet à STS de mettre en cache votre JWKS.
Informations connexes
Bienvenue sur la page de référence de l'API AWS Security Token Service
Comment puis-je résoudre les erreurs de limitation des API ou de « taux dépassé » pour IAM et AWS STS ?