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

Lesedauer: 8 Minute
0

Wenn ich meine Amazon-API-Gateway-API aufrufe, erhalte ich einen 403-Fehler.

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:

ProblemAntwort-HeaderFehlermeldungGrundursache
Zugriff verweigert„x-amzn-errortype“ = „AccessDeniedException“„Der Benutzer ist nicht berechtigt, auf diese Ressource mit einer expliziten Zugriffsverweigerung zuzugreifen“Der Anrufer ist nicht berechtigt, auf eine API zuzugreifen, die einen API-Gateway-Lambda-Autorisierer 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 ausdrücklichen Ablehnung“Der Aufrufer ist nicht berechtigt, auf eine API zuzugreifen, die die AWS-Identity-and-Access-Management-Autorisierung (IAM) verwendet. Oder die API hat eine angehängte Ressourcenrichtlinie, die dem Aufrufer explizit den Zugriff verweigert. <br><br>Weitere Informationen finden Sie unter IAM-Authentifizierung und Ressourcenrichtlinie.
Zugriff verweigert„x-amzn-errortype“ = „AccessDeniedException“„Benutzer: anonymous hat keine Berechtigung zur Ausführung von: execute-api:Invoke auf Ressource:<api-resource-arn>Der Aufrufer ist nicht berechtigt, auf eine API zuzugreifen, die die IAM-Autorisierung verwendet. Oder die API hat eine angehängte Ressourcenrichtlinie, die es dem Aufrufer nicht ausdrücklich erlaubt, die API aufzurufen.<br><br>Weitere Informationen finden Sie unter IAM-Authentifizierung und Ressourcenrichtlinie.
Zugriff verweigert„x-amzn-errortype“ = „AccessDeniedException“„Das in der Anfrage enthaltene Sicherheitstoken ist ungültig.“Der Aufrufer verwendete IAM-Schlüssel, 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 Anforderung wurde kein Authentifizierungstoken gefunden.
Authentifizierungstoken ist abgelaufen„x-amzn-errortype“ = „InvalidSignatureException“„Signatur abgelaufen“Das Authentifizierungstoken in der Anforderung ist abgelaufen.
API-Schlüssel ist nicht gültig„x-amzn-errortype“ = „ForbiddenException“„Ungültige API-Schlüsselkennung angegeben“Der Aufrufer hat einen API-Schlüssel verwendet, der für eine Methode, die einen API-Schlüssel benötigt, nicht gültig ist.
Signatur ist nicht gültig„x-amzn-errortype“ = „InvalidSignatureException“„Die von uns berechnete Anforderungssignatur stimmt nicht mit der von Ihnen 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 gefiltert„x-amzn-errortype“ = „ForbiddenException“„Verboten“Die Anforderung wird durch die Filterung der Webanwendungs-Firewall blockiert, wenn AWS WAF in der API aktiviert ist.
Der Ressourcenpfad existiert nicht„x-amzn-errortype“ = „MissingAuthenticationTokenException“„Fehlender Authentifizierungstoken“Eine Anfrage ohne „Authorization“-Header wird an einen API-Ressourcenpfad gesendet, der nicht existiert. <br><br>Weitere Informationen finden Sie unter Wie behebe ich 403-Fehler „Fehlendes Authentifizierungstoken“ von einem API-Gateway-REST-API-Endpunkt aus?
Der Ressourcenpfad existiert nicht„x-amzn-errortype“ = „IncompleteSignatureException“„Der Autorisierungsheader erfordert den Parameter „Credential“. 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 Anforderung mit einem „Authorisierungs“-Header wird an einen API-Ressourcenpfad gesendet, der nicht existiert.
Falscher Aufruf einer privaten API mit öffentlichen DNS-Namen„x-amzn-errortype“ = „ForbiddenException“„Verboten“Aufrufen einer privaten API aus einer Amazon Virtual Private Cloud (Amazon VPC) heraus, wobei öffentliche DNS-Namen falsch verwendet werden. Zum Beispiel: Der Header „Host“ oder „x-apigw-api-id“ fehlt in der Anforderung.<br><br>Weitere Informationen finden Sie unter Aufrufen Ihrer privaten API mithilfe endpunktspezifischer öffentlicher 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-execute-api-Endpunkt, um eine REST-API aufzurufen, nachdem der Standardendpunkt deaktiviert wurde.<br><br>Weitere Informationen finden Sie unter Deaktivieren des Standardendpunkts 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-Anforderung angegebene Client-Zertifikat wurde nicht vom Truststore des benutzerdefinierten Domainnamens ausgestellt oder es ist nicht gültig.<br><br>Weitere Informationen finden Sie unter Wie behebe ich Fehler vom Typ HTTP 403 Forbidden bei einem benutzerdefinierten API-Gateway-Domainnamen, für den gegenseitiges TLS erforderlich ist?
Aufrufen eines benutzerdefinierten Domänenamens ohne Basispfadzuordnung„x-amzn-errortype“ = „ForbiddenException“„Verboten“Der Aufrufer ruft eine benutzerdefinierte Domäne auf, ohne dass einer API ein Basispfad zugeordnet ist.<br><br>Weitere Informationen finden Sie unter Benutzerdefinierte Domänenamen für REST-APIs einrichten.
Aufrufen einer API mit aktivierter benutzerdefinierter Domäne, wenn die Domänen-URL den Stagingbereich enthält„x-amzn-errortype“ = „MissingAuthenticationTokenException“„Fehlender Authentifizierungstoken“Eine API-Zuordnung spezifiziert eine API, eine Stufe und optional einen Pfad, der für das Mapping verwendet werden soll. Wenn der Stagingbereich einer API einer benutzerdefinierten Domain zugeordnet wird, müssen Sie den Stagingbereich daher nicht mehr in die URL aufnehmen.<br><br>Weitere Informationen finden Sie unter Arbeiten mit API-Zuordnungen für REST-APIs.
Die Phase in der URL der Anforderung ist ungültig.„x-amzn-errortype“ = „ForbiddenException“„Verboten“Die Anforderungs-URL des Aufrufers enthält eine Phase, die nicht existiert. Stellen Sie sicher, dass der Stagingbereich existiert und dass die Anforderungs-URL richtig geschrieben ist.<br><br>Weitere Informationen finden Sie unter Aufrufen einer REST-API in Amazon API Gateway.

Lösung

Berücksichtigen Sie die Fehlerquelle

Wenn der 403-Fehler von anderen Ressourcen gemeldet wurde, liegt möglicherweise eine andere Ursache für den Fehler vor. Zum Beispiel:

  • Wenn der Fehler in einem Webbrowser gemeldet wurde, kann dieser Fehler durch eine falsche Proxyeinstellung verursacht werden. Der Proxyserver gibt einen 403-Fehler zurück, wenn der HTTP-Zugriff nicht zulässig ist.
  • Wenn sich vor der API ein weiterer AWS-Service befindet, kann dieser Service die Anfrage mit einem 403-Fehler in der Antwort ablehnen. Zum Beispiel: Amazon CloudFront.

Identifizieren Sie, was den Fehler verursacht

Wenn Sie dies noch nicht getan haben, 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 Anforderungen die API erreichen.

Hinweis: HTTP-APIs unterstützen keine Ausführungsprotokollierung. Gehen Sie wie folgt vor, um 403-Fehler zu beheben, die von einem benutzerdefinierten Domainnamen zurückgegeben werden, der gegenseitiges TLS erfordert und eine HTTP-API aufruft:

1.    Erstellen Sie eine neue API-Zuordnung für Ihren benutzerdefinierten Domänennamen, die eine REST-API nur zum Testen aufruft.

2.    Finden Sie heraus, was die Fehler verursacht, indem Sie sich die Ausführungsprotokolle Ihrer REST-API in CloudWatch ansehen.

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

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

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

Überprüfen Sie Folgendes entweder 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 Anforderungs- und Antwortdetails abzurufen

Wenn der Fehler reproduziert werden kann, verwenden Sie den Befehl curl -v, um weitere Informationen zwischen dem Client und der API zu erhalten, ähnlich wie folgt:

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 Anforderungsheader korrekt ist

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

Stellen Sie sicher, dass die DNS-Einstellung auf allen Schnittstellen (Amazon-VPC-Endpunkten) korrekt eingestellt ist.

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

Stellen Sie sicher, dass die DNS-Einstellung des Schnittstellenendpunkts auf der Grundlage des verwendeten API-Typs korrekt festgelegt ist.

Beachten Sie Folgendes:

  • Um eine regionale API aus einer Amazon VPC heraus aufzurufen, müssen private DNS-Namen auf dem Schnittstellenendpunkt deaktiviert werden. Dann kann der Hostname des Endpunkts durch ein öffentliches DNS aufgelöst werden. Weitere Informationen finden Sie unter Erstellen einer privaten API in Amazon API Gateway.
  • Um eine private API aus einer Amazon VPC heraus mithilfe des privaten DNS-Namens der API aufzurufen, müssen private DNS-Namen auf dem Schnittstellenendpunkt aktiviert werden. Anschließend kann der Hostname des Schnittstellenendpunkts in die lokalen Subnetzressourcen der Amazon VPC aufgelöst werden. Weitere Informationen finden Sie unter So rufen Sie eine private API auf.
    Hinweis: Sie müssen kein privates DNS einrichten, wenn Sie die private API mit einer der folgenden Methoden aufrufen:
    Der öffentliche DNS-Name der privaten API.
    -oder-
    Ein Amazon-Route-53-Alias.

Ressourcenrichtlinie der API überprüfen

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

HTTP-Anforderungs- und Antwortnachrichten überprüfen

Reproduzieren Sie den Fehler, wenn möglich, in einem Webbrowser. Verwenden Sie dann die Netzwerktools des Browsers, um die HTTP-Anforderungs- und Antwortnachrichten zu erfassen und zu analysieren, um festzustellen, wo der Fehler aufgetreten ist.

**Hinweis:**Speichern Sie die Nachrichten für die Offline-Analyse in einer HTTP-Archivdatei (HAR).

Verwandte Informationen

Häufige Fehler – Amazon API Gateway

Wie erlaube ich nur bestimmten IP-Adressen den Zugriff auf meine API-Gateway-REST-API?

Wie behebe ich Probleme bei der Verbindung zu einem privaten API-Endpunkt von API Gateway?

Wie aktiviere ich Amazon CloudWatch Logs zur Fehlerbehebung bei meiner API-Gateway-REST-API oder WebSocket-API?