Wie behebe ich Probleme bei der Verbindung zu einem privaten API-Endpunkt von API Gateway?
Ich habe Probleme, eine Verbindung zu meinem privaten Amazon API Gateway-API-Endpunkt herzustellen, der sich in Amazon Virtual Private Cloud (Amazon VPC) befindet. Wie behebe ich das Problem?
Kurzbeschreibung
AWS-Ressourcen in Amazon VPC können aus einem der folgenden Gründe keine Verbindung zu einem privaten API-Endpunkt herstellen:
- Der private API-Endpunkt hat eine falsch konfigurierte API-Gateway-Ressourcenrichtlinie.
- Der VPC-Endpunkt der Schnittstelle hat eine falsch konfigurierte VPC-Endpunktrichtlinie.
- Eine Amazon VPC-Sicherheitsgruppe hat falsch konfigurierte Regeln.
- Die Aufruf-URL des privaten API-Endpunkts enthält nicht die richtigen DNS-Namen (Domain Name System).
Hinweis: Benutzerdefinierte Domainnamen werden für private APIs nicht unterstützt.
Wenn die Amazon CloudWatch-Protokollierung für Ihre API aktiviert ist, erscheint in Ihren Ausführungsprotokollen eine Fehlermeldung, die auf die Ursache des Fehlers hinweist.
Wenn die API-Anforderung nach der Aktivierung der Protokollierung keine CloudWatch-Protokolle erzeugt, hat die Anforderung den Endpunkt nicht erreicht. Wenn Ihre API-Anforderungen den Endpunkt nicht erreichen, stellen Sie sicher, dass die Aufruf-URL der privaten API korrekt formatiert ist.
Hinweis: Verbindungsprobleme können durch eine falsch konfigurierte API-Gateway-Ressourcenrichtlinie oder falsche DNS-Namen in der Aufruf-URL des privaten API-Endpunkts verursacht werden.
Lösung
Bestätigen der Ursache des Fehlers
1. Falls Sie dies noch nicht getan haben, aktivieren Sie die CloudWatch-Protokollierung für Ihre private REST-API. Stellen Sie sicher, dass Sie die Ausführungsprotokollierung konfigurieren.
Tipp: Wählen Sie bei der Konfiguration der Protokollierungseinstellungen unter Log Level (Protokollebene) die Option INFO aus. Wählen Sie dann Log full requests/responses data (Vollständige Anfragen/Antwortdaten protokollieren) aus.
2. Finden Sie heraus, was die Fehler verursacht, indem Sie sich die Ausführungsprotokolle Ihrer REST-API in CloudWatch ansehen. 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:“ („Der Benutzer: anonymous ist nicht autorisiert, Folgendes auszuführen: execute-api:Invoke on resource:“
- Connection timed out“ (Verbindungs-Timeout)
Wenn die API-Anforderung nach der Aktivierung der Protokollierung keine CloudWatch-Protokolle erzeugt, stellen Sie sicher, dass die Aufruf-URL Ihrer privaten API korrekt formatiert ist. Anweisungen finden Sie im Abschnitt Wenn die API-Anforderung nach Aktivierung der Protokollierung keine CloudWatch-Protokolle erzeugt.
Weitere Informationen finden Sie unter Wie finde ich API-Gateway-REST-API-Fehler in meinen CloudWatch-Protokollen?
Beheben von Fehlern „User: anonymous is not authorized to perform: execute-api:Invoke on resource:“ (Der Benutzer: anonymous ist nicht autorisiert, Folgendes auszuführen: execute-api:Invoke on resource:)
1. Stellen Sie sicher, dass die API-Gateway-Ressourcenrichtlinie des privaten API-Endpunkts den Datenverkehr vom Schnittstellen-VPC-Endpunkt oder der Quell-VPC zum API-Endpunkt zulässt. Ein Beispiel für eine Ressourcenrichtlinie finden Sie unter Beispiel: Zulassen des privaten API-Verkehrs basierend auf der Quell-VPC oder dem VPC-Endpunkt.
2. Stellen Sie sicher, dass die VPC-Endpunktrichtlinie dem Client den Zugriff auf den privaten API-Endpunkt ermöglicht. Beispiele für VPC-Endpunktrichtlinien finden Sie unter Beispiele für VPC-Endpunktrichtlinien.
Anweisungen zum Testen von API Gateway-Ressourcenrichtlinien finden Sie im Abschnitt **Testen der Ressourcenrichtlinie unter **Wie erlaube ich nur bestimmten IP-Adressen den Zugriff auf meine API Gateway-REST-API?
Wichtig: Wenn Sie die Ressourcenrichtlinie Ihrer API ändern, müssen Sie Ihre API bereitstellen, um die Änderungen zu übernehmen.
Beheben von Fehlern des Typs „Connection timed out“ (Verbindungs-Timeout)
1. Stellen Sie sicher, dass in der VPC ein API Gateway-Execute-API-VPC-Endpunkt vorhanden ist. Überprüfen Sie außerdem, ob sich der Endpunkt in derselben AWS-Region wie die private API befindet. Wenn er nicht existiert, erstellen Sie einen Schnittstellen-VPC-Endpunkt für API Gateway execute-api.
2. Stellen Sie sicher, dass der Client, der den privaten API-Endpunkt aufruft, in derselben VPC vorhanden ist oder über den VPC-Endpunkt Zugriff auf die VPC hat. Sie können dies mit dem traceroute-Tool testen.
Hinweis: Private APIs sind von Clients innerhalb der VPC oder von Clients aus zugänglich, die über eine Netzwerkverbindung zur VPC verfügen.
Führen Sie die folgenden Befehle aus, um traceroute zu installieren:
Amazon Linux:
$ sudo yum install traceroute
Ubuntu:
$ sudo apt-get install traceroute
Um die Konnektivität mit Traceroute zu testen:
$ sudo traceroute -n -T -p 443 <VPC-endpoint IP-address>
Das Argument -T -p 443 -n führt eine TCP-basierte Verfolgung auf Port 443 durch.
3. Stellen Sie sicher, dass die Regeln für Ihre Amazon VPC-Sicherheitsgruppen korrekt konfiguriert sind.
So testen Sie Ihre Amazon VPC-Sicherheitsgruppen:
Führen Sie den folgenden Befehl von dem Client aus, der Anforderungen an den privaten API-Endpunkt sendet. Stellen Sie sicher, {public-dns-hostname} durch die öffentlichen DNS-Hostnamen zu ersetzen, die die VPC-Endpunkt-ID für Ihre API enthalten. Ersetzen Sie {region} durch die AWS-Region, in der sich Ihr Schnittstellen-VPC-Endpunkt befindet.
$ telnet {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com 443
Wenn die Verbindung unterbrochen wird, sind die Regeln für Ihre Amazon VPC-Sicherheitsgruppen nicht richtig konfiguriert.
Überprüfen Sie Folgendes:
- Die anfordernde Ressource verfügt über eine Sicherheitsgruppenregel, die ausgehenden TCP-Port 443 an den IP-Adressbereich oder die Sicherheitsgruppe des VPC-Endpunkts zulässt.
- Der VPC-Endpunkt verfügt über eine Sicherheitsgruppenregel, die eingehenden TCP-Port 443-Verkehr aus dem IP-Adressbereich oder der Sicherheitsgruppe der anfordernden Ressource zulässt.
Weitere Informationen finden Sie unter Steuern des Datenverkehrs zu Ressourcen mithilfe von Sicherheitsgruppen.
Wenn die API-Anforderung nach der Aktivierung der Protokollierung keine CloudWatch-Protokolle erzeugt
1. Stellen Sie sicher, dass die API-Gateway-Ressourcenrichtlinie des privaten API-Endpunkts korrekt konfiguriert ist.
Weitere Informationen finden Sie im folgenden Abschnitt dieses Artikels: Beheben von Fehlern „User: anonymous is not authorized to perform: execute-api:Invoke on resource:“ (Der Benutzer: anonymous ist nicht autorisiert, Folgendes auszuführen: execute-api:Invoke on resource:).
2. Stellen Sie sicher, dass die Aufruf-URL Ihrer privaten API korrekt formatiert ist.
Das richtige Format hängt davon ab, ob ein privates DNS für den VPC-Endpunkt aktiviert ist. Wenn privates DNS nicht aktiviert ist, müssen Sie endpunktspezifische öffentliche DNS-Hostnamen verwenden, um auf den privaten API-Endpunkt zuzugreifen. Wenn privates DNS aktiviert ist, müssen Sie private DNS-Namen verwenden, um auf den privaten API-Endpunkt zuzugreifen.
Weitere Informationen finden Sie unter So rufen Sie eine private API auf.
Testen Sie, ob die Domain des privaten API-Endpunkts korrekt mit der IP-Adresse des VPC-Endpoints übereinstimmt
1. Führen Sie den folgenden nslookup-Befehl von dem Client aus, der Anforderungen an den privaten API-Endpunkt sendet. Stellen Sie sicher, dass sich der Client in der VPC befindet, in der sich der VPC-Endpunkt befindet. Ersetzen Sie {restapi-id} durch die ID Ihrer privaten API. Ersetzen Sie {region} durch die AWS-Region, in der sich Ihr privater API-Endpunkt befindet.
$ nslookup {restapi-id}.execute-api.{region}.amazonaws.com
Eine erfolgreiche Ausgabe zeigt die privaten IP-Adressen des VPC-Endpunkts.
2. Führen Sie den folgenden nslookup-Befehl aus. Stellen Sie sicher, {public-dns-hostname} durch die öffentlichen DNS-Hostnamen zu ersetzen, die die VPC-Endpunkt-ID für Ihre API enthalten. Ersetzen Sie {region} durch die AWS-Region, in der sich Ihr Schnittstellen-VPC-Endpunkt befindet.
$ nslookup {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com
Eine erfolgreiche Ausgabe zeigt die privaten IP-Adressen des VPC-Endpunkts.
3. Vergleichen Sie die IP-Adressen in den Ausgaben der einzelnen Befehle. Wenn die IP-Adressen der einzelnen Befehlsausgaben übereinstimmen, funktioniert die Einrichtung wie erwartet.
Hinweis: Sie können privates DNS für Ihren VPC-Endpunkt jederzeit in der Amazon VPC-Konsole aktivieren, indem Sie wie folgt vorgehen:
Wählen Sie im Bereich Endpoints (Endpunkte) Ihren Schnittstellen-VPC-Endpunkt aus.
Wählen Sie Actions (Aktionen) aus.
Wählen Sie Modify Private DNS names (Private DNS-Namen ändern) aus.
Aktivieren Sie das Kontrollkästchen Enable Private DNS Name (Privaten DNS-Namen aktivieren). Wählen Sie dann Save changes (Änderungen speichern).
Wählen Sie Modify Private DNS names (Private DNS-Namen ändern) aus.
Verwandte Informationen
Zugreifen auf einen AWS-Service über einen Schnittstellen-VPC-Endpunkt
Datenschutz im Netzwerkverkehr in Amazon VPC
Überwachen der REST-API-Ausführung mit Amazon CloudWatch-Metriken
Ähnliche Videos
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- Wie greife ich auf eine private API-Gateway-API zu, wenn der VPC-Endpunkt ein lokales DNS verwendet?AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr