Direkt zum Inhalt

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

Lesedauer: 7 Minute
0

Ich möchte Probleme beheben, wenn ich eine Verbindung zu meinem privaten API-Endpunkt von Amazon API Gateway in Amazon Virtual Private Cloud (Amazon VPC) herstelle.

Kurzbeschreibung

AWS-Ressourcen in Amazon VPC können aus den folgenden Gründen möglicherweise keine Verbindung zu einem privaten API-Endpunkt herstellen:

  • Du hast die API Gateway-Ressourcenrichtlinie für den privaten API-Endpunkt nicht richtig konfiguriert.
  • Du hast die VPC-Endpunktrichtlinie für den Schnittstellen-VPC-Endpunkt nicht richtig konfiguriert.
  • Du hast die Regeln für eine Amazon-VPC-Sicherheitsgruppe nicht richtig konfiguriert.
  • Die Aufruf-URL der privaten API enthält nicht die richtigen DNS-Namen.
  • Du hast den privaten benutzerdefinierten Domain-Namen keinem VPC-Endpunkt zugeordnet.
  • Du hast die Ressourcenrichtlinie für den privaten benutzerdefinierten Domain-Namen nicht richtig konfiguriert.

Um die Ursache zu ermitteln, kannst du Amazon CloudWatch Logs für die API aktivieren und die Protokolle überprüfen.

Wenn die API-Anforderung nach der Aktivierung von CloudWatch Logs keine Protokolle generiert, hat die Anforderung den Endpunkt nicht erreicht. Wenn die API-Anforderungen den Endpunkt nicht erreichen, überprüfe, ob du die Aufruf-URL der privaten API korrekt konfiguriert hast.
Weitere Informationen findest du unter Wie finde ich API Gateway-REST-API-Fehler in meinen CloudWatch-Protokollen?

Hinweis: Eine falsch konfigurierte API Gateway-Ressourcenrichtlinie oder ein falscher DNS-Name in der Aufruf-URL des privaten API-Endpunkts können zu Verbindungsproblemen führen.

Lösung

Bestätigen der Fehlerursache

Führe die folgenden Schritte aus:

  1. Schalte CloudWatch Logs für die private REST-API ein.
  2. Wähle für Protokollstufe die Option INFO und dann Umfassende Anforderungs-/Antwortdaten protokollieren aus.
  3. Sieh dir die Ausführungsprotokolle der REST-API in CloudWatch an, um die Ursache des Fehlers zu ermitteln.

Wenn API-Anforderungen den Endpunkt erreichen, erscheint eine Fehlermeldung, die einem der folgenden Beispiele ähnelt:

  • „User: anonymous is not authorized to perform: execute-api:Invoke on resource:“
  • „SSL: no alternative certificate subject name matches target host name custom-domain.com/resource“
  • „Connection timed out“
  • „Could not resolve host: https://example.com/resource“

„User: anonymous is not authorized to perform: execute-api:Invoke on resource:“

Konfiguriere die folgenden Richtlinien, um dieses Problem zu beheben:

  • Die API-Gateway-Ressourcenrichtlinie der privaten API muss den Datenverkehr vom Schnittstellen-VPC-Endpunkt oder der Quell-VPC zum API-Endpunkt zulassen.
  • Die VPC-Endpunktrichtlinie muss dem Client den Zugriff auf den privaten API-Endpunkt ermöglichen. Dies ist die Ressourcenrichtlinie für den execute-api-Service.
  • Die Ressourcenrichtlinie des benutzerdefinierten Domain-Namens muss den Zugriff auf die VPC-Endpunkte ermöglichen, um den privaten benutzerdefinierten Domain-Namen aufzurufen. Standardmäßig stellt API Gateway einen benutzerdefinierten Domain-Namen mit einer ausdrücklichen deny (Verweigerung) in der Ressourcenrichtlinie des benutzerdefinierten Domain-Namens bereit. Weitere Informationen findest du unter Tutorial: Erstellen und Aufrufen eines benutzerdefinierten Domain-Namens für private APIs.
    Wichtig: Wenn du die Ressourcenrichtlinie der API änderst, stelle die API auf der Stufe bereit, um die Änderungen zu speichern.

„SSL: no alternative certificate subject name matches target host name custom-domain.com/resource“

Um dieses Problem zu beheben, überprüfe, ob du private benutzerdefinierte Domain-Namen-Zugriffszuordnungen für den privaten VPC-Endpunkt für den execute-api-Service erstellt hast.

„Connection timed out“

Gehe wie folgt vor, um Probleme mit dem Verbindungs-Timeout zu beheben:

  1. Stelle sicher, dass ein API Gateway-execute-api-VPC-Endpunkt in der VPC vorhanden ist, in der du deinen Client hostest. Stelle dann sicher, dass sich der Endpunkt in derselben AWS-Region wie die private API befindet. Wenn der Endpunkt nicht existiert, erstelle einen Schnittstellen-VPC-Endpunkt für API Gateway execute-api.

  2. Verwende traceroute, um zu überprüfen, ob der Client, der die private API aufruft, in derselben VPC existiert oder mit dem VPC-Endpunkt auf die VPC zugreifen kann.

    Führe die folgenden Befehle aus, um traceroute zu installieren:

    Amazon Linux:

    sudo yum install traceroute

    Ubuntu:

    sudo apt-get install traceroute

    Führe den folgenden Befehl aus, um traceroute zum Testen der Konnektivität zu verwenden:

    sudo traceroute -n -T -p 443 VPC-endpoint IP-address

    Hinweis: Das Argument -T -p 443 -n führt eine TCP-basierten Ablaufverfolgung auf Port 443 durch. Ersetze die VPC-Endpunkt-IP-Adresse durch die IP-Adresse des VPC-Endpunkts.

  3. Stelle sicher, dass du die Regeln für die Amazon VPC-Sicherheitsgruppen korrekt konfiguriert hast.
    Um die Amazon VPC-Sicherheitsgruppen zu testen, führe den folgenden Befehl auf dem Client aus, der Anforderungen an den privaten API-Endpunkt stellt:

    telnet public-dns-hostname.execute-api.region.vpce.amazonaws.com 443

    Hinweis: Ersetze public-dns-hostname durch die öffentlichen DNS-Hostnamen, die die VPC-Endpunkt-ID für die API enthalten. Ersetze außerdem region durch die Region, in der sich der Schnittstellen-VPC-Endpunkt befindet.

    Oder führe den folgenden Befehl vom Client aus, der Anforderungen an den benutzerdefinierten Domain-Namen der privaten API stellt:

    telnet custom-domain-name 443

    Hinweis: Ersetze custom-domain-name durch deinen privaten API-Domain-Namen.

Wenn bei der Verbindung ein Timeout auftritt, hast du die Regeln für die Amazon VPC-Sicherheitsgruppen nicht richtig konfiguriert.

Die anfordernde Ressource muss über eine Sicherheitsgruppenregel verfügen, die ausgehenden TCP-Port 443-Datenverkehr zum IP-Adressbereich oder zur Sicherheitsgruppe des VPC-Endpunkts zulässt. Außerdem muss der VPC-Endpunkt über eine Sicherheitsgruppenregel verfügen, die eingehenden TCP-Port 443 Datenverkehr aus dem IP-Adressbereich oder der Sicherheitsgruppe der anfordernden Ressource zulässt.

Weitere Informationen findest du unter Wie schränke ich den Datenverkehr zu und von Amazon VPC-Ressourcen ein?

„Could not resolve host:https://www.example.com/resource“

Gehe wie folgt vor, um dieses Problem zu beheben:

Teste, ob die Domain des privaten API-Endpunkts korrekt mit der IP-Adresse des VPC-Endpunkts übereinstimmt

Hinweis: Stelle sicher, dass sich der Client in der VPC befindet, in der der VPC-Endpunkt execute-api vorhanden ist.

Führe die folgenden Schritte aus:

  1. Führe den folgenden nslookup-Befehl auf dem Client aus, der Anforderungen an den privaten API-Endpunkt stellt:
    nslookup restapi-id.execute-api.region.amazonaws.com
    Hinweis: Ersetze restapi-id durch die ID deiner privaten API und region durch die Region, in der sich dein privater API-Endpunkt befindet.
  2. Führe den folgenden Befehl nslookup vom Client aus, der Anforderungen an den benutzerdefinierten Domain-Namen der privaten API stellt:
    nslookup custom-domain-name
    Hinweis: Ersetze custom-domain-name durch den Domain-Namen deines privaten APIs. Eine erfolgreiche Ausgabe zeigt die IP-Adressen des privaten VPC-Endpunkts.
  3. Führe den folgenden nslookup-Befehl aus:
    nslookup public-dns-hostname.execute-api.region.vpce.amazonaws.com
    Hinweis: Ersetze public-dns-hostname durch die öffentlichen DNS-Hostnamen, die die VPC-Endpunkt-ID für die API enthalten. Ersetze region durch die Region, in der sich der Schnittstellen-VPC-Endpunkt befindet. Eine erfolgreiche Ausgabe zeigt die IP-Adressen des privaten VPC-Endpunkts.
  4. Vergleiche die IP-Adressen in den Ausgaben der einzelnen Befehle. Wenn die IP-Adressen der einzelnen Befehlsausgaben übereinstimmen, funktioniert die Einrichtung wie erwartet.

Gehe wie folgt vor, um ein privates DNS für den VPC-Endpunkt zu aktivieren.

  1. Öffne die Amazon-VPC-Konsole.
  2. Wähle im Bereich Endpunkte den Schnittstellen-VPC-Endpunkt aus.
  3. Wähle Aktionen aus.
  4. Wähle Private DNS-Namen ändern aus.
  5. Wähle Privaten DNS-Namen aktivieren aus und wähle dann Änderungen speichern aus.

Die API-Anforderung erzeugt keine CloudWatch-Protokolle, nachdem du CloudWatch Logs aktiviert hast

Gehe wie folgt vor, um dieses Problem zu beheben:

  • Konfiguriere die API-Gateway-Ressourcenrichtlinie des privaten API-Endpunkts korrekt.
  • Formatiere die Aufruf-URL der privaten API korrekt, um auf den privaten API-Endpunkt zuzugreifen.
    Hinweis: Wenn du ein privates DNS aktiviert hast, musst du endpunktspezifische öffentliche DNS-Hostnamen verwenden. Wenn du kein privates DNS aktiviert hast, verwende private DNS-Namen.
  • Ordne den benutzerdefinierten Domain-Namen der privaten API der richtigen API-Stufe zu.

Ähnliche Informationen

Wie verwende ich einen Schnittstellen-VPC-Endpunkt, um auf eine private REST-API bei API Gateway in einem anderen Konto zuzugreifen?

Warum erhalte ich die Fehlermeldung „HTTP 403 Forbidden“, wenn ich von einer VPC aus eine Verbindung zu meinen API Gateway-APIs herstelle?

Wie überwache ich den Datenverkehr in meiner VPC mithilfe von Ablaufprotokollen?

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