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

Lesedauer: 7 Minute
0

Ich möchte einen Schnittstellen-VPC-Endpunkt (Virtual Private Cloud) verwenden, um auf eine private REST-API bei Amazon API Gateway zuzugreifen, die sich in einem anderen AWS-Konto befindet.

Kurzbeschreibung

Gehen Sie wie folgt vor, um mit einem VPC-Schnittstellenendpunkt auf eine private REST-API bei API Gateway zuzugreifen, die sich in einem anderen AWS-Konto befindet:

  1. Erstellen Sie einen Schnittstellenendpunkt in einer Amazon Virtual Private Cloud (Amazon VPC) in einem Konto (Konto A).
  2. Erstellen Sie mit API Gateway eine private REST-API in einem zweiten Konto (Konto B).
  3. Konfigurieren Sie eine Ressourcenrichtlinie für die private REST-API, die dem Schnittstellenendpunkt den Aufruf der API erlaubt.
  4. Richten Sie eine Methode für die private REST-API ein.
  5. Stellen Sie die private REST-API bereit.
  6. Rufen Sie die private REST-API von Konto A aus auf, um die Konfiguration zu testen.

Hinweis: Die private REST-API von Amazon API Gateway und der VPC-Endpunkt müssen sich in derselben AWS-Region befinden.

Lösung

Erstellen Sie einen Schnittstellenendpunkt in einer Amazon VPC in einem Konto (Konto A)

Erstellen Sie einen neuen Schnittstellen-VPC-Endpunkt

Folgen Sie von Konto A aus den Anweisungen unter Create an interface VPC endpoint for API Gateway execute-api.

**Wichtig:**Wählen Sie für Richtlinie die Option Vollzugriff aus. Es hat sich bewährt, eine VPC-Endpunktrichtlinie zu verwenden, um den Endpunktzugriff anhand der API-ID einzuschränken. Ebenso hat es sich bewährt, die API-Gateway-Ressourcenrichtlinie zu verwenden, um den Endpunktzugriff durch den Prinzipal einzuschränken. Weitere Informationen finden Sie unter Apply least-privilege permissions.

Gehen Sie beim Erstellen des Schnittstellenendpunkts wie folgt vor:

Abrufen der VPC-Endpunkt-ID des Schnittstellenendpunkts

Nachdem Sie den Schnittstellenendpunkt erstellt haben, wird die VPC-Endpunkt-ID angezeigt. Kopieren Sie die VPC-Endpunkt-ID Ihres neuen Schnittstellenendpunkts, zum Beispiel: vpce-1a2b3c456d7e89012. Wählen Sie dann Schließen.

**Hinweis:**Verwenden Sie diese ID, wenn Sie Ihre private REST-API erstellen und konfigurieren.

Abrufen des öffentlichen DNS-Namen des Schnittstellenendunkts

Nachdem Sie Schließen ausgewählt haben, wird die Seite Endpunkte in der Amazon-VPC-Konsole geöffnet. Kopieren Sie auf der Seite Endpunkte auf der Registerkarte Details den öffentlichen DNS-Namen für Ihren Schnittstellenendpunkt in die Spalte DNS-Namen, zum Beispiel: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com.

Erstellen einer privaten REST-API mit API Gateway in einem zweiten Konto (Konto B)

  1. Öffnen Sie in Konto B die API-Gateway-Konsole.
  2. Wählen Sie API erstellen aus.
  3. Wählen Sie für API-Typ auswählen unter REST API Private die Option Erstellen aus.
  4. Belassen Sie auf der Seite Erstellen die Option Protokoll auswählen auf REST.
  5. Wählen Sie unter Neue API erstellen die Option Neue API aus.
  6. Geben Sie unter Einstellungen die folgenden Informationen ein:
    Geben Sie als API-Name einen Namen ein.
    (Optional) Geben Sie für Beschreibung eine Beschreibung ein.
    Belassen Sie die Einstellung Endpunkttyp auf Privat.
    Fügen Sie für VPC-Endpunkt-IDs Ihre Schnittstellenendpunkt-ID ein. Wählen Sie anschließend Hinzufügen.
    **Hinweis:**Wenn Sie Ihren Schnittstellenendpunkt mit Ihrer privaten REST-API verknüpfen, generiert API Gateway einen neuen Alias-Datensatz bei Amazon Route 53. Sie können den Route-53-Alias verwenden, um auf Ihre private API zuzugreifen.
  7. Wählen Sie API erstellen aus.

Weitere Informationen finden Sie unter Creating a private API in Amazon API Gateway.

Konfigurieren einer Ressourcenrichtlinie für die private REST-API, die dem Schnittstellenendpunkt den Aufruf der API ermöglicht

1.Wählen Sie im Navigationsbereich der API-Gateway-Konsole unter Ihrer API die Option Ressourcenrichtlinie aus.

2.Fügen Sie auf der Seite Ressourcenrichtlinie das folgende Beispiel für eine Ressourcenrichtlinie in das Textfeld ein:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-1a2b3c456d7e89012"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*"
    }
  ]
}

**Hinweis:**Ersetzen Sie vpce-1a2b3c456d7e89012 durch die Schnittstellenendpunkt-ID.

Weitere Informationen finden Sie unter Set up a resource policy for a private API.

Einrichten einer Methode für die private REST-API

  1. Wählen Sie im Navigationsbereich der API-Gateway-Konsole unter Ihrer API die Option Ressourcen aus.
  2. Wählen Sie im Bereich Ressourcen die Option Aktionen und dann Methode erstellen aus.
  3. Wählen Sie in der Dropdown-Liste unter dem / resource-Knoten die Option ANY aus und klicken Sie dann auf das Häkchensymbol.
  4. Wählen Sie im Bereich / - ANY - Setup als Integrationstyp die Option Pseudo aus.
    **Hinweis:**Eine Pseudo-Integration reagiert auf jede Anfrage, die sie erreicht.
  5. Wählen Sie Speichern.

Weitere Informationen finden Sie unter Set up REST API methods in API Gateway.

Bereitstellen der privaten REST-API

  1. Wählen Sie im Bereich Ressourcen der API-Gateway-Konsole die Option Aktionen und dann API bereitstellen aus.
  2. Geben Sie im Dialogfeld API bereitstellen die folgenden Informationen ein:
    Wählen Sie für Bereitstellungsstufe die Option [New Stage] aus .
    Geben Sie als Stufenname einen Namen ein, z. B. dev oder test.
  3. Wählen Sie Bereitstellen aus.
  4. Suchen Sie im Bereich Stage Editor nach der Meldung:Wenn Private DNS aktiviert ist, verwenden Sie diese URL: Kopieren Sie die Aufruf-URL Ihrer privaten REST-API.
    **Hinweis:**Verwenden Sie die Aufruf-URL der privaten REST-API, um das Setup zu testen.

Weitere Informationen finden Sie unter Deploy a private API using the API Gateway console.

Aufrufen der privaten REST-API von Konto A aus, um das Setup zu testen

  1. Starten Sie in Konto A eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance in derselben Amazon VPC, in der sich Ihr Schnittstellenendpunkt befindet.
    Wichtig:Wählen Sie die Sicherheitsgruppe aus, die Sie Ihrem Schnittstellenendpunkt zugeordnet haben.
  2. Stellen Sie eine Verbindung zur Amazon-EC2-Instance her.
    **Hinweis:**Für eine Amazon-EC2-Instance können Gebühren in Ihrem AWS-Konto anfallen. Wenn Sie eine Instance zum Testen erstellen, beenden Sie die Instance anschließend, um wiederholt anfallende Gebühren zu vermeiden.
  3. Verwenden Sie von der Befehlszeile Ihrer Amazon-EC2-Instance aus einen der folgenden curl-Befehle, um die private REST-API in Konto B aufzurufen.
    **Hinweis:**Weitere Informationen finden Sie unter Invoking your private API using endpoint-specific public DNS hostnames. Weitere Informationen zu Curl finden Sie auf der Website des Curl-Projekts.

Für einen privaten DNS-Namen

Führen Sie folgenden Befehl aus:

curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name

**Hinweis:**Ersetzen Sie https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name durch die Aufruf-URL Ihrer privaten API. Dieser Befehl funktioniert nur, wenn Sie privates DNS für Ihren Schnittstellenendpunkt aktiviert haben. Weitere Informationen finden Sie unter Invoking your private API using private DNS names.

Für einen Route-53-Alias

Führen Sie folgenden Befehl aus:

curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name

**Hinweis:**Ersetzen Sie a1bc234d5e durch die ID Ihrer API, vpce-1a2b3c456d7e89012 durch die Schnittstellenendpunkt-ID und region durch die Region Ihrer API. Ersetzen Sie stage-name durch den Namen der Stufe, auf der Sie Ihre private API bereitgestellt haben. Weitere Informationen finden Sie unter Accessing your private API using a Route53 alias.

Für einen öffentlichen DNS-Namen mit einem Host-Header

Führen Sie folgenden Befehl aus:

curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"

**Hinweis:**Ersetzen Sie vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com durch den öffentlichen DNS-Namen Ihres Schnittstellenendpunkts und stage-name durch den Namen der Stufe, auf der Sie Ihre private API bereitgestellt haben.Ersetzen Sie a1bc234d5e.execute-api.region.amazonaws.com durch die Aufruf-URL Ihrer privaten API.

Für einen öffentlichen DNS-Namen mit dem x-apigw-api-id-Header

Führen Sie folgenden Befehl aus:

curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e"

**Hinweis:**Ersetzen Sie vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com durch den öffentlichen DNS-Namen Ihres Schnittstellenendpunkts und stage-name durch den Namen der Stufe, auf der Sie Ihre private API bereitgestellt haben.Ersetzen Sie a1bc234d5e durch die ID Ihrer API.

4.Überprüfen Sie die Befehlsausgabe. API Gateway gibt eine 200-OK-Antwort zurück, wenn die Verbindung erfolgreich hergestellt wurde.

Verwandte Informationen

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

Access an AWS service using an interface VPC endpoint

Multi-Region private API gateway