Comment puis-je résoudre l'erreur « Le jeton de sécurité inclus dans la demande a expiré » lors de l'exécution d'applications Java sur Amazon EC2 ?

Date de la dernière mise à jour : 27/08/2020

Mes applications Java exécutées sur une instance Amazon Elastic Compute Cloud (Amazon EC2) et qui utilisent le kit AWS SDK pour Java rencontrent une exception similaire à la suivante :

com.amazonaws.AmazonServiceException: The security token included in the request is expired (Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)

Brève description

Toutes les demandes d'API d'application à Amazon Web Services (AWS) doivent être signées cryptographiquement à l'aide des informations d'identification émises par AWS.

Si votre application utilise des informations d'identification temporaires lors de la création d'un client AWS, les informations d'identification expirent dans l'intervalle de temps spécifié lors de leur création. Vous devez actualiser les informations d'identification avant qu'elles n'expirent.

Une autre raison de l'expiration est l'utilisation d'une heure incorrecte. Une référence temporelle cohérente et précise est cruciale pour de nombreux processus et tâches serveur. Les informations d'identification AWS sont rejetées si la date et l'heure de votre instance ne sont pas définies correctement.

Si votre application s'exécute sur une instance Amazon EC2, il est recommandé d'utiliser un rôle AWS Identity and Access Management (IAM) attribué à l'instance. L'utilisation d'un rôle IAM permet celle d'un constructeur de service par défaut. Le client constructeur par défaut recherche les informations d'identification à l'aide de la chaîne de fournisseurs d'informations d'identification par défaut, dans l'ordre suivant :

  1. Dans les variables d'environnement système : AWS_ACCESS_KEY_ID et AWS_SECRT_ACCESS_KEY
  2. Dans les propriétés du système Java : aws.accessKeyId et aws.SecretKey.
  3. Dans le fichier d'informations d'identification par défaut (l'emplacement de ce fichier varie selon la plateforme).
  4. Dans le profil d'instance des informations d'identification contenues dans les métadonnées d'instance associées au rôle IAM pour l'instance EC2. L'attachement d'un profil d'instance à votre instance ajoute des informations d'identification de profil d'instance à la chaîne de fournisseurs d'informations d'identification par défaut. Pour plus d'informations, consultez Utilisation d'un rôle IAM pour accorder des autorisations à des applications s'exécutant sur des instances Amazon EC2.
    Si des informations d'identification de profil d'instance sont disponibles, le constructeur client par défaut crée une instance de la classe kit AWS SDK InstanceProfileCredentialsProvider. AWS utilise cette classe pour signer des demandes d'API avec des informations d'identification AWS à l'aide d'informations d'identification de sécurité temporaires provenant des métadonnées d'instanceAmazon EC2.

Important : si votre application utilise la classe kit AWS SDK ProfileCredentialsProvider pour fournir des informations d'identification AWS temporaires, vous êtes responsable de la vérification et de l'actualisation des informations d'identification avant leur expiration. La non-vérification ou la non-actualisation de vos justificatifs d'identité peut augmenter la probabilité d'échec des candidatures en raison d'erreurs de type ExpiredToken.

Résolution

Utiliser Amazon Time Sync Service ou les sources NTP

Pour vous assurer que votre instance Linux dispose d'une référence temporelle cohérente et précise, configurez Amazon Time Sync Service ou une autre source NTP (Network Time Protocol) sur votre instance Amazon EC2. Pour plus d'informations, consultez Réglage de l'heure pour votre instance Linux, ou Réglage de l'heure pour une instance Windows.

Utiliser des informations d'identification AWS temporaires personnalisées

Actualisez les informations d'identification temporaires cinq minutes avant leur expiration.

Utiliser un rôle IAM attribué à une instance

Attachez un profil d'instance à votre instance. Pour plus d'informations, consultez Utilisation d'un rôle IAM pour accorder des autorisations à des applications s'exécutant sur des instances Amazon EC2. Vérifiez qu'aucune autre identification n'est spécifiée dans votre code ou sur l'instance. Les informations d'identification du profil d'instance sont le dernier endroit où la chaîne du fournisseur d'informations d'identification par défaut recherche des informations d'identification. Toute information d'identification située n'importe où en amont de la chaîne de recherche empêche l'utilisation de l'IAM. Pour plus d'informations, consultez Utilisation des informations d'identification AWS.

Pour afficher les informations d'identification AWS pour un rôle IAM attaché à une instance, exécutez les commandes suivantes à partir d'un shell Linux ou à partir de Windows PowerShell (v3.0 ou ultérieure). Veillez à remplacer exemple_rôle par le nom de votre rôle IAM.

Pour Linux, utilisez la commande curl pour afficher les informations d'identification AWS :

$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

Cette commande renvoie une sortie similaire à la suivante :

{
    "Code" : "Success",
    "LastUpdated" : "2016-04-26T16:39:16Z",
    "Type" : "AWS-HMAC",
    "AccessKeyId" : "AKIAIOSFODNN7EXAMPLE",
    "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    "Token" : "token",
    "Expiration" : "2016-04-27T22:39:16Z"
}

Pour Windows, utilisez la commande Invoke-RestMethod pour afficher les informations d'identification AWS :

PS C:\> Invoke-RestMethod http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole

Cette commande renvoie une sortie similaire à la suivante :

Code            : Success
LastUpdated     : 2016-07-18T18:09:47Z
Type            : AWS-HMAC
AccessKeyId     : AKIAIOSFODNN7EXAMPLE
SecretAccessKey : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Token           : token
Expiration      : 2016-04-27T22:39:16Z

Utilisez ces commandes pour vérifier les dernières informations d'identification temporaires pour l'instance. Ces informations d'identification pivotent ou s'actualisent automatiquement environ cinq minutes avant l'expiration des informations d'identification temporaires affectées.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?