Passer au contenu

Comment résoudre l'erreur de clé d'accès IAM « The security token included in the request isn't valid » ?

Lecture de 6 minute(s)
0

Lorsque j'utilise mes clés d'accès Gestion des identités et des accès AWQS (IAM), je reçois un message d'erreur InvalidClientTokenID concernant un jeton de sécurité non valide.

Brève description

Cette erreur d'authentification se produit parce que vos clés d'accès IAM se trouvent à un endroit inattendu, ne sont pas configurées correctement, sont supprimées ou ont expiré. Les clé d'accès utilisées dépendent de l'ordre et de la priorité des fournisseurs d'informations d'identification. Pour en savoir plus, consultez la section Configuration et priorité des informations d'identification.

Dans la résolution suivante, l'erreur se produit sur une instance Amazon Elastic Compute Cloud (Amazon EC2) basée sur Linux, en raison de clés d'accès non valides.

Résolution

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

Pour résoudre cette erreur, recherchez l'emplacement des informations d'identification de l'utilisateur, vérifiez que les clés d'accès sont valides, puis mettez-les à jour ou remplacez-les.

Trouver l'emplacement des informations d'identification de l'utilisateur

Pour obtenir les clés d'accès IAM utilisées par l'instance EC2, exécutez la commande de l'AWS CLI get-caller-identity suivante :

aws sts get-caller-identity --debug

Exemple de sortie :

2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: env
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: sso
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

Dans l'exemple de sortie précédent, les clés d'accès utilisées par l'instance Amazon EC2 se trouvent dans le fichier : ~/.aws/credentials.

Remarque : Le fichier .aws/credentials contient les informations d'identification de vos entités IAM. Lorsque vous gérez vos clés d'accès, vérifiez que vous suivez les bonnes pratiques de sécurité dans IAM.

Vérifiez que les clés d'accès sont valides

Pour vérifier que les clés d'accès sont valides pour l'emplacement et l'action d'appel d'API, procédez comme suit :

  1. Pour vérifier quelles clés d'accès sont utilisées par l'instance Amazon EC2, exécutez les commandes suivantes :

    cd ~/.aws
    cat credentials

    Exemple de sortie :

    [default]
    aws_access_key_id=AKIAIOSFODNN7EXAMPLE
    aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  2. Pour vérifier que les autorisations de clé d'accès sont valides, utilisez laConsole de gestion AWS ou l'AWS CLI.

Mettre à jour ou remplacer les clés d'accès

Si les clés d'accès ont expiré ou ont été supprimées, mettez-les à jour.

Si vous utilisez un profil nommé avec l'AWS CLI, vérifiez que les valeurs des paramètres aws_access_key_id et aws_session_token sont correctes. Les paramètres du profil sont enregistrés dans les fichiers**./aws/credentials** ou ./aws/config.

Si vos clés d'accès sont stockées dans des variables d'environnement qui ne sont pas valides, exécutez la commande suivante pour les supprimer :

unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN

Si vous avez mis à jour les paramètres de votre profil, assurez-vous de réinitialiser les variables d'environnement.

Après avoir mis à jour ou remplacé les clés d'accès, pour vérifier que les informations d'identification sont valides, exécutez la commande de l'AWS CLI get-caller-identity suivante :

aws sts get-caller-identity --debug

Exemple de sortie :

2024-06-04 12:46:07,167 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: env
2024-06-04 12:46:07,167 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: sso
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: custom-process
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: config-file
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: ec2-credentials-file
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: boto-config
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: container-role
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: iam-role
2024-06-04 12:46:07,177 - MainThread - botocore.credentials - DEBUG - Found credentials from IAM Role: ec2_Role

Dans l'exemple de sortie précédent, les informations d'identification du profil d'instance Amazon EC2 sont utilisées par l'instance car aucune autre information d'identification n'est stockée avec une priorité plus élevée.

Résoudre les erreurs ExpiredToken avec des informations d'identification de sécurité temporaires

Remarque : Il est recommandé d'utiliser des informations d'identification de sécurité temporaires plutôt que des informations d'identification de sécurité à long terme telles que des clés d'accès. Pour plus d'informations sur les dispositions de sécurité de votre compte AWS, consultez la section Considérations relatives à la sécurité.

Les informations d'identification de sécurité temporaires expirent après une durée spécifiée et ne peuvent pas être prolongées au-delà de leur date d'expiration initiale. Lorsque vous utilisez des informations d'identification expirées, vous recevez une erreur ExpiredToken.

Pour résoudre cette erreur, vous devez demander de nouvelles informations d'identification temporaires. Si vous avez initialement utilisé GetSessionToken pour obtenir des informations d'identification temporaires, exécutez la commande de l'AWS CLI get-session-token suivante pour demander de nouvelles informations d'identification :

aws sts get-session-token \
    --duration-seconds 3600

Remarque : remplacez 3600 par la durée de session souhaitée, en secondes. Le minimum est de 900 secondes et le maximum est de 129 600 secondes.

Pour des exemples de code sur l'utilisation de GetSessionToken, consultezUtiliser GetSessionToken avec un SDK AWS ou la CLI.

Informations connexes

Pourquoi mon instance Amazon EC2 utilise-t-elle des informations d'identification d'utilisateur IAM au lieu d'informations d'identification de rôle IAM ?

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

Gestion d'AWS STS dans une région AWS

AWS OFFICIELA mis à jour il y a 6 mois