Wie behebe ich Probleme bei der Verbindung zu einem privaten API-Endpunkt von API Gateway?

Lesedauer: 7 Minute
0

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:

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

Wie kann ich über einen VPC-Schnittstellen-Endpunkt auf eine private REST-API von API Gateway in einem anderen AWS-Konto zugreifen?

Warum erhalte ich den Fehler HTTP 403 Forbidden, wenn ich von einer VPC aus eine Verbindung zu meinen API-Gateway-APIs herstelle?

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