Comment résoudre l'erreur AWS STS « the security token included in the request is expired » (le jeton de sécurité inclus dans la demande a expiré) lorsque j'utilise l'AWS CLI pour assumer un rôle IAM ?
J'ai essayé d'assumer un rôle AWS Identity and Access Management (IAM) en utilisant l'AWS Command Line Interface (AWS CLI). Toutefois, un message d'erreur de ce type s'affiche : « The security token included in the request is expired. » (Le jeton de sécurité inclus dans la demande a expiré.)
Brève description
Les informations d'identification de sécurité temporaires pour les utilisateurs IAM sont demandées à l'aide du service AWS Security Token Service (AWS STS). Les informations d'identification temporaires créées avec l'action AssumeRole de l'API durent une heure par défaut. Une fois que les informations d'identification temporaires ont expiré, elles ne peuvent plus être réutilisées. Pour plus d'informations, consultez Informations d'identification de sécurité temporaires dans IAM.
Solution
Suivez les étapes de dépannage suivantes pour votre cas d'utilisation.
Si vous recevez des erreurs lors de l'exécution de commandes depuis l'AWS CLI, assurez-vous que vous utilisez la version d'AWS CLI la plus récente.
Assurez-vous que vos demandes d'informations d'identification de sécurité temporaires peuvent atteindre les points de terminaison AWS
L'établissement d'informations d'identification pour un rôle nécessite un identifiant de la clé d'accès, une clé d'accès secrète et un jeton de session. Les demandes envoyées doivent atteindre le point de terminaison AWS dans les cinq minutes suivant l'horodatage de la demande, sinon la demande est refusée. Pour plus d'informations, consultez Pourquoi les demandes sont signées.
Utilisation de profils pour assumer un rôle IAM
Un profil nommé est une collection de paramètres et d'informations d'identification que vous pouvez appliquer à une commande AWS CLI. Vous devez vérifier que vous utilisez les informations d'identification correctes.
La commande AWS CLI suivante utilise les informations d'identification du profil par défaut :
aws s3 ls
Cet exemple de commande utilise les informations d'identification du profil project1 configurées dans le fichier .config :
aws s3 ls --profile project1
Exemple de sortie utilisant des informations d'identification expirées :
"An error occurred (ExpiredToken) when calling the ListBuckets operation: The provided token has expired."
Ces profils sont définis dans votre dossier .aws contenant les fichiers .credentials et .config.
Le fichier de configuration se trouve dans ~/.aws/config pour Linux/macOS et C:\Users%USERPROFILE%.aws\config pour Windows. Le fichier d'informations d'identification se trouve dans ~/.aws/credentials pour Linux/macOS et C:\Users%USERPROFILE%.aws\credentials pour Windows.
Pour vérifier les informations d'identification de votre profil par défaut, exécutez la commande suivante :
aws configure list --profile default
Exemple de sortie :
Name Value Type Location ---- ----- ---- -------- profile default manual —profile access_key TGN7 shared-credentials-file secret_key SbXb shared-credentials-file region us-east-1 config-file ~/.aws/config
Pour confirmer que les mêmes informations d'identification sont utilisées pour le profil project1, exécutez la commande suivante :
aws configure list --profile project1
Exemple de sortie :
Name Value Type Location ---- ----- ---- -------- profile project1 manual —profile access_key QN2X config-file secret_key LPYI config-file region eu-west-1 config-file ~/.aws/config
Dans l'exemple de sortie, notez que des informations d'identification différentes peuvent être configurées pour les profils par défaut et project1.
Vous pouvez créer un profil dans votre fichier .aws/config en utilisant le format suivant :
[profile project1] region = eu-west-1 aws_access_key_id = <access-Key-for-an-IAM-role> aws_secret_access_key = <secret-access-Key-for-an-IAM-role> aws_session_token = <session-token>
Ces informations d'identification vous sont fournies lorsque vous exécutez la commande AWS STS assume-role similaire à ce qui suit :
aws sts assume-role --role-arn arn:aws:iam::<account-number>:role/Prod-Role --role-session-name environment-prod
Exemple de sortie :
{ "AssumedRoleUser": { "AssumedRoleId": "AROAXXXXXXXXXXXX:environment-prod", "Arn": "arn:aws:sts::<account-number>:assumed-role/Prod-Role/environment-prod" }, "Credentials": { "SecretAccessKey": "<secret-access-Key-for-an-IAM-role>, "SessionToken": "<session-token>", "Expiration": "2020-03-31T17:17:53Z", "AccessKeyId": "<access-Key-for-an-IAM-role>" }
Remarque : vous pouvez augmenter le délai d'expiration maximal de la session pour les informations d'identification temporaires des rôles IAM à l'aide du paramètre DurationSeconds pour votre cas d'utilisation.
Le nouvel appel d'API assume-role récupère alors un nouvel ensemble d'informations d'identification valides. Après l'appel d'API, vous devez mettre à jour manuellement le fichier ~/.aws/config avec les nouvelles informations d'identification temporaires.
Vous pouvez éviter de mettre à jour le fichier de configuration à chaque fois qu'une session expire. Définissez un profil pour le rôle IAM ainsi que l'utilisateur qui assume le rôle dans le fichier ~/.aws/config ou ~/.aws/credentials similaire à ce qui suit :
[profile project1] role_arn = <arn-of-IAM-role> source_profile = user1 region = <region>
Notez que user1 est défini dans votre fichier ~/.aws/credentials similaire à ce qui suit :
[user1] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
La définition du source_profile signifie que vous n'avez pas à mettre à jour vos informations d'identification temporaires dans le fichier ~/.aws/config ou ~/.aws/credentials.
La commande AWS CLI suivante répertorie les compartiments Amazon Simple Storage Service (Amazon S3) avec les informations d'identification pour user1 situées dans le fichier ~/.aws/credentials.
aws s3 ls --profile project1
Si vous utilisez l'AWS CLI avec un élément source_profile, l'appel d'API assume-role place les informations d'identification dans le fichier .aws/cli/cache. Les informations d'identification expirées sont automatiquement mises à jour dans le fichier .aws/cli/cache. Si vous recevez une erreur pour des informations d'identification expirées, vous pouvez effacer le cache à l'aide des commandes suivantes :
Linux/macOS :
$ rm -r ~/.aws/cli/cache
Windows :
C:\> del /s /q %UserProfile%\.aws\cli\cache
L'AWS CLI crée de nouvelles informations d'identification dans le cache.
Créer des variables d'environnement pour assumer le rôle IAM et ensuite vérifier l'accès
Vous pouvez utiliser les informations d'identification du rôle IAM pour créer trois variables d'environnement afin d'assumer le rôle IAM de manière similaire à ce qui suit :
Linux/macOS :
export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken
Windows :
C:\> setx AWS_ACCESS_KEY_ID RoleAccessKeyID C:\> setx AWS_SECRET_ACCESS_KEY RoleSecretKey C:\> setx AWS_SESSION_TOKEN RoleSessionToken
Pour vérifier que vous avez assumé le rôle IAM correct, exécutez la commande suivante :
aws sts get-caller-identity
La commande get-caller-identity affiche des informations sur l'identité IAM utilisée pour authentifier la demande. Pour plus d'informations, consultez Comment assumer un rôle IAM à l'aide de l'AWS CLI ?
Les variables d'environnement conservent les informations d'identification temporaires en cache même après leur expiration et ne sont pas renouvelées automatiquement. Utilisez les commandes suivantes pour vérifier si les variables d'environnement des informations d'identification sont définies :
Linux/macOS :
$ printenv | grep AWS
Windows :
C:\>set AWS
Vous pouvez supprimer les variables d'environnement expirées à l'aide des commandes suivantes :
Linux/macOS :
$ unset AWS_ACCESS_KEY_ID $ unset AWS_SECRET_ACCESS_KEY $ unset AWS_SESSION_TOKEN
Windows :
C:\>set AWS_ACCESS_KEY_ID= C:\>set AWS_SECRET_ACCESS_KEY= C:\>set AWS_SESSION_TOKEN=
Vous pouvez maintenant utiliser à nouveau l'appel d'API assume-role pour obtenir de nouvelles informations d'identification valides et définir à nouveau les variables d'environnement.
Important : les fichiers .aws/credentials et .aws/config contiennent des détails des informations d'identification de vos entités IAM. Lorsque vous gérez vos informations d'identification, assurez-vous de respecter les bonnes pratiques de sécurité en matière d'IAM.
Informations connexes
Demande d'informations d'identification temporaires de sécurité

Contenus pertinents
- demandé il y a 5 jourslg...
- demandé il y a un moislg...
- demandé il y a 11 jourslg...
- demandé il y a 16 heureslg...
- demandé il y a 24 jourslg...
- AWS OFFICIELA mis à jour il y a 5 mois
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 7 mois