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 ?
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
Contenus pertinents
- demandé il y a 2 anslg...
- demandé il y a un anlg...
- demandé il y a 4 moislg...
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 5 mois
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 6 mois