Wie behebe ich den Fehler „The security token included in the request is expired“, wenn ich Java-Anwendungen auf Amazon EC2 ausführe?

Lesedauer: 4 Minute
0

Meine Java-Anwendungen, die das AWS SDK für Java auf einer Amazon Elastic Compute Cloud (Amazon EC2)-Instance verwenden, erhalten die folgende Fehlermeldung: „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)“.

Kurzbeschreibung

AWS verlangt, dass alle API-Anforderungen für Anwendungen digital mit den von AWS bereitgestellten Anmeldeinformationen signiert werden. Wenn die Anwendung temporäre Anmeldeinformationen verwendet, um einen AWS-Client zu erstellen, musst du diese Anmeldeinformationen erneuern, bevor sie ablaufen. Wenn die Anmeldeinformationen ablaufen, erhältst du die Fehlermeldung security token included in the request is expired. Um diesen Fehler zu beheben, überprüfe die Zeitreferenz, aktualisiere abgelaufene temporäre Anmeldeinformationen und überprüfe dann die AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Konfigurationen.

Lösung

Sicherstellen, dass die Instance eine konsistente Zeitreferenz hat

Anmeldeinformationen laufen ab, wenn sie die falsche Uhrzeit verwenden. Stelle daher sicher, dass der Server korrekt ist. Die EC2-Instance muss über eine konsistente und genaue Uhrzeit- und Datumsreferenz verfügen. Konfiguriere den Amazon Time Sync Service oder eine andere Network Time Protocol (NTP)-Quelle auf der Instance. Weitere Informationen findest du unter Zeitzone der Instance ändern.

Sicherstellen, dass die temporären Anmeldeinformationen nicht abgelaufen sind

Wenn du temporäre Anmeldeinformationen verwendest, stelle sicher, dass diese nicht abgelaufen sind. Wenn die temporären Anmeldeinformationen abgelaufen sind, musst du einen neuen Satz temporärer Anmeldeinformationen generieren und diese verwenden. Es hat sich bewährt, temporäre Anmeldeinformationen fünf Minuten vor ihrem Ablauf zu aktualisieren.

Überprüfen der IAM-Konfiguration

Bei Anwendungen, die auf einer EC2-Instance ausgeführt werden, empfiehlt es sich, eine der Instance zugewiesene IAM-Rolle zu verwenden. Wenn du eine IAM-Rolle verwendest, überprüfe, ob die Konfiguration korrekt eingerichtet ist.

Bei einer IAM-Rolle verwendet ein Standard-Servicekonstruktor eine standardmäßige Anbieterkette für Anmeldeinformationen für die Suche nach Anmeldeinformationen in der folgenden Reihenfolge:

  1. In den Systemumgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY.
  2. In den Java-Systemeigenschaften aws.accessKeyId und aws.secretKey.
  3. In der Datei der Standard-Anmeldeinformationen.
  4. In den Anmeldeinformationen für das Instance-Profil in den Instance-Metadaten, die der IAM-Rolle zugeordnet sind.

Weitere Informationen findest du unter Verwenden einer IAM-Rolle zum Erteilen von Berechtigungen für Anwendungen, die auf Amazon EC2-Instances ausgeführt werden.

Wenn du Anmeldeinformationen an einer beliebigen Stelle außer dem Instance-Profil auflistest, findet der Standard-Client-Konstruktor diese Anmeldeinformationen zuerst. Diese Konfiguration blockiert die IAM-Rollen-Anmeldeinformationen. Weitere Informationen findest du unter Temporäre Anmeldeinformationen für das AWS SDK für Java bereitstellen.

Um die Anmeldeinformationen für die IAM-Rolle anzuzeigen, führe die folgenden Befehle von Windows PowerShell Version 3.0 oder höher oder von einer Linux-Shell aus. Wenn du temporäre Anmeldeinformationen verwendest, zeigen die folgenden Windows- und Linux-Befehle die neuesten temporären Anmeldeinformationen für die Instance an.

Hinweis: Ersetze in den folgenden Befehlen examplerole durch den Namen deiner IAM-Rolle.

Windows:

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

Du erhältst eine Ausgabe, die der folgenden ähnelt:

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

Du erhältst eine Ausgabe, die der folgenden ähnelt:

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

Wenn du beim Ausführen des vorherigen curl-Befehls einen 404-Fehler erhältst, stelle sicher, dass der HTTP-Proxy für die Metadaten-IP-Adresse deaktiviert ist. Stelle außerdem sicher, dass das Instance-Profil ordnungsgemäß an die Instance angefügt ist.

Wenn das Problem weiterhin besteht, stelle sicher, dass die Instance nicht mehrere gleichzeitige Anforderungen stellt oder mehrere Sitzungen parallel ausführt. Dieses Szenario kann dazu führen, dass der Instance Metadata Service (IMDS) die Abfrage drosselt. Verwende das Wiederholungsmuster mit exponentiellem Backoff, um dieses Problem zu beheben.

Um Wiederholungsversuche einzurichten, ändere AWS_METADATA_SERVICE_NUM_ATTEMPTS. Um Optionen festzulegen, verwende Umgebungsvariablen, die Datei ~/.aws/config oder die Botocore-Sitzung des Benutzers. Weitere Informationen findest du unter Konfiguration auf der Boto3-Dokumentations-Website.

Beispiel:

AWS_METADATA_SERVICE_TIMEOUT = 10
AWS_METADATA_SERVICE_NUM_ATTEMPTS = 5

Wenn du den Befehl curl in einem Docker-Container ausführst, erhöhe das http-put-response-hop-limit auf 2. Führe den folgenden Befehl modify-instance-metadata-options der AWS Command Line Interface (AWS CLI) aus:

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

Hinweis: Ersetze instance durch deine Instance-ID. Wenn du beim Ausführen von AWS CLI-Befehlen Fehler erhältst, findest du weitere Informationen unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Weitere Informationen findest du unter Erweiterter Schutz vor offenen Firewalls, Reverse-Proxys und SSRF-Schwachstellen mit Erweiterungen für den EC2 Instance.Metadatenservice.

Die Rollenanmeldeinformationen werden fünf Minuten vor Ablauf der zugewiesenen temporären Anmeldeinformationen automatisch rotiert oder aktualisiert.

Ähnliche Informationen

SDK-Authentifizierung konfigurieren

IAM-Rollen für Amazon EC2

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten