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

Bei Aufrufen meiner Amazon API Gateway-REST-API werden Fehler vom Typ 403 Forbidden angezeigt, nachdem ich einen AWS Lambda Authorizer erstellt habe. Wie behebe ich diese Fehler?

Kurzbeschreibung

Dieser Fehler kann in folgenden Fällen auftreten:

Wenn der Aufruf Ihrer API ein Token oder Identitätsquellen enthält, die fehlen, Null oder nicht validiert sind, wird der Fehler 401 Unauthorized angezeigt. Weitere Informationen finden Sie unter Warum erhalte ich nach dem Erstellen eines Lambda Authorizers einen API-Gateway-Fehler 401?

**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 finden Sie unter Wie behebe ich Fehler vom Typ HTTP 403 Forbidden von API Gateway?

Behebung

Bestätigen der Ursache des Fehlers

Hinweis:

1.    Überprüfen Sie die Fehlermeldung in der Antwort von API Gateway. Suchen Sie nach einer Fehlermeldung, die einer der folgenden ähnelt.

Beispielfehlermeldung 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 Lambda Authorizer-Funktionen, die ein IAM-Richtliniendokument mit einer impliziten Ablehnung zurückgeben

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

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

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

Beispielfehlermeldung 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 zum daraus resultierenden Verhalten, wenn der Zugriff auf eine API-Gateway-API durch eine IAM-Richtlinie gesteuert wird, finden Sie unter Ergebnistabellen zur Richtlinienbewertung.

2.    Sehen Sie sich die API Gateway-Ausführungsprotokolle in CloudWatch an, um den Autorisierungsworkflow zu überprüfen. Notieren Sie sich die Ausgabe des Lambda Authorizers und das Ergebnis der Bewertung der Ressourcenrichtlinie des API Gateways. Sie erhalten eine Protokollfehlermeldung, die einer der folgenden ähnelt.

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

Extended Request Id: MY92nHDwwwIdGxzR=
Unauthorized request: <request-id>

**Hinweis:**Die Erweiterte Anforderungs-ID wird nach dem Zufallsprinzip generiert. Der Wert Erweiterte Anforderungs-ID ist in Ihren Protokollen ist unterschiedlich.

Beispiel für eine Protokollfehlermeldung, wenn ein Lambda Authorizer eine Richtlinie zurückgibt, die den Zugriff verweigert

Sending request to https://lambda.<region>.amazonaws.com/2015-03-31/functions/<lambda-authorizer-arn>/invocations
Authorizer 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 von Ihrem Lambda Authorizer ab. Wenn der resource-arn der zurückgegebenen Richtlinie die anfordernde Ressource nicht enthält, wird die Anforderung implizit abgelehnt.

Beispiel für eine Protokollfehlermeldung für den Fall, dass die API Gateway-Ressourcenrichtlinie die Anforderung ablehnt

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

Beheben Sie die Fehler „not authorized to access this resource“ (nicht für den Zugriff auf diese Ressource autorisiert) des Lambda Authorizers

Möglicherweise erhalten Sie aufgrund von Richtlinien-Caching gelegentlich die Fehlermeldung not authorized to access this resource (nicht für den Zugriff auf diese Ressource autorisiert). Um zu überprüfen, ob das Autorisierungs-Caching aktiviert ist, überprüfen Sie die Konfiguration Ihres Lambda Authorizers in der API Gateway-Konsole. Führen Sie dann einen der folgenden Schritte aus:

  • Führen Sie für einen einmaligen Test den AWS-CLI-Befehl flush-stage-authorizers-cache aus. Wenn die Cache-Einträge des Authorizers geleert sind, rufen Sie Ihre API erneut auf.
  • Schalten Sie das Richtlinien-Caching aus und rufen Sie dann Ihre API erneut auf.
    **Hinweis:**Wenn Sie das Richtlinien-Caching für einen auf Anforderungsparametern basierenden Authorizer deaktivieren, überprüft API Gateway Aufrufe an Ihre API nicht, bevor die Lambda Authorizer-Funktion aufgerufen wird.
  • Ändern Sie den Cache-Schlüssel des Authorizers, indem Sie den Header-Namen aktualisieren, der unter Token-Quelle (für Token-basierte Authorizer) oder Identitätsquellen (für auf Anforderungsparametern basierende Authorizer) angegeben ist. Stellen Sie Ihre API erneut bereit, um die Änderungen zu übernehmen. Rufen Sie dann Ihre API erneut auf, indem Sie den neu konfigurierten Token-Header oder die Identitätsquellen verwenden.

Wenn diese Fehler regelmäßig auftreten, stellen Sie fest, warum Ihr Authorizer dem Aufrufer ausdrücklich den Zugriff verweigert, indem Sie den Code Ihrer Lambda Authorizer-Funktion überprüfen. Wenn Sie festgestellt haben, dass das Problem durch das Caching verursacht wird, können Sie den Code aktualisieren, sodass er dem Aufrufer Zugriff gewährt. Genauere Anweisungen finden Sie unter Warum gibt meine API Gateway-Proxy-Ressource mit einem Lambda Authorizer, für den Caching aktiviert ist, HTTP 403-Fehler zurück?

Beheben des Fehlers „not authorized to perform: execute-api:Invoke“ (keine Berechtigung zur Ausführung: execute-api:Invoke)

Stellen Sie fest, ob Ihre API-Ressourcenrichtlinie nicht gültig ist oder ob sie den Zugriff auf Ihre Aufrufe ausdrücklich verweigert, indem Sie die Ressourcenrichtlinie Ihrer API überprüfen. Sie können die Ausführungsprotokolle Ihrer API einsehen, um das Antwortergebnis für die Ressourcenrichtlinie abzurufen.

Weitere Informationen finden Sie 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

Aktualisieren einer REST-API, die eine erneute Bereitstellung erfordern

Steuern und Verwalten des Zugriffs auf eine REST-API in API Gateway