Wie behebe ich HTTP-403-Fehler von API Gateway?

Letzte Aktualisierung: 16.12.2021

Wenn ich meine Amazon-API-Gateway-API aufrufe, erhalte ich einen 403-Fehler. Wie behebe ich 403 Fehler von API Gateway?

Kurzbeschreibung

Ein HTTP-403-Antwortcode bedeutet, dass einem Client der Zugriff auf eine gültige URL untersagt ist. Der Server versteht die Anfrage, kann die Anfrage jedoch aufgrund von clientseitigen Problemen nicht erfüllen.

API-Gateway-APIs können aus einem der folgenden Gründe 403-Antworten zurückgeben:

Problem Header der Antwort Fehlermeldung Ursache
Zugriff verweigert "x-amzn-errortype" = "AccessDeniedException" „Der Benutzer ist nicht berechtigt, auf diese Ressource mit einer expliziten Zugriffsverweigerung zuzugreifen“ Der Aufrufer ist nicht berechtigt, auf eine API zuzugreifen, die einen Lambda-Genehmiger verwendet.
Zugriff verweigert "x-amzn-errortype" = "AccessDeniedException" „Benutzer: <user-arn> ist nicht berechtigt folgendes auszuführen: execute-api:Invoke on resource: <api-resource-arn> mit einer expliziten Zugriffsverweigerung“

Der Aufrufer ist nicht berechtigt, auf eine API zuzugreifen, die eine Autorisierung mit AWS Identity and Access Management (IAM) verwendet. Oder die API verfügt über eine angehängte Ressourcenrichtlinie, die dem Aufrufer explizit den Zugriff verweigert.

Weitere Informationen finden Sie unter Richtlinie für IAM-Authentifizierung und -Ressourcen.

Zugriff verweigert "x-amzn-errortype" = "AccessDeniedException" „Benutzer: anonym ist nicht berechtigt folgendes auszuführen: execute-api:Invoke on resource: <api-resource-arn>“

Der Aufrufer ist nicht berechtigt, auf eine API zuzugreifen, die eine IAM-Autorisierung verwendet. Oder die API verfügt über eine angefügte Ressourcenrichtlinie, die es dem Aufrufer nicht explizit erlaubt, die API aufzurufen.

Weitere Informationen finden Sie unter Richtlinie für IAM-Authentifizierung und -Ressourcen.

Zugriff verweigert "x-amzn-errortype" = "AccessDeniedException" „Das in der Anfrage enthaltene Sicherheitstoken ist ungültig.“ Der Aufrufer hat IAM-Schlüssel verwendet, die nicht gültig sind, um auf eine API zuzugreifen, die die IAM-Autorisierung verwendet.
Fehlender Authentifizierungstoken "x-amzn-errortype" = "MissingAuthenticationTokenException" „Fehlender Authentifizierungstoken“ In der Anfrage wurde kein Authentifizierungstoken gefunden.
Abgelaufener Authentifizierungstoken "x-amzn-errortype" = "InvalidSignatureException" „Die Signatur ist abgelaufen“ Der Authentifizierungstoken in der Anfrage ist abgelaufen.
API-Schlüssel ist nicht gültig "x-amzn-errortype" = "ForbiddenException" „Ungültige API-Schlüsselkennung angegeben“ Der Aufrufer verwendete einen API-Schlüssel, der für eine Methode, die einen API-Schlüssel erfordert, nicht gültig ist.
Signatur ist nicht gültig "x-amzn-errortype" = "InvalidSignatureException" „Die von uns berechnete Signatur der Anfrage stimmt nicht mit der angegebenen Signatur überein. Prüfen Sie Ihren geheimen AWS-Zugriffsschlüssel und die Signaturmethode.“ Die Signatur in der Anfrage stimmt nicht mit der auf dem Server überein, wenn auf eine API zugegriffen wird, die die IAM-Autorisierung verwendet.
AWS-WAF-Filter "x-amzn-errortype" = "ForbiddenException" „Verboten“ Die Anfrage wird durch den Filter der Webanwendungs-Firewall (WAF) blockiert, wenn AWS WAF in der API aktiviert ist.
Der Ressourcenpfad existiert nicht "x-amzn-errortype" = "MissingAuthenticationTokenException" „Fehlender Authentifizierungstoken“ Eine Anfrage ohne „Autorisierungs“-Header wird an einen API-Ressourcenpfad gesendet, der nicht existiert.
Der Ressourcenpfad existiert nicht "x-amzn-errortype" = "IncompleteSignatureException" „Der Autorisierungsheader erfordert den Parameter 'Anmeldeinformation'. Der Autorisierungsheader erfordert den Parameter „Signatur“. Der Autorisierungsheader erfordert den Parameter „SignedHeaders“. Der Autorisierungsheader erfordert entweder das Vorhandensein eines „X-Amz-Date“- oder eines „Date“-Headers. Authorization=allow" Eine Anfrage mit „Autorisierungs“-Header wird an einen API-Ressourcenpfad gesendet, der nicht existiert.
Falsches Aufrufen einer privaten API mit öffentlichen DNS-Namen "x-amzn-errortype" = "ForbiddenException" „Verboten“

Der Aufruf einer privaten API aus einer Amazon Virtual Private Cloud (Amazon VPC) unter falscher Verwendung öffentlicher DNS-Namen. Zum Beispiel: Der Header „Host“ oder „x-apigw-api-id“ fehlt in der Anfrage.

Weitere Informationen finden Sie unter Aufrufen Ihrer privaten API mit endpunktspezifischen öffentlichen DNS-Hostnamen.

Aufrufen einer REST-API mit einem benutzerdefinierten Domänennamen unter Verwendung des Standard-Endpunkts execute-api

"x-amzn-errortype" = "ForbiddenException" „Verboten“

Der Aufrufer verwendet den Standard-Endpunkt execute-api, um eine REST-API aufzurufen, nachdem der Standard-Endpunkt deaktiviert wurde.

Weitere Informationen finden Sie unter Deaktivieren des Standard-Endpunkts für eine REST-API.

Aufrufen eines benutzerdefinierten API-Gateway-Domänennamens, der unter Verwendung eines ungültigen Client-Zertifikats gegenseitige Transport Layer Security (TLS) erfordert. "x-amzn-errortype" = "ForbiddenException" „Verboten“

Das in der API-Anfrage dargestellte Client-Zertifikat wird nicht vom Truststore des benutzerdefinierten Domänennamens ausgestellt oder ist nicht gültig.

Weitere Informationen finden Sie unter Wie behebe ich HTTP-403-Verboten-Fehler von einem benutzerdefinierten API-Gateway-Domänennamen, der gegenseitiges TLS erfordert?

Auflösung

Betrachten Sie die Fehlerquelle

Wenn der 403-Fehler von anderen Ressourcen gemeldet wurde, kann der Fehler eine andere Ursache haben. Beispiel:

  • Wenn der Fehler in einem Webbrowser gemeldet wurde, kann dieser Fehler durch eine falsche Proxy-Einstellung verursacht werden. Der Proxy-Server gibt einen 403-Fehler zurück, wenn der HTTP-Zugriff nicht erlaubt ist.
  • Wenn der API ein anderer AWS-Service vorgeschaltet ist, kann dieser Service die Anfrage mit einem 403-Fehler in der Antwort zurückweisen. Zum Beispiel: Amazon CloudFront.

Identifizieren Sie die Fehlerursache

Falls nicht bereits geschehen, richten Sie die Amazon CloudWatch-Zugriffsprotokollierung für Ihre API ein. Sehen Sie sich dann die Ausführungsprotokolle Ihrer API in CloudWatch an, um festzustellen, ob die Anfragen die API erreichen.

Hinweis: HTTP-APIs unterstützen keine Ausführungsprotokollierung. Um 403-Fehler zu beheben, die von einem benutzerdefinierten Domänennamen zurückgegeben werden, der gegenseitiges TLS erfordert und eine HTTP-API aufruft, müssen Sie Folgendes tun:

1.    Erstellen Sie ein neues API-Mapping für Ihren benutzerdefinierten Domänennamen, die eine REST-API nur zu Testzwecken aufruft.

2.    Stellen Sie fest, was die Fehler verursacht, indem Sie die Ausführungsprotokolle Ihrer REST-API in CloudWatch anzeigen.

3.    Nachdem der Fehler identifiziert und behoben wurde, leiten Sie das API-Mapping für Ihren benutzerdefinierten Domänennamen zurück zu Ihrer HTTP-API um.

Bestätigen Sie, dass die angeforderte Ressource in der API-Definition vorhanden ist

Hinweis:Wenn Sie beim Ausführen von AWS-Command-Line-Interface(AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

Überprüfen Sie Folgendes mit der API-Gateway-Konsole oder der AWS CLI:

  • Die API wird mit der neuesten API-Definition bereitgestellt.
  • Die angeforderte Ressource ist in der API-Definition vorhanden.

Verwenden Sie curl, um Details zu Anfragen und Antworten abzurufen

Wenn der Fehler reproduziert werden kann, verwenden Sie den Befehl curl -v, um weitere Details zwischen dem Client und der API zu erhalten.

Beispiel für den Befehl „curl -v“

curl -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

Hinweis: Weitere Informationen finden Sie auf der Website des curl-Projekts.

Stellen Sie sicher, dass der Header der Anfrage korrekt ist

Wenn der Fehler auf einen ungültigen API-Schlüssel zurückzuführen ist, überprüfen Sie, ob der „x-api-key“-Header in der Anfrage gesendet wurde.

Stellen Sie sicher, dass die DNS-Einstellung auf allen Schnittstellen-VPC-Endpunkten richtig eingestellt ist

Hinweis: Bestätigen Sie Folgendes für APIs, die von einer Amazon VPC aufgerufen wurden, die nur über einen Schnittstellen-VPC-Endpunkt verfügt.

Vergewissern Sie sich, dass die DNS-Einstellung des Schnittstellenendpunkts je nach Art der von Ihnen verwendeten API korrekt eingestellt ist.

Beachten Sie Folgendes:

Lesen Sie die Ressourcenrichtlinie der API

Prüfen Sie die Ressourcenrichtlinie Ihrer API, um Folgendes zu überprüfen:

HTTP-Anforderungs- und -Antwortnachrichten prüfen

Reproduzieren Sie den Fehler nach Möglichkeit in einem Webbrowser. Verwenden Sie dann die Netzwerktools des Browsers, um die HTTP-Anfrage und die Antwortnachrichten zu erfassen und zu analysieren, um festzustellen, wo der Fehler aufgetreten ist.

Hinweis: Für die Offline-Analyse speichern Sie die Nachrichten in einer HTTP-Archivdatei (HAR).