Direkt zum Inhalt

Wie behebe ich den IAM-Zugriffsschlüsselfehler „The security token included in the request isn’t valid“?

Lesedauer: 5 Minute
0

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:

  1. Um zu überprüfen, welche Zugriffsschlüssel von der Amazon EC2-Instance verwendet werden, führe die folgenden Befehle aus:

    cd ~/.aws
    cat credentials

    Beispielausgabe:

    [default]
    aws_access_key_id=AKIAIOSFODNN7EXAMPLE
    aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  2. 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

Warum verwendet meine Amazon EC2-Instance IAM-Benutzeranmeldeinformationen anstelle von Rollenanmeldeinformationen?

Wie behebe ich den IAM-Fehler „AWS was not able to validate the provided access credentials“ in einigen Regionen?

Verwalten AWS STS in einem AWS-Region