Ich habe eine AWS Identity and Access Management (IAM)-Rolle übernommen und mein API-Aufruf hat den folgenden Fehler zurückgegeben: „An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials.“
Kurzbeschreibung
Standardmäßig aktiviert AWS keine neuen AWS-Regionen, und neue Regionen akzeptieren nur Token der Version 2. Wenn Token der Version 1 eine Anforderung an Serviceendpunkte in einer Region stellen, die AWS nicht aktiviert, tritt der folgende Fehler auf:
„An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials.“
Es hat sich bewährt, regionale Endpunkte von AWS Security Token Service (AWS STS) zu verwenden, da Sitzungstoken von einem regionalen STS-Endpunkt Token der Version 2 sind und in allen Regionen gültig sind. Du kannst auch die Regionskompatibilitätseinstellungen für Sitzungstoken vom globalen Endpunkt aus ändern.
Lösung
Token von einem regionalen Endpunkt erhalten
Wichtig: Bei Regionen, die AWS standardmäßig aktiviert, musst du den regionalen STS-Endpunkt in dem AWS-Konto aktivieren, das die temporären Anmeldeinformationen generiert, unabhängig vom Konto, das die Anforderung stellt. Bei Regionen, die du manuell aktivierst, aktiviere die Region sowohl in dem Konto, das die Anforderung stellt, als auch in dem Konto, das die Anmeldeinformationen generiert. Wenn du die Region nicht in beiden Konten aktivierst, erhältst du den Fehler „InvalidClientTokenId“.
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Du kannst entweder ein AWS SDK oder die AWS CLI verwenden, um Token abzurufen.
Du kannst beispielsweise den folgenden Befehl AWS SDK für Python (Boto3) ausführen:
# Replace existing code to create STS client with the following:
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.your-region.amazonaws.com')
Hinweis: Ersetze your-region durch deine Region und endpoint_url durch deinen Endpunkt.
Oder führe den folgenden Befehl assume-role aus:
aws sts assume-role --role-arn arn:aws:iam::444455556666:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
Hinweis: Ersetze your-region durch deine Region, role-arn durch deinen IAM-Amazon-Ressourcennamen (ARN) und endpoint_url durch deinen Endpunkt.
Die Regionskompatibilitätseinstellungen für Sitzungstoken vom globalen Endpunkt aus ändern
Standardmäßig geben STS-Aufrufe, die du an den globalen Endpunkt richtest, Token der Version 1 aus. Um Sitzungstoken in allen Regionen zu verwenden, konfiguriere den globalen STS-Endpunkt so, dass Token der Version 2 ausgegeben werden.
Wichtig: Token der Version 2 enthalten mehr Zeichen als Version 1. Die Erhöhung der Tokengröße kann sich auf bestehende Systeme auswirken, die temporär Sitzungstoken speichern. Stelle sicher, dass das System, das die Token speichert, die erhöhte Tokengröße bewältigen kann.