En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je résoudre l'erreur AWS STS « the security token included in the request is expired » lorsque j'utilise l'AWS CLI pour endosser un rôle IAM ?

Lecture de 6 minute(s)
0

Je souhaite endosser un rôle AWS Identity and Access Management (IAM) via l’interface de la ligne de commande AWS (AWS CLI). J'ai reçu le message d'erreur « security token included in the request is expired ».

Brève description

Les informations d'identification de sécurité temporaires pour les utilisateurs IAM sont demandées via le service AWS Security Token Service (AWS STS). Les informations d'identification temporaires créées à l'aide de l'action d’API AssumeRole durent une heure par défaut. Une fois les informations d'identification temporaires expirées, elles ne peuvent pas être réutilisées. Pour plus d'informations, consultez la section Informations d'identification de sécurité temporaires dans IAM.

Résolution

Suivez les étapes de dépannage ci-dessous en fonction de votre cas d’utilisation.

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.

Assurez-vous que vos requêtes 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 requiert un ID de clé d'accès, une clé d'accès secrète et un jeton de session. Les requêtes envoyées doivent atteindre le point de terminaison AWS dans les cinq minutes suivant l'horodatage de la requête, sinon celle-ci est refusée. Pour plus d'informations, consultez la section Pourquoi les requêtes sont signées.

Utilisation de profils pour endosser un rôle IAM

Un profil nommé est un ensemble de paramètres et d'informations d'identification que vous pouvez appliquer à une commande AWS CLI. Vérifiez 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 résultat :

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 vérifier 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 résultat :

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 assume-role similaire à la commande suivante :

aws sts assume-role --role-arn arn:aws:iam::<account-number>:role/Prod-Role --role-session-name environment-prod

Exemple de résultat :

{
"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 la durée maximale d’expiration de session des informations d’identification temporaires pour les rôles IAM à l’aide du paramètre DurationSeconds pour votre cas d’utilisation.

Le nouvel appel d'API assume-role récupère ensuite 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 avec l'utilisateur qui endosse le rôle dans le fichier ~/.aws/config ou ~/.aws/credentials comme 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 comme suit :

[user1]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

La définition de 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) contenant les informations d'identification de 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 un message d'erreur concernant des informations d'identification expirées, vous pouvez vider 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 endosser le rôle IAM, puis 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'endosser le rôle IAM, d’une manière à 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 endossé le rôle IAM, 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 requête. Pour plus d’informations, consultez la section Comment puis-je endosser un rôle IAM à l’aide de l’AWS CLI ?

Les variables d'environnement conservent les informations d'identification temporairement mises 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 des 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 redéfinir les variables d'environnement.

Important : Les fichiers .aws/credentials et .aws/config contiennent les informations d'identification de vos entités IAM. Lorsque vous gérez vos informations d'identification, assurez-vous de suivre les bonnes pratiques de sécurité dans IAM.

Informations connexes

Demander des informations d’identification de sécurité temporaires

Comment puis-je résoudre l'erreur « The security token included in the request is expired » lors de l'exécution d'applications Java sur Amazon EC2 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un mois