Wie behebe ich den IAM-Zugriffsschlüsselfehler „The security token included in the request isn’t valid“?
Wenn ich meine AWS Identity and Access Management (IAM)-Zugriffsschlüssel verwende, erhalte ich einen InvalidClientTokenId-Fehler wegen eines ungültigen Sicherheitstokens.
Kurzbeschreibung
Dieser Authentifizierungsfehler tritt auf, weil sich deine IAM-Zugriffsschlüssel an einem unerwarteten Speicherort befinden, nicht richtig konfiguriert sind oder gelöscht wurden oder abgelaufen sind. Welche Zugriffsschlüssel verwendet werden, hängt von der Reihenfolge und Priorität der Anmeldeinformationsanbieter ab. Weitere Informationen findest du unter Vorrang der Konfiguration und der Anmeldeinformationen.
In der folgenden Lösung tritt der Fehler auf einer Linux-basierten Amazon Elastic Compute Cloud (Amazon EC2)-Instance aufgrund ungültiger Zugriffsschlüssel auf.
Lösung
Hinweis: Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, findest du weitere Informationen unter Behebung von Fehlern für den AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Um diesen Fehler zu beheben, finde den Speicherort der Benutzeranmeldeinformationen, überprüfe die Gültigkeit der Zugriffsschlüssel und aktualisiere oder ersetze sie anschließend.
Speicherort der Benutzeranmeldeinformationen ermitteln
Um die von der EC2-Instance verwendeten IAM-Zugriffsschlüssel abzurufen, führe den folgenden AWS CLI-Befehl get-caller-identity aus:
aws sts get-caller-identity --debug
Beispielausgabe:
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: env 2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role 2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity 2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: sso 2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file 2024-06-04 11:28:22,588 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials
In der vorherigen Beispielausgabe befinden sich die von der Amazon EC2-Instance verwendeten Zugriffsschlüssel in der Datei: ~/.aws/credentials.
Hinweis: Die Datei .aws/credentials enthält Anmeldeinformationsdetails für deine IAM-Entitäten. Wenn du deine Zugriffsschlüssel verwaltest, stelle sicher, dass du die Sicherheits-Best Practices in IAM befolgst.
Überprüfen, ob die Zugriffsschlüssel gültig sind
Um zu überprüfen, ob die Zugriffsschlüssel für den Standort und die API-Aufrufaktion gültig sind, führe die folgenden Schritte aus:
-
Um zu überprüfen, welche Zugriffsschlüssel von der Amazon EC2-Instance verwendet werden, führe die folgenden Befehle aus:
cd ~/.aws cat credentialsBeispielausgabe:
[default] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY -
Um zu überprüfen, ob die Berechtigungen für den Zugriffsschlüssel gültig sind, verwende die AWS-Managementkonsole oder die AWS CLI.
Aktualisieren oder Ersetzen der Zugriffsschlüssel
Wenn die Zugriffsschlüssel abgelaufen oder gelöscht sind, aktualisiere die Zugriffsschlüssel.
Wenn du ein benanntes Profil mit der AWS CLI verwendest, überprüfe, ob die Einstellungen aws_access_key_id und aws_session_token die richtigen Werte haben. Die Profileinstellungen werden in den Dateien ./aws/credentials oder ./aws/config gespeichert.
Wenn ungültige Zugriffsschlüssel in Umgebungsvariablen gespeichert sind, führe den folgenden Befehl aus, um sie zu entfernen:
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
Wenn du deine Profileinstellungen aktualisiert hast, stelle sicher, dass du die Umgebungsvariablen zurücksetzt.
Führe nach dem Aktualisieren oder Ersetzen der Zugriffsschlüssel den folgenden AWS CLI-Befehl get-caller-identity aus, um zu überprüfen, ob die Anmeldeinformationen gültig sind:
aws sts get-caller-identity --debug
Beispielausgabe:
2024-06-04 12:46:07,167 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: env 2024-06-04 12:46:07,167 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role 2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity 2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: sso 2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file 2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: custom-process 2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: config-file 2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: ec2-credentials-file 2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: boto-config 2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: container-role 2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: iam-role 2024-06-04 12:46:07,177 - MainThread - botocore.credentials - DEBUG - Found credentials from IAM Role: ec2_Role
In der vorherigen Beispielausgabe werden die Profilanmeldeinformationen der Amazon EC2-Instance von der Instance verwendet, da keine anderen Anmeldeinformationen mit einer höheren Priorität gespeichert sind.
Beheben von ExpiredToken-Fehlern mit temporären Sicherheitsanmeldeinformationen
Hinweis: Es ist eine bewährte Methode, temporäre Sicherheitsanmeldeinformationen anstelle von langfristigen Sicherheitsanmeldeinformationen wie Zugriffsschlüsseln zu verwenden. Weitere Informationen zu Sicherheitsbestimmungen für dein AWS-Konto findest du unter Sicherheitsüberlegungen.
Temporäre Sicherheitsanmeldeinformationen laufen nach einer bestimmten Dauer ab und können nicht über ihre ursprüngliche Ablaufzeit hinaus verlängert werden. Wenn du abgelaufene Anmeldeinformationen verwendest, erhältst du einen ExpiredToken-Fehler.
Um diesen Fehler zu beheben, musst du neue temporäre Anmeldeinformationen anfordern. Wenn du ursprünglich GetSessionToken verwendet hast, um temporäre Anmeldeinformationen zu erhalten, führe den folgenden AWS CLI-Befehl get-session-token aus, um neue Anmeldeinformationen anzufordern:
aws sts get-session-token \ --duration-seconds 3600
Hinweis: Ersetze 3600 durch deine gewünschte Sitzungsdauer in Sekunden. Das Minimum beträgt 900 Sekunden und das Maximum 129600 Sekunden.
Codebeispiele zur Verwendung von GetSessionToken findest du unter Verwenden Sie mit einem GetSessionToken AWS SDK oder CLI.
Weitere Informationen
- Sprache
- Deutsch
