Direkt zum Inhalt

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

Lesedauer: 9 Minute
0

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

Kurzbeschreibung

Du erhältst den Statuscode „HTTP 403“, wenn ein Client nicht auf eine gültige URL zugreifen kann. Der Server versteht die Anfrage, aber aufgrund von clientseitigen Problemen kann der Server die Anfrage nicht erfüllen.

API Gateway-APIs geben möglicherweise aus den folgenden Gründen „HTTP 403“-Fehler zurück:

ProblemAntwort-HeaderFehlermeldungGrundursache
Zugriff verweigert„x-amzn-errortype“ = „AccessDeniedException“„User is not authorized to access this resource with an explicit deny in an identity-based policy“Der von der API verwendete API Gateway Lambda-Autorisierer autorisiert den Aufrufer nicht.
Zugriff verweigert„x-amzn-errortype“ = „AccessDeniedException“„User: user-arn is not authorized to perform: execute-api:Invoke on resource: api-resource-arn with an explicit deny“Die von der API verwendete AWS Identity and Access Management (IAM)-Autorisierung autorisiert den Aufrufer nicht. Oder die Ressourcenrichtlinie, die an die API angehängt ist, verweigert dem Aufrufer ausdrücklich den Zugriff. Weitere Informationen findest du unter IAM-Authentifizierungs- und Ressourcenrichtlinie.
Zugriff verweigert„x-amzn-errortype“ = „AccessDeniedException“„User: anonymous is not authorized to perform: execute-api:Invoke on resource:api-resource-arn“Die von der API verwendete IAM-Autorisierung autorisiert den Aufrufer nicht. Oder die Ressourcenrichtlinie, die an die API angehängt ist, erlaubt dem Aufrufer nicht ausdrücklich, die API aufzurufen. Weitere Informationen findest du unter IAM-Authentifizierungs- und Ressourcenrichtlinie.
Zugriff verweigert„x-amzn-errortype“ = „AccessDeniedException“„The security token included in the request is invalid.“Der Aufrufer verwendete IAM-Schlüssel, die nicht gültig sind, um auf eine API zuzugreifen, die die IAM-Autorisierung verwendet.
API-Schlüssel ist nicht gültig„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Der Aufrufer hat einen falschen API-Schlüssel für eine Methode verwendet, die einen API-Schlüssel erfordert. Oder du hast den API-Schlüssel nicht mit einem Nutzungsplan verknüpft, der eine Verbindung zur Phase herstellt. Oder du hast den API-Schlüssel deaktiviert oder der Schlüssel ist nicht vorhanden.
AWS WAF gefiltert„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Die Filterung der Webanwendungs-Firewall blockiert die Anfrage, wenn du AWS WAF in der API aktivierst.
Verwendet fälschlicherweise öffentliche DNS-Namen, um eine private API aufzurufen„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Du hast fälschlicherweise öffentliche DNS-Namen verwendet, um eine private API aus einer Amazon Virtual Private Cloud (Amazon VPC) heraus aufzurufen. Zum Beispiel: Der Header Host oder x-apigw-api-id fehlt in der Anfrage. Weitere Informationen findest du unter Aufrufen deiner privaten API mithilfe endpunktspezifischer öffentlicher DNS-Hostnames.
Ruft einen benutzerdefinierten Domain-Namen ohne Basispfadzuordnung auf„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Der Aufrufer ruft eine benutzerdefinierte Domain auf und weist einer API keinen Basispfad zu. Weitere Informationen findest du unter Benutzerdefinierter Domain-Name für öffentliche REST-APIs in API Gateway.
Ruft einen privaten benutzerdefinierten Domain-Namen auf„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Du hast den privaten benutzerdefinierten Domain-Namen nicht dem VPC-Endpunkt zugeordnet.
Die Phase in der Anfrage-URL ist ungültig„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Die Anforderungs-URL des Aufrufers enthält eine Phase, die nicht existiert. Weitere Informationen findest du unter Aufrufen von REST-APIs in API Gateway.
Verwendet ein Client-Zertifikat, das nicht gültig ist, um einen benutzerdefinierten API-Gateway-Domain-Namen aufzurufen, der gegenseitige TLS erfordert„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Der Truststore des benutzerdefinierten Domain-Namens stellt das Client-Zertifikat, das in der API-Anforderung enthalten ist, nicht aus, oder das Zertifikat ist nicht gültig. Weitere Informationen findest du unter Wie behebe ich „HTTP 403 Forbidden“-Fehler von einem benutzerdefinierten API Gateway-Domain-Namen, für den gegenseitige TLS erforderlich ist?
Verwendet den Standardendpunkt execute-api, um eine REST-API aufzurufen, die einen benutzerdefinierten Domain-Namen hat„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Der Aufrufer verwendet den Standardendpunkt execute-api, um eine REST-API aufzurufen, nachdem du den Standardendpunkt deaktiviert hast. Weitere Informationen findest du unter Deaktivierung des Standardendpunkts für REST-APIs.
Verwendet Routing-Regeln mit benutzerdefiniertem Domain-Namen„x-amzn-errortype“ = „ForbiddenException“„Forbidden“Du hast keine passende Routing-Regel mit dem benutzerdefinierten Domain-Namen konfiguriert. Weitere Informationen findest du unter Fehlerbehebung bei Routing-Regeln.
Ressourcenpfad existiert nicht„x-amzn-errortype“ = „IncompleteSignatureException“„Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=allow“Du hast eine Anfrage mit einem Authorization-Header an einen API-Ressourcenpfad gesendet, der nicht existiert.
Authentifizierungstoken ist abgelaufen„x-amzn-errortype“ = „InvalidSignatureException“„Signature expired“Das Authentifizierungstoken der Anfrage ist abgelaufen.
Signatur ist nicht gültig„x-amzn-errortype“ = „InvalidSignatureException“„The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method.“Die Signatur in der Anforderung stimmt nicht mit der Signatur auf dem Server überein, wenn der Aufrufer auf eine API zugreift, die die IAM-Autorisierung verwendet.
Ruft eine API mit aktivierter benutzerdefinierter Domain auf, wenn die Domain-URL die Stufe enthält„x-amzn-errortype“ = „MissingAuthenticationTokenException“„Missing Authentication Token“Eine API-Zuordnung spezifiziert eine API, eine Phase und einen optionalen Pfad, der für die Zuordnung verwendet werden soll. Wenn du die Phase einer API einer benutzerdefinierten Domain zuordnest, musst du die Phase nicht in die URL aufnehmen. Weitere Informationen findest du unter Verwenden von API-Zuordnungen, um API-Phasen mit einem benutzerdefinierten Domain-Namen für REST-APIs zu verbinden.
Fehlender Authentifizierungstoken„x-amzn-errortype“ = „MissingAuthenticationTokenException“„Missing Authentication Token“Die Anfrage hat kein Authentifizierungstoken.
Fehlender Authentifizierungstoken„x-amzn-errortype“ = „MissingAuthenticationTokenException“„Missing Authentication Token“Du hast eine Anfrage an eine API-Methode gesendet, die in der API nicht vorhanden ist.
Fehlender Authentifizierungstoken„x-amzn-errortype“ = „MissingAuthenticationTokenException“„Missing Authentication Token“Du hast eine Anfrage an eine API-Ressource gesendet, die in der API nicht vorhanden ist.
Ressourcenpfad existiert nicht„x-amzn-errortype“ = „MissingAuthenticationTokenException“„Missing Authentication Token“Du hast eine Anfrage ohne Authorization-Header an einen API-Ressourcenpfad gesendet, der nicht existiert. Weitere Informationen findest du unter Wie behebe ich Fehler vom Typ 403 „Missing Authentication Token“ am REST-API-Endpunkt von API-Gateway?

Lösung

Sich vergewissern, dass die angeforderte Ressource in der API-Definition existiert

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.

Verwende entweder die API Gateway-Konsole oder die AWS CLI, um die folgenden Konfigurationen zu überprüfen:

Identifizieren der Ursache des Fehlers

Um die Ursache des Fehlers zu ermitteln, richte die Amazon CloudWatch-Zugriffsprotokollierung für die API ein. Sieh dir dann die Protokollereignisse deiner API in CloudWatch an, um festzustellen, ob die Anfragen die API Gateway-API erreichen. Wenn die Anfragen die API Gateway-API erreichen und deine Protokolle Fehlermeldungen enthalten, kannst du mit der Fehlerbehebung für API Gateway fortfahren. Wenn die Anfragen andere Ressourcen erreichen, können andere Proxys oder Dienste die Ursache des Fehlers sein.

Hinweis: HTTP-APIs unterstützen keine Ausführungsprotokollierung.

Wenn du den Fehler reproduzieren kannst, verwende den Befehl curl -v, um weitere Kommunikationsdetails zwischen dem Client und der API abzurufen:

curl -X HTTP\_VERB -v https://api-id.execute-api.region.amazonaws.com/stage

Hinweis: Ersetze die Beispiel-URL durch die Aufruf-URL der API.

REST-API verifizieren und die API-Zuordnung umleiten

Wenn du einen benutzerdefinierten Domain-Namen verwendest, der gegenseitiges TLS erfordert und eine HTTP-API aufruft, erhältst du möglicherweise 403-Fehler.

Erstelle eine neue API-Zuordnung, um den REST-API-Aufruf für deinen benutzerdefinierten Domain-Namen zu testen.Sieh dir die Protokollereignisse der REST-API in CloudWatch an, um die Ursache der Fehler zu ermitteln.Nachdem du den Fehler identifiziert und behoben hast, leite die API-Zuordnung an die HTTP-API um.

Stelle sicher, dass der Anforderungsheader korrekt ist

Wenn der Fehler auf einen ungültigen API-Schlüssel zurückzuführen ist, überprüfe, ob du den x-api-key-Header in der Anfrage gesendet hast. Wenn du den Header nicht angegeben hast oder er nicht korrekt ist, aktualisiere den Anfrage-Header.

Stelle sicher, dass du die DNS-Einstellung auf den Amazon VPC-Endpunkten der Schnittstelle korrekt konfiguriert hast.

Hinweis: Die folgenden Aufgaben gelten für APIs, die du von einer Amazon VPC aus aufrufst, die nur über einen Schnittstellen-VPC-Endpunkt verfügt.

Stelle sicher, dass du die DNS-Einstellung des Schnittstellenendpunkts basierend auf dem verwendeten API-Typ korrekt konfiguriert hast.

Um eine regionale AWS-API aus einer Amazon VPC heraus aufzurufen, deaktiviere private DNS-Namen auf dem Schnittstellenendpunkt. Ein öffentliches DNS kann dann den Hostnamen des Endpunkts auflösen. Weitere Informationen findest du unter Erstellen einer privaten API.

Um den privaten DNS-Namen der API zum Aufrufen einer privaten API aus einer Amazon VPC heraus zu verwenden, aktiviere die privaten DNS-Namen auf dem Endpunkt. Die lokalen Subnetzressourcen von Amazon VPC können dann den Hostnamen des Schnittstellenendpunkts auflösen.

Hinweis: Wenn du privates DNS aktivierst und die Standard-URI verwendest, musst du weder den öffentlichen DNS-Namen der privaten API noch einen Amazon Route 53-Alias einrichten.

Ressourcenrichtlinie der API überprüfen

Überprüfe die Ressourcenrichtlinie deiner API, um Folgendes zu überprüfen:

HTTP-Anforderungs- und Antwortnachrichten überprüfen

Reproduziere den Fehler in einem Webbrowser. Verwende die Netzwerk-Tools des Browsers, um die HTTP-Anfrage- und Antwortnachrichten zu erfassen und sie dann zu analysieren, um festzustellen, wo der Fehler aufgetreten ist.

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

Ähnliche Informationen

Häufige Fehler

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

Wie behebe ich Probleme, wenn ich eine Verbindung zu einem privaten API-Endpunkt in API Gateway herstelle?

Wie aktiviere ich CloudWatch Logs zur Problembehebung meiner API-Gateway-REST-API oder WebSocket-API?

curl auf der curl-Website