Passer au contenu

Comment résoudre l’erreur IAM « AWS was not able to validate the provided access credentials » dans certaines régions ?

Lecture de 3 minute(s)
0

J'ai assumé un rôle Gestion des identités et des accès AWS (AWS IAM) et mon appel d'API a renvoyé l'erreur suivante : « An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials. »

Brève description

Par défaut, AWS n'active pas les nouvelles régions AWS et les nouvelles régions n'acceptent que les jetons de version 2. Lorsque les jetons de version 1 envoient une requête aux points de terminaison de service dans une région qu'AWS n'active pas, l'erreur suivante se produit :

« An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials. »

Il est recommandé d'utiliser les points de terminaison régionaux AWS Security Token Service (AWS STS), car les jetons de session d'un point de terminaison régional STS sont des jetons de version 2 et sont valides dans toutes les régions. Vous pouvez également modifier les paramètres de compatibilité régionale pour les jetons de session depuis le point de terminaison global.

Résolution

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

Important : Pour les régions qu'AWS active par défaut, vous devez activer le point de terminaison régional STS dans le compte AWS qui génère les informations d'identification temporaires, quel que soit le compte qui soumet la requête. Pour les régions activées manuellement, activez la région à la fois dans le compte qui effectue la requête et dans le compte qui génère les informations d'identification. Si vous n'activez pas la région sur les deux comptes, le message d'erreur « InvalidClientTokenID » s'affiche.

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Vous pouvez utiliser un kit AWS SDK ou l'AWS CLI pour obtenir des jetons.

Par exemple, vous pouvez exécuter la commande suivante du kit AWS SDK pour Python (Boto3) :

# 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')

Remarque : Remplacez your-region par votre region et endpoint_url par votre point de terminaison.

Ou bien exécutez la commande assume-role suivante :

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

Remarque : Remplacez your-region par votre région, role-arn par votre Amazon Resource Name (ARN) IAM et endpoint_url par votre point de terminaison.

Modifier les paramètres de compatibilité régionale pour les jetons de session depuis le point de terminaison global

Par défaut, les appels STS que vous passez vers le point de terminaison global émettent des jetons de version 1. Pour utiliser des jetons de session dans toutes les régions, configurez le point de terminaison global STS pour émettre des jetons de version 2.

Important : Les jetons de la version 2 contiennent plus de caractères que ceux de la version 1. L'augmentation de la taille des jetons peut affecter les systèmes existants qui stockent temporairement les jetons de session. Assurez-vous que le système qui stocke vos jetons peut gérer l'augmentation de la taille des jetons.