Wie behebe ich Probleme, wenn ich eine Verbindung zu einem privaten API-Endpunkt von API Gateway herstelle?
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 Domainnamen keinem VPC-Endpunkt zugeordnet.
- Du hast die Ressourcenrichtlinie für den privaten benutzerdefinierten Domainnamen 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 richtig konfiguriert hast.<br id=hardline_break/> Weitere Informationen findest du unter Wie finde ich Fehler bei API-Gateway-REST-APIs 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
Gehe wie folgt vor:
- Schalte CloudWatch Logs für die private REST-API ein.
- Wähle für Protokollstufe die Option INFO und dann Umfassende Anforderungs-/Antwortdaten protokollieren aus.
- Zeige 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 Domainnamens muss den Zugriff auf die VPC-Endpunkte ermöglichen, um den privaten benutzerdefinierten Domainnamen aufzurufen. Standardmäßig stellt API Gateway einen benutzerdefinierten Domainnamen mit einer ausdrücklichen Verweigerung in der Ressourcenrichtlinie des benutzerdefinierten Domainnamens bereit. Weitere Informationen findest du unter Tutorial: Erstellen und Aufrufen eines benutzerdefinierten Domainnamens für private APIs.<br id=hardline_break/> 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 Domainnamen-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:
-
Stelle sicher, dass ein execute-api-VPC-Endpunkt von API Gateway 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.
-
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 tracerouteUbuntu:
sudo apt-get install tracerouteFühre den folgenden Befehl aus, um Traceroute zum Testen der Konnektivität zu verwenden:
sudo traceroute -n -T -p 443 VPC-endpoint IP-addressHinweis: Das Argument „-T -p 443 -n“ führt eine TCP-basierte Ablaufverfolgung auf Port 443 durch. Ersetze die VPC-Endpunkt-IP-Adresse durch die IP-Adresse deines VPC-Endpunkts.
-
Stelle sicher, dass du die Regeln für die Amazon-VPC-Sicherheitsgruppen richtig konfiguriert hast.<br id=hardline_break/> 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 443Hinweis: 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 Domainnamen der privaten API stellt:
telnet custom-domain-name 443Hinweis: Ersetze custom-domain-name durch den benutzerdefinierten Domainnamen deiner privaten API.
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 Datenverkehr an TCP-Port 443 zum IP-Adressbereich oder zur Sicherheitsgruppe des VPC-Endpunkts zulässt. Außerdem muss der VPC-Endpunkt über eine Sicherheitsgruppenregel verfügen, die eingehenden Datenverkehr an TCP-Port 443 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:
- Stelle sicher, dass du der von Amazon Route 53 gehosteten Zone die richtige VPC zugeordnet hast.
- Stelle sicher, dass du den Datensatz für den benutzerdefinierten Domainnamen in der gehosteten Route-53-Zone mit Ziel als Alias für den DNS-Namen des VPC-Endpunkts erstellt hast.
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.
Gehe wie folgt vor:
- Führe den folgenden nslookup-Befehl auf dem Client aus, der Anforderungen an den privaten API-Endpunkt stellt:
Hinweis: Ersetze restapi-id durch die ID deiner privaten API und region durch die Region, in der sich dein privater API-Endpunkt befindet.nslookup restapi-id.execute-api.region.amazonaws.com - Führe den folgenden Befehl nslookup vom Client aus, der Anforderungen an den benutzerdefinierten Domainnamen der privaten API stellt:
Hinweis: Ersetze custom-domain-name durch den Domainnamen deines privaten APIs. Eine erfolgreiche Ausgabe zeigt die privaten IP-Adressen des VPC-Endpunkts.nslookup custom-domain-name - Führe den folgenden nslookup-Befehl aus:
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 privaten IP-Adressen des VPC-Endpunkts.nslookup public-dns-hostname.execute-api.region.vpce.amazonaws.com - 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.
- Öffne die Amazon-VPC-Konsole.
- Wähle im Bereich Endpunkte den Schnittstellen-VPC-Endpunkt aus.
- Wähle Aktionen aus.
- Wähle Private DNS-Namen ändern aus.
- 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 richtig.
- Formatiere die Aufruf-URL der privaten API richtig, um auf den privaten API-Endpunkt zuzugreifen.<br id=hardline_break/> 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 Domainnamen der privaten API der richtigen API-Stufe zu.
Ähnliche Informationen
Wie überwache ich den Datenverkehr in meiner VPC mithilfe von Ablaufprotokollen?
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren