Pourquoi ai-je reçu l'erreur IAM « AWS n'a pas pu valider les informations d'identification d'accès fournies » dans certaines régions AWS ?

Dernière mise à jour : 27/06/2022

J'ai assumé un rôle AWS Identity et Access Management (IAM) et mon appel d'API a renvoyé une erreur similaire à ce qui suit :

« Une erreur s'est produite (AuthFailure) lors de l'appel de l'opération DescribeInstances : AWS n'a pas pu valider les informations d'identification d'accès fournies. »

Brève description

Service de jetons de sécurité AWS (AWS STS) prend en charge une version mise à jour des jetons de session, version 2. Les nouvelles régions AWS (par exemple, Bahreïn) ne sont pas activées par défaut et n'acceptent que la version mise à jour des jetons de session. Cette erreur peut se produire si des jetons de session version 1 sont utilisés pour envoyer une demande aux points de terminaison d'une région AWS qui ne sont pas activés par défaut. Pour plus d'informations, consultez Gestion de AWS STS dans une région AWS.

Solution

Les jetons de session obtenus à partir du point de terminaison régional AWS STS sont de version 2 et valides dans toutes les régions AWS. Comme bonne pratique, il est recommandé d'utiliser des points de terminaison STS régionaux. L'utilisation d'un point de terminaison géographiquement plus proche de votre application réduit la latence et fournit de meilleurs temps de réponse.

Utilisez l'une des méthodes suivantes pour résoudre l'erreur.

Obtenir des jetons à partir d'un point de terminaison régional

L'exemple de commande suivant utilise un kit AWS SDK for Python (Boto3).

Remarque :

  • Remplacez your-region, AccountID et RoleName en fonction de votre environnement.
  • La définition de endpoint_url est obligatoire pour configurer le client STS pour le point de terminaison régional.
# Replace existing code to create STS client with the following
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.your-region.amazonaws.com')

Incluez des options d'URL de région et de point de terminaison dans le script/commande bash existant pour utiliser les points de terminaison régionaux.

aws sts assume-role --role-arn arn:aws:iam::AccountID:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com

Modifier la compatibilité régionale des jetons de session pour le point de terminaison global

Par défaut, les appels AWS STS au point de terminaison global émettent des jetons de session qui sont de version 1. Les jetons de version 1 ne sont valides que dans les régions AWS qui sont activées par défaut. Cependant, vous pouvez également configurer le point de terminaison global STS pour émettre des jetons dans la version 2 qui peuvent être utilisés dans toutes les régions AWS.

Pour obtenir des instructions, consultez modifier la compatibilité régionale des jetons de session pour le point de terminaison global.

Important : les jetons de la version 2 incluent plus de personnages que la version 1. Cela peut affecter les systèmes existants dans lesquels vous stockez temporairement des jetons.