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 ?

Lecture de 5 minute(s)
0

Mes applications Java qui utilisent le kit SDK AWS pour Java sur une instance Amazon Elastic Compute Cloud (Amazon EC2) reçoivent l'erreur suivante : « com.amazonaws.AmazonServiceException: The security token included in the request is expired (Service: AmazonSQS ; code de statut : 403 ; code d’erreur : ExpiredToken ; ID de requête : 12a345b6-78cd-901e-fg23-45hi67890jkl) ».

Brève description

AWS exige que toutes les requêtes d'API d'application soient signées numériquement à l'aide des informations d'identification fournies par AWS. Lorsque votre application utilise des informations d'identification temporaires pour créer un client AWS, vous devez renouveler ces informations d'identification avant leur expiration. Si vos informations d'identification expirent, vous recevez l’erreur security token included in the request is expired. Pour résoudre cette erreur, vérifiez votre référence temporelle, actualisez les informations d'identification temporaires expirées, puis vérifiez vos configurations AWS Identity and Access Management (IAM).

Résolution

Assurez-vous que votre instance possède une référence temporelle cohérente

Les informations d'identification expirent si l'heure est incorrecte. Assurez-vous donc que votre serveur est exact. Votre instance EC2 doit avoir une référence d'heure et de date cohérente et précise. Configurez le service Amazon Time Sync ou une autre source NTP (Network Time Protocol) sur votre instance. Pour plus d'informations, consultez la section Modifier le fuseau horaire de votre instance.

Assurez-vous que vos informations d'identification temporaires ne sont pas expirées

Si vous utilisez des informations d'identification temporaires, assurez-vous qu'elles ne sont pas expirées. Si les informations d'identification temporaires ont expiré, vous devez générer un nouvel ensemble d'informations d'identification temporaires et les utiliser. Il est recommandé d'actualiser les informations d'identification temporaires cinq minutes avant leur expiration.

Vérifiez votre configuration IAM

Pour les applications qui s'exécutent sur une instance EC2, il est recommandé d'utiliser un rôle IAM attribué à l'instance. Si vous utilisez un rôle IAM, vérifiez que votre configuration est correctement configurée.

Avec un rôle IAM, un constructeur de service par défaut utilise une chaîne de fournisseurs d'informations d'identification par défaut pour rechercher des informations d'identification dans l'ordre suivant :

  1. Dans les variables d'environnement système AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY.
  2. Dans les propriétés système Java aws.accessKeyId et aws.secretKey.
  3. Dans le fichier d'informations d'identification par défaut.
  4. Dans le profil d'instance, les informations d'identification se trouvent dans les métadonnées d'instance associées au rôle IAM.

Pour plus d'informations, consultez la section Utiliser un rôle IAM pour accorder des autorisations aux applications exécutées sur des instances Amazon EC2.

Si vous répertoriez les informations d'identification à un autre emplacement que le profil d'instance, le constructeur client par défaut les trouve en premier. Cette configuration bloque les informations d'identification du rôle IAM. Pour plus d'informations, consultez la section Fournir des informations d'identification temporaires au kit SDK AWS pour Java.

Pour consulter les informations d'identification du rôle IAM, exécutez les commandes suivantes depuis Windows PowerShell version 3.0 ou ultérieure ou depuis un shell Linux. Si vous utilisez des informations d'identification temporaires, les commandes Windows et Linux suivantes affichent les informations d'identification temporaires les plus récentes pour l'instance.

Remarque : Dans les commandes suivantes, remplacez examplerole par le nom de votre rôle IAM.

Windows :

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

Vous obtenez une sortie similaire à l'exemple suivant :

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

Linux :

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

Vous obtenez une sortie similaire à l'exemple suivant :

{    "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"
}

Si vous recevez une erreur 404 lorsque vous exécutez la commande curl précédente, vérifiez que le proxy HTTP est désactivé pour l'adresse IP des métadonnées. Assurez-vous également que le profil d'instance est attaché à l'instance.

Si le problème persiste, vérifiez que l'instance n'effectue pas plusieurs requêtes simultanées ou n'exécute pas plusieurs sessions en parallèle. Ce scénario peut entraîner la limitation de la requête par le service de métadonnées d'instance (IMDS). Pour remédier à ce problème, utilisez le modèle de nouvelle tentative avec backoff exponentiel.

Pour configurer de nouvelles tentatives, modifiez AWS_METADATA_SERVICE_NUM_ATTEMPTS. Pour définir les options, utilisez des variables d'environnement, le fichier ~/.aws/config ou la session botocore de l'utilisateur. Pour plus d'informations, consultez la page Configuration sur le site Web de documentation de Boto3.

Exemple :

AWS_METADATA_SERVICE_TIMEOUT = 10
AWS_METADATA_SERVICE_NUM_ATTEMPTS = 5

Si vous exécutez la commande curl dans un conteneur Docker, augmentez http-put-response-hop-limit à 2. Exécutez la commande modify-instance-metadata-options de l'interface de ligne de commande AWS (AWS CLI) suivante :

aws ec2 modify-instance-metadata-options --instance-id instance --http-put-response-hop-limit 2 --http-endpoint enabled

Remarque : Remplacez instance par votre ID d'instance. Si des erreurs surviennent lorsque vous exécutez des commandes AWS CLI, consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.

Pour plus d'informations, consultez la section Ajouter une défense approfondie contre les pare-feux ouverts, les proxys inverses et les vulnérabilités SSRF grâce à des améliorations apportées au service de métadonnées d'instance EC2.

Les informations d'identification des rôles sont automatiquement renouvelées ou actualisées cinq minutes avant l'expiration des informations d'identification temporaires attribuées.

Informations connexes

Configurer l'authentification du kit SDK

Rôles IAM pour Amazon EC2

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