Direkt zum Inhalt

Warum erhalte ich den HTTP-Fehler „403 Forbidden“, wenn ich versuche, von einer VPC aus eine Verbindung zu meinen öffentlichen API-Gateway-APIs herzustellen?

Lesedauer: 4 Minute
0

Ich erhalte die HTTP-Fehlermeldung „403 Forbidden“, wenn ich meine öffentliche Amazon-API-Gateway-API von meiner Amazon Virtual Private Cloud (Amazon VPC) aus aufrufe.

Kurzbeschreibung

Da die Endpunkte der Amazon-VPC-Schnittstelle den Datenverkehr nur an private APIs weiterleiten, kann beim Versuch, auf öffentliche API-Gateway-APIs zuzugreifen, die HTTP-Fehlermeldung „403 Forbidden“ angezeigt werden.

Der HTTP-Fehler „403 Forbidden“ tritt auf, wenn du versuchst, von einer VPC aus, für die private DNS-Namen aktiviert sind, auf eine öffentliche API von API Gateway aus zuzugreifen. Wenn du private DNS-Namen aktivierst, werden alle Anforderungen von der Amazon VPC an die API-Gateway-APIs zum VPC-Schnittstellen-Endpunkt aufgelöst.

Du kannst jedoch keinen Schnittstellen-VPC-Endpunkt verwenden, um eine Verbindung zu öffentlichen APIs herzustellen, da der private DNS-Name des Endpunkts das Format *.execute-api.{region}.amazonaws.com hat. Das Zeichen***** ist ein Platzhalter für die API-ID. Dieses Format entspricht der standardmäßigen Aufruf-URL des API Gateways sowohl für öffentliche als auch private APIs.

Wenn du private DNS-Namen aktivierst, werden Aufrufe von API-Gateway-API-URLs im Format *.execute-api.{region}.amazonaws.com zu den privaten IP-Adressen des Schnittstellen-VPC-Endpunkts aufgelöst. Diese Einstellung leitet den gesamten Datenverkehr über den Schnittstellen-VPC-Endpunkt für öffentliche und private APIs an das API Gateway weiter.

Du erhältst außerdem die Fehlermeldung „403 Forbidden“, wenn du AWS Direct Connect verwendest, um die Standard-URL „execute-api“ aufzurufen, um von einem On-Premises-Netzwerk aus eine Verbindung zu privaten APIs herzustellen.

Lösung

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.

Prüfen, ob deine Amazon VPC private DNS-Einstellungen verwendet

Um den HTTP-Fehler „403 Forbidden“ zu beheben, stelle zunächst fest, ob die Amazon VPC private oder öffentliche DNS-Einstellungen verwendet. Du kannst entweder die AWS CLI oder die Amazon-EC2-Konsole verwenden.

AWS CLI

Führe den folgenden Befehl describe-vpc-endpoints aus:

export VPC_ID=YOUR_VPC_ID  
export REGION=YOUR_REGION  
aws ec2 describe-vpc-endpoints \  
  --filters "Name=vpc-id,Values=${VPC_ID}" \  
            "Name=service-name,Values=com.amazonaws.${REGION}.execute-api" \  
  --query 'Amazon VPC endpointndpoints[].{Name:Tags[?Key==`Name`].Value|[0],Amazon VPC endpointndpointId:Amazon VPC endpointndpointId,PrivateDnsEnabled:PrivateDnsEnabled}' \  
  --output table

Hinweis: Ersetze YOUR_VPC_ID durch deine VPC-ID und YOUR_REGION durch deine AWS-Region.

Amazon-VPC-Konsole

Überprüfe, ob du in der VPC-Endpunktkonfiguration der Schnittstelle den privaten DNS-Namen aktiviert hast. Prüfe außerdem, ob es in der VPC einen Schnittstellen-VPC-Endpunkt für den Zugriff auf eine private REST-API gibt. Wenn es einen Schnittstellen-VPC-Endpunkt gibt, überprüfe, ob du die DNS-Attribute aktiviert hast

Eine Verbindung zu öffentlichen APIs herstellen, wenn private DNS-Namen aktiviert sind

Wenn du ein privates DNS aktiviert hast, richte Edge-optimierte benutzerdefinierte Domainnamen oder regionale benutzerdefinierte Domainnamen ein, um eine Verbindung zu den öffentlichen APIs herzustellen. Anschließend kannst du die öffentliche API von API Gateway mit dem benutzerdefinierten Domainnamen aufrufen, z. B. api.example.com. Die Konnektivität zu deinen privaten REST-APIs funktioniert weiterhin über den privaten REST-API-Endpunkt.

Wenn Clients über ein On-Premises-Netzwerk eine Verbindung herstellen, richte einen Amazon-Route-53-Resolver-Endpunkt für eingehenden Datenverkehr ein. Um die execute-api-Aufruf-URL zu verwenden, leite alle privaten DNS-Abfragen von deinem On-Premises-Netzwerk an den Endpunkt des eingehenden Datenverkehrs weiter.

Hinweis: Die VPC-Ressourcen müssen über Internetkonnektivität verfügen, um eine Verbindung zu den öffentlichen APIs herzustellen.

Eine Verbindung zu öffentlichen APIs herstellen, wenn private DNS-Namen deaktiviert sind

Verwende Sicherheitsgruppen für deine VPC, um ausgehenden Datenverkehr zu den öffentlichen APIs zuzulassen. Ändere außerdem die Ressourcenrichtlinie, die an die API angefügt ist, um den Zugriff von der VPC aus zu ermöglichen.

Wenn die VPC die Berechtigung hat, auf deine öffentlichen REST-APIs zuzugreifen, verwende den Standardbefehl execute-api, um eine Verbindung zu den öffentlichen REST-APIs herzustellen. Du kannst den benutzerdefinierten Domainnamen auch verwenden, um eine Verbindung zur öffentlichen REST-API herzustellen. Weitere Informationen findest du unter Steuern und Verwalten des Zugriffs auf REST-APIs in API Gateway.

Wenn du private DNS-Namen für den Schnittstellen-VPC-Endpunkt deaktivierst, stellt die Standard-Aufruf-URL execute-api keine Verbindung mehr zu privaten REST-APIs her.

Führe eine der folgenden Aktionen aus, um private REST-APIs aufzurufen:

  • Verwende Host-Header mit dem Amazon VPC-Endpunkt als DNS, wie im folgenden Beispiel:

    curl -H "Host: {your-api-id}.execute-api.{region}.amazonaws.com" \  
         https://Amazon VPC endpoint-xxxxx-xxxxx.execute-api.{region}.Amazon VPC endpoint.amazonaws.com/stage/path
  • Erstelle eine private gehostete Zone für execute-api.{region}.amazonaws.com. Füge in der privat gehosteten Zone einen A-Datensatz für die API-Kennung hinzu. Verweise den A-Datensatz auf die IP-Adressen des Schnittstellen-VPC-Endpunkts, sodass du die Standard-Aufruf-URL execute-api der privaten REST-API verwenden kannst.

Ändern der privaten DNS-Attribute für einen Schnittstellen-VPC-Endpunkt

Du kannst die privaten DNS-Attribute für einen Schnittstellenendpunkt ändern. Die Änderungen wirken sich darauf aus, wie eine API-Stufen-URL in die private IP-Adresse des Schnittstellen-VPC-Endpunkts aufgelöst wird. Die Änderungen wirken sich auch darauf aus, wie du von einer VPC aus eine Verbindung zu privaten APIs und öffentlichen APIs herstellen kannst. Weitere Informationen findest du unter DNS-Attribute für die VPC.

Ähnliche Informationen

Über einen Schnittstellen-VPC-Endpunkt auf einen AWS-Service zugreifen