Direkt zum Inhalt

Wie behebe ich Fehler vom Typ „HTTP 403 Forbidden“, wenn ich einen Lambda Authorizer mit einer API Gateway-REST-API verwende?

Lesedauer: 5 Minute
0

Nachdem ich einen AWS Lambda-Authorizer für meine Amazon API Gateway-REST-API erstellt habe, erhalte ich bei API-Aufrufen die Fehlermeldung „403 Forbidden“.

Kurzbeschreibung

Hinweis: In diesem Artikel werden 403-Fehler im Zusammenhang mit Lambda Authorizern behandelt, die nur für eine REST-API konfiguriert sind. Informationen zum Beheben anderer Arten von 403-Fehlern findest du unter Wie behebe ich HTTP-403-Fehler von API Gateway?

Der Fehler „403 Forbidden“ kann aus den folgenden Gründen auftreten:

Wenn der API-Aufruf ein Token oder eine Identitätsquelle enthält, das fehlt, Null oder nicht validiert sind, wird der Fehler „401 Unauthorized“ angezeigt. Weitere Informationen findest du unter Warum erhalte ich den API-Gateway-Fehler „401 Unauthorized“, nachdem ich einen Lambda-Authorizer erstellt habe?

Lösung

Bestätigen der Fehlerursache

Falls dies noch nicht getan ist, aktiviere die Amazon CloudWatch-Protokolle für die API Gateway-REST-API. Wenn due die Authorizer-Konfiguration änderst, stelle die API erneut bereit.

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.

Fehlerprotokollmeldung überprüfen

Suche in der Antwort von API Gateway in den folgenden Beispielen nach einer Fehlerprotokollmeldung.

Beispielfehlerprotokollmeldung für Lambda Authorizer-Funktionen, die ein IAM-Richtliniendokument mit einer expliziten Ablehnung zurückgeben:

{    "message": "User is not authorized to access this resource with an explicit deny"}

Beispielfehlermeldung für REST-APIs, der eine Ressourcenrichtlinie angehängt ist, die dem Aufrufer implizit den Zugriff verweigert:

{    "message": "User is not authorized to access this resource"}

Beispielfehlerprotokollmeldung für REST-APIs, der eine Ressourcenrichtlinie angehängt ist, die dem Aufrufer ausdrücklich den Zugriff verweigert:

{    "message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny"}

Hinweis: Weitere Informationen zu API Gateway-APIs, die von einer IAM-Richtlinie gesteuert werden, findest du unter Ergebnistabellen für die Richtlinienbewertung.

Die API Gateway-Protokolle ansehen

Um den Autorisierungsworkflow zu überprüfen, sieh dir die API Gateway-Ausführungsprotokolle in CloudWatch Logs an. Notiere dir die Ausgabe des Lambda Authorizers und das Ergebnis der Bewertung der Ressourcenrichtlinie des API Gateways. Suche in den folgenden Beispielen nach einer Protokollfehlermeldung.

Beispiel für eine Fehlerprotokollmeldung, wenn ein erforderliches Token fehlt oder nicht mit der Token-Validierung übereinstimmt:

Extended Request Id: EXAMPLEabcIdGxzR=Unauthorized request: request-id

Hinweis: Der Wert für Erweiterte Anforderungs-ID in den Protokollen unterscheidet sich, da er zufällig generiert wird.

Beispiel für eine Fehlerprotokollmeldung, wenn ein Lambda-Autorisierer eine Richtlinie zurückgibt, die den Zugriff verweigert:

Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/lambda-authorizer-arn/invocationsAuthorizer result body before parsing:  {  
  "principalId": "user",  
  "policyDocument": {  
    "Version": "2012-10-17",  
    "Statement": [  
      {  
        "Action": "execute-api:Invoke",  
        "Effect": "Deny",  
        "Resource": "resource-arn"  
      }  
    ]  
  }  
}  
Using valid authorizer policy for principal: principal  
Successfully completed authorizer execution  
The client is not authorized to perform this operation.

Hinweis: Die zurückgegebene Richtlinie hängt vom Lambda-Autorisierer ab. Wenn die resource-arn der zurückgegebenen Richtlinie die anfordernde Ressource nicht enthält, lehnt die Richtlinie implizit Anfragen ab.

Beispiel für eine Fehlerprotokollmeldung, wenn die API Gateway-Ressourcenrichtlinie die Anfrage ablehnt:

Extended Request Id: EXAMPLE1ABdGeZB=ExplicitDenyException User: anonymous is not authorized to perform: execute-api:Invoke on resource: api-resource-arn with an explicit deny: request-id

Behebe die Fehler „not authorized to access this resource“ des Lambda Authorizers

Möglicherweise erhältst du aufgrund von Richtlinien-Caching gelegentlich die Fehlermeldung „not authorized to access this resource“. Um zu überprüfen, ob das Autorisierungs-Caching aktiviert ist, überprüfe die Konfiguration des Lambda Authorizers in der API Gateway-Konsole. Dann ergreife eine der folgenden Maßnahmen:

  • Führe für einen einmaligen Test den AWS-CLI-Befehl flush-stage-authorizers-cache aus. Wenn die Cache-Einträge des Authorizers geleert werden, rufe die API erneut auf.
  • Schalte das Policy-Caching aus, stelle die API erneut bereit, um die Änderungen zu übernehmen, und rufe dann die API erneut auf.
    Hinweis: Wenn das Richtlinien-Caching für einen auf Anforderungsparametern basierenden Authorizer deaktiviert ist, dann überprüft API Gateway Aufrufe an die API nicht, bevor es die Lambda Authorizer-Funktion aufgeruft.
  • Um den Cache-Schlüssel des Authorizers zu ändern, aktualisiere Header-Namen, der unter Token-Quelle (für Token-basierte Authorizer) oder Identitätsquellen (für auf Anforderungsparametern basierende Authorizer) angegeben ist. Stelle die API erneut bereit, um die Änderungen zu übernehmen. Rufe dann die API erneut mit den neu konfigurierten Token-Header oder den Identitätsquellen auf.

Um herauszufinden, warum der Authorizer dem Anrufer den Zugriff explizit verweigert, überprüfe den Code der Lambda-Autorisierungsfunktion. Wenn du feststellst, dass das Problem auf das Zwischenspeichern zurückzuführen ist, aktualisiere den Code, um dem Anrufer den Zugriff zu ermöglichen.

Weitere Informationen findest du unter Warum gibt meine API-Gateway-Proxy-Ressource mit einem Lambda-Genehmiger, bei dem das Caching aktiviert ist, den HTTP 403-Fehler „User is not authorized to access this resource“ zurück?

Beheben des Fehlers „not authorized to perform: execute-api:Invoke“

Um festzustellen, ob die API-Ressourcenrichtlinie nicht gültig ist oder ob sie den Zugriff auf die Aufrufe ausdrücklich verweigert, indem du die Ressourcenrichtlinie der API überprüfen. Du kannst die Ausführungsprotokolle der API einsehen, um das Antwortergebnis für die Ressourcenrichtlinie abzurufen. Weitere Informationen findest du unter Übersicht über die Sprache der Zugriffsrichtlinie für Amazon API Gateway und die Lambda Authorizer- und Ressourcenrichtlinie.

Weitere Informationen

Verwenden der API Gateway Lambda Authorizer

Zugriff auf REST-APIs in API Gateway steuern und verwalten