Wie kann ich den AWS STS AssumeRoleWithWebIdentity API-Aufruffehler „InvalidIdentityToken“ beheben?

Lesedauer: 4 Minute
0

Der API-Aufruf AssumeRoleWithWebIdentity (AWS STS) des AWS Security Token Service (AWS STS) ist mit dem Fehler „InvalidIdentityToken“ fehlgeschlagen.

Kurze Beschreibung

Wenn Ihr AssumeRoleWithWebIdentity-API-Aufruf fehlschlägt, erhalten Sie möglicherweise eine Fehlermeldung, die der folgenden Meldung ähnelt:

„Beim Aufrufen der AssumeRoleWithWebIdentity-Operation ist ein Fehler aufgetreten (InvalidIdentityToken). Der Bestätigungsschlüssel konnte nicht von Ihrem Identitätsanbieter abgerufen werden.“

Dieser Fehler kann in den folgenden Szenarien auftreten:

  • Auf die URL .well_known und jwks_uri des Identitätsanbieters (IDP) kann über das öffentliche Internet nicht zugegriffen werden.
  • Eine benutzerdefinierte Firewall blockiert die Anfragen.
  • Bei API-Anfragen des IDP, die den AWS STS-Endpunkt erreichen, kommt es zu einer Latenz von mehr als 5 Sekunden.
  • STS stellt zu viele Anfragen an Ihre .well_known URL oder die jwks_uri des IDP.

**Hinweis:**Da dieses Problem auf der Clientseite auftritt, protokolliert der AWS CloudTrail-Ereignisverlauf diesen Fehler nicht.

Lösung

Überprüfen Sie den öffentlichen Zugriff für .well_known und jwks_uri

Stellen Sie sicher, dass die URL .well_known und jwks_uri des IdP öffentlich zugänglich sind. Dies kann mit Ihrem Browser, dem Windows-Befehl oder dem Linux-Befehl überprüft werden. Führen Sie dazu eine der folgenden Aktionen aus:

Um den Zugriff zu überprüfen, navigieren Sie in Ihrem Browser zu den folgenden Links:

  • https://BASE_SERVER_URL/.well-known/openid-configuration
  • https://BASE_SERVER_URL/.well-known/jwks.json

-oder-

Führen Sie die folgenden Befehle aus:

Windows:

wget https://BASE_SERVER_URL/.well-known/openid-configuration
wget https://BASE_SERVER_URL/.well-known/jwks.json

Linux:

curl https://BASE_SERVER_URL/.well-known/openid-configuration
curl https://BASE_SERVER_URL/.well-known/jwks.json

**Hinweis:**Um zu überprüfen, ob Sie auf die Links zugreifen können, suchen Sie in der Antwort auf die Anfrage nach dem Statuscode 200.

Überprüfen Sie die Firewall-Einstellungen

Wenn auf die URL .well_known und jwks_uri des IDP nicht zugegriffen werden kann, überprüfen Sie die Firewall-Einstellungen. Stellen Sie sicher, dass die Domains nicht auf einer Ablehnungsliste stehen.

Abhängig von der aktuellen Konfiguration der Firewall müssen die Domains möglicherweise zu einer Zulassungsliste hinzugefügt werden.

Wenn auf die Firewall-Einstellungen nicht zugegriffen werden kann, verwenden Sie den Browser mit einem Gerät aus einem anderen Netzwerk, z. B. einem Telefon. Um den Zugriff über den Browser zu überprüfen, folgen Sie den Anweisungen in Schritt 1. Wenn die Webanfrage erfolgreich ist, blockiert die Firewall die Anfrage.

Wenn der Server, der den AssumeRoleWithWebIdentity-API-Aufruf ausführt, eine Amazon Elastic Compute Cloud (Amazon EC2) -Instance ist, überprüfen Sie die Konfigurationseinstellungen. Anweisungen finden Sie unter Warum kann ich keine Verbindung zu einer Website herstellen, die auf meiner EC2-Instance gehostet wird?

Überprüfen Sie die Betriebslatenz

Überprüfen Sie die Latenz für den gesamten Vorgang. Dazu gehören die folgenden Attribute:

  • Anfrage-/Antwortzeit von STS
  • Anfrage-/Antwortzeit vom IDP

Minimieren Sie die STS-Latenz

Verwenden Sie regionale AWS-Endpunkte anstelle von globalen Endpunkten für den STS-Service. Dadurch wird überprüft, ob die Anforderungen an den geografisch nächstgelegenen Server weitergeleitet werden, um die Latenz zu minimieren. Weitere Informationen finden Sie unter Code zur Verwendung von AWS STS-Regionen schreiben.

**Hinweis:**Bei AWS-SDKs leitet der Region-Parameter den Zielendpunkt der Anfrage dorthin weiter, wo der Aufruf innerhalb der Konfiguration sts_regional_endpoint getätigt wird.

Bewerten Sie die IDP-Latenz

Der IDP stellt Anfragen an den STS-Endpunkt. Um zu überprüfen, ob die Anfrage an den STS-Endpunkt zu lange dauert, analysieren Sie die ausgehenden Pakete des IDP in den IDP-Protokollen.

**Hinweis:**Wenn die Anfrage vom IDP an den STS-Endpunkt länger als 5 Sekunden dauert, kann es zu einem Timeout der Anfrage kommen und sie schlägt fehl. Sie können sich an Ihren Identitätsanbieter wenden, um eine Erhöhung der geografischen Verfügbarkeit zu beantragen, um die Latenz für diesen API-Aufruf zu reduzieren.

(Optional) Verwenden Sie exponentielles Backoff und erhöhen Sie die Anzahl der Wiederholungsversuche

Die AssumeRoleWithWebIdentity-API hängt vom Abruf von Informationen vom Identitätsanbieter (IDP) ab. Um Drosselungsfehler zu vermeiden, setzen die meisten IDPs API-Beschränkungen ein, und API-Aufrufe erhalten möglicherweise nicht die erforderlichen Schlüssel vom IDP zurück. Gehen Sie wie folgt vor, um erfolgreich eine Rolle übernehmen zu können, wenn die API zeitweise Probleme hat, Ihren IDP zu erreichen:

Reduzieren Sie STS-Anfragen auf .well_known und jwks_uri

Wenn Ihr JSON Web Key Set (JWKS) entweder Pragma: no-cache oder Cache-Control: no-cache-Antwort-Header festlegt, dann speichert STS Ihre JWKS nicht. Für Schlüssel, auf die in einem ID_TOKEN verwiesen wird, die sich aber nicht im Cache befinden, führt STS einen Callback durch. In diesem Fall stellt STS möglicherweise zu viele Anfragen an Ihre .well_known URL und jwks_uri.

Um Callbacks von STS zu reduzieren, stellen Sie daher sicher, dass Ihr JWKS keinen dieser Antwort-Header setzt. Dadurch kann STS Ihre JWKS zwischenspeichern.

Ähnliche Informationen

Willkommen bei der API-Referenz für den AWS Security Token Service

Wie kann ich API-Drosselungs- oder „Rate überschritten“-Fehler für IAM und AWS STS beheben?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr