Privaten API in Amazon API Gateway erstellen - Amazon API Gateway

Privaten API in Amazon API Gateway erstellen

Mit Amazon API Gateway können Sie private REST-APIs erstellen, auf die nur von Ihrer Virtual Private Cloud in Amazon VPC aus zugegriffen werden kann, indem Sie einen Schnittstellen-VPC-Endpunkt verwenden. Dies ist eine Endpunkt-Netzwerkschnittstelle, die Sie in Ihrer VPC erstellen.

Mithilfe von Ressourcen-Richtlinien können Sie den Zugriff auf Ihre API von aus ausgewählten VPCs und VPC-Endpunkten erlauben oder verweigern, darunter auch über AWS-Konten. Jeder Endpunkt kann für den Zugriff auf mehrere APIs verwendet werden. Sie können mit AWS Direct Connect auch eine Verbindung von einem On-Premises-Netzwerk zu Amazon VPC herstellen und über diese Verbindung auf Ihre private API zugreifen.

Wichtig

Um den Zugriff auf Ihre private API auf bestimmte VPCs und VPC-Endpunkte zu beschränken, müssen Sie der Ressourcenrichtlinie Ihrer API aws:SourceVpc- und aws:SourceVpce-Bedingungen hinzufügen. Beispiele für Richtlinien finden Sie unter Beispiel: Erlauben von privatem API-Datenverkehr basierend auf der Quell-VPC oder dem VPC-Endpunkt.

In allen Fällen verwendet der Datenverkehr zu Ihrer privaten API eine sichere Verbindung und verlässt nicht das Amazon-Netzwerk. Er ist vom öffentlichen Internet isoliert.

Sie können über Schnittstellen-VPC-Endpunkte für API Gateway auf Ihre privaten APIs zugreifen zugreifen. Sies ist in der folgenden Abbildung dargestellt. Wenn das private DNS aktiviert ist, können Sie mit privaten oder öffentlichen DNS-Namen auf Ihre APIs zugreifen. Wenn das private DNS deaktiviert ist, können Sie nur öffentliche DNS-Namen verwenden.

Anmerkung

Private API Gateway-APIs unterstützen nur TLS 1.2. Frühere TLS-Versionen werden nicht unterstützt.


            Zugreifen auf die private API mit aktiviertem privatem DNS

Auf hoher Ebene wird eine private API mit den folgenden Schritten erstellt:

  1. Erstellen Sie zunächst einen Schnittstellen-VPC-Endpunkt für den API Gateway-Komponenten-Service für die API-Ausführung (execute-api) in Ihrer VPC.

  2. Erstellen und testen Sie Ihre private API.

    1. Erstellen Sie Ihre API mit einem der folgenden Verfahren:

    2. Um Zugriff auf Ihren VPC-Endpunkt zu gewähren, erstellen Sie eine Ressourcenrichtlinie und fügen Sie sie an Ihre API an.

    3. Testen Sie Ihre API.

Anmerkung

Im folgenden Verfahren wird davon ausgegangen, dass Sie bereits über eine vollständig konfigurierte VPC verfügen. Weitere Informationen und erste Schritte zur Erstellung einer VPC finden Sie unter Erste Schritte mit Amazon VPC im Amazon VPC-Benutzerhandbuch.

Überlegungen zur Entwicklung privater APIs

  • Sie können eine vorhandene öffentliche API (regional oder Edge-optimiert) in eine private API und eine private API in eine regionale API konvertieren. Sie können keine private API in eine Edge-optimierte API konvertieren. Weitere Informationen finden Sie unter Öffentlichen oder privaten API-Endpunkttyp in API Gateway ändern.

  • Um VPCs und VPC-Endpunkten Zugriff auf Ihre private API gewähren zu können, müssen Sie eine Ressourcenrichtlinie erstellen und sie an die neu erstellte (oder konvertierte) API anfügen. Solange dies nicht geschieht, schlagen alle Aufrufe der API fehl. Weitere Informationen finden Sie unter Einrichten einer Ressourcenrichtlinie für eine private API.

  • Benutzerdefinierte Domänennamen werden für private APIs nicht unterstützt.

  • Sie können über einen einzelnen VPC-Endpunkt auf mehrere private APIs zugreifen.

  • Für VPC-Endpunkte für private APIs gelten die gleichen Einschränkungen wie für andere Schnittstellen-VPC-Endpunkte. Weitere Informationen finden Sie unter Schnittstellenendpunkteigenschaften und -beschränkungen im Amazon VPC-Benutzerhandbuch.

  • Sie können einen VPC-Endpunkt einer REST-API zuordnen oder die Zuordnung aufheben, wodurch ein Route 53-Alias-DNS-Datensatz bereitgestellt wird und das Aufrufen Ihrer privaten API vereinfacht wird. Weitere Informationen finden Sie unter Zuordnen oder Aufheben der Zuordnung eines VPC-Endpunkts zu einer privaten REST-API.

Schnittstellen-VPC-Endpunkt für API Gateway erstelle execute-api

Der API Gateway-Komponenten-Service für die API-Ausführung heißt execute-api. Um auf Ihre private API zuzugreifen, nachdem sie bereitgestellt wurde, müssen Sie für sie einen Schnittstellen-VPC-Endpunkt in Ihrer VPC erstellen.

Nachdem Sie Ihren VPC-Endpunkt erstellt haben, können Sie ihn verwenden, um auf mehrere private APIs zuzugreifen.

So erstellen Sie einen Schnittstellen-VPC-Endpunkt für API Gateway execute-api
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon-VPC-Konsole unter https://console.aws.amazon.com/vpc/.

  2. Wählen Sie im Navigationsbereich Endpoints und klicken Sie auf Create Endpoint.

  3. Stellen Sie sicher, dass für Servicekategorie die Option AWS-Services ausgewählt ist.

  4. Wählen Sie für Servicename den API-Gateway-Service-Endpunkt einschließlich der AWS-Region aus, mit dem Sie eine Verbindung herstellen möchten. Sie verwenden dazu das Format com.amazonaws.region.execute-api, z. B. com.amazonaws.us-east-1.execute-api.

    Stellen Sie sicher, dass für Type die Option Interface angegeben ist.

  5. Machen Sie die folgenden Angaben:

    • Wählen Sie für VPC die VPC aus, in der Sie den Endpunkt erstellen möchten.

    • Wählen Sie für Subnets Subnetze (Availability Zones) aus, in denen die Endpunktnetzwerkschnittstellen erstellt werden sollen. Zur Verbesserung der Verfügbarkeit Ihrer API wählen Sie mehrere Subnetze aus.

      Anmerkung

      Möglicherweise werden nicht alle Availability Zones für alle AWS-Services unterstützt.

    • Belassen Sie das Kontrollkästchen für Enable Private DNS Name (Namen eines privaten DNS aktivieren) aktiviert. Die Option für ein privates DNS ist standardmäßig aktiviert.

      Wenn die Option für ein privates DNS aktiviert ist, können Sie über ein privates oder ein öffentliches DNS auf Ihre API zugreifen. (Diese Einstellung bestimmt nicht, wer auf Ihre API zugreifen kann, sondern welche DNS-Adressen verwendet werden können.) Sie können jedoch von einer VPC aus nicht auf öffentliche APIs zugreifen, wenn Sie einen API Gateway-VPC-Endpunkt mit aktiviertem privaten DNS verwenden. Beachten Sie, dass diese DNS-Einstellungen sich nicht auf die Möglichkeit zum Aufrufen dieser öffentlichen APIs aus der VPC auswirken, wenn Sie über einen Edge-optimierten benutzerdefinierten Domänennamen auf die öffentliche API zugreifen. Die Verwendung eines Edge-optimierten benutzerdefinierten Domänennamens für den Zugriff auf Ihre öffentliche API (bei Verwendung eines privaten DNS zum Zugriff auf Ihre private API) ist eine Möglichkeit für den Zugriff sowohl auf öffentliche als auch auf private APIs aus einer VPC, in der der Endpunkt mit aktiviertem privatem DNS erstellt wurde.

      Anmerkung

      Die Option eines privaten DNS aktiviert zu belassen, ist die empfohlene Vorgehensweise. Wenn Sie das private DNS nicht aktivieren, können Sie nur über das öffentliche DNS auf Ihre API zugreifen.

      Zur Verwendung der optionalen Option eines privaten DNS müssen die Attribute enableDnsSupport und enableDnsHostnames der VPC auf true eingestellt sein. Weitere Informationen finden Sie unter DNS Support in Ihrer VPC und DNS Support für Ihre VPC aktualisieren im Amazon VPC-Benutzerhandbuch.

    • Wählen Sie für Security group (Sicherheitsgruppe) die Sicherheitsgruppe aus, die den VPC-Endpunktnetzwerkschnittstellen zugeordnet werden soll.

      Die von Ihnen ausgewählte Sicherheitsgruppe muss so konfiguriert sein, dass eingehender HTTPS-Datenverkehr über TCP-Port 443 von einem IP-Adressbereich in Ihrer VPC oder einer anderen Sicherheitsgruppe in Ihrer VPC zugelassen wird.

  6. Wählen Sie Create endpoint.

Private API über die API Gateway-Konsole erstellen

So erstellen Sie eine private API mit der API-Gateway-Konsole:
  1. Melden Sie sich bei der API-Gateway-Konsole unter https://console.aws.amazon.com/apigateway an.

  2. Wählen Sie Create API (API erstellen) aus.

  3. Wählen Sie unter REST-API die Option Build (Erstellen) aus.

  4. Geben Sie für API Name (API-Name) einen Namen ein.

  5. Wählen Sie für Endpoint Type (Endpunkttyp) Private aus.

  6. Wählen Sie Create API (API erstellen) aus.

Ab diesem Punkt können Sie API-Methoden und deren zugehörige Integrationen wie in den Schritten 1-6 bis beschrieben einrichte Erstellen einer API mit benutzerdefinierter HTTP-Integration.

Anmerkung

Solange Ihre API-Ressource über keine Ressourcen-Richtlinie verfügt, die Zugriff auf Ihre VPC oder Ihren VPC-Endpunkt gewährt, schlagen alle API-Aufrufe fehl. Bevor Sie Ihre API testen und bereitstellen, müssen Sie eine Ressourcenrichtlinie erstellen und wie in beschrieben an die API anhänge Einrichten einer Ressourcenrichtlinie für eine private API.

Erstellen einer privaten API mithilfe der AWS CLI

Um eine private API mithilfe der AWS CLI zu erstellen, rufen Sie den Befehl create-rest-api auf:

aws apigateway create-rest-api \ --name 'Simple PetStore (AWS CLI, Private)' \ --description 'Simple private PetStore API' \ --region us-west-2 \ --endpoint-configuration '{ "types": ["PRIVATE"] }'

Bei einem erfolgreichen Aufruf sieht die zurückgegebene Ausgabe in etwa wie folgt aus:

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Simple private PetStore API", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (AWS CLI, Private)" }

Ab diesem Punkt können Sie die Anleitung unter Einrichten einer Edge-optimierten API mit AWS CLI-Befehlen befolgen, um Methoden und Integrationen für diese API einzurichten.

Wenn Sie zum Testen Ihrer API bereit sind, müssen Sie eine Ressourcenrichtlinie erstellen und sie wie unter beschrieben an die API anhänge Einrichten einer Ressourcenrichtlinie für eine private API.

Erstellen einer privaten API über das AWS SDK für JavaScript

So erstellen Sie eine private API mithilfe des AWS SDK für JavaScript:

apig.createRestApi({ name: "Simple PetStore (node.js SDK, private)", endpointConfiguration: { types: ['PRIVATE'] }, description: "Demo private API created using the AWS SDK for node.js", version: "0.00.001" }, function(err, data){ if (!err) { console.log('Create API succeeded:\n', data); restApiId = data.id; } else { console.log('Create API failed:\n', err); } });

Bei einem erfolgreichen Aufruf sieht die zurückgegebene Ausgabe in etwa wie folgt aus:

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Demo private API created using the AWS SDK for node.js", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (node.js SDK, private)" }

Nachdem Sie die vorherigen Schritte abgeschlossen haben, können Sie die Anleitung unter Einrichten einer Edge-optimierten API mit dem AWS SDK for Node.js befolgen, um Methoden und Integrationen für diese API einzurichten.

Wenn Sie zum Testen Ihrer API bereit sind, müssen Sie eine Ressourcenrichtlinie erstellen und sie wie unter beschrieben an die API anhänge Einrichten einer Ressourcenrichtlinie für eine private API.

Einrichten einer Ressourcenrichtlinie für eine private API

Bevor auf Ihre private API zugegriffen werden kann, müssen Sie eine Ressourcenrichtlinie erstellen und sie an die API anfügen. Dadurch wird Zugriff auf die API von Ihren VPCs und VPC-Endpunkten oder von VPCs und VPC-Endpunkten in anderen AWS-Konten gewährt, denen Sie explizit Zugriff gewähren.

Befolgen Sie hierzu die Anweisungen unter API Gateway-Ressourcenrichtlinie erstellen und an eine API anhängen. Wählen Sie in Schritt 4 das Quell-VPC-Beispiel aus. Ersetzen Sie {{vpceID}} (einschließlich der geschweiften Klammern) durch Ihre VPC-Endpunkt-ID und wählen Sie dann Save (Speichern), um Ihre Ressourcenrichtlinie zu speichern.

Außerdem sollten Sie das Anfügen einer Endpunktrichtlinie an den VPC-Endpunkt in Betracht ziehen, um den Zugriff anzugeben, der gewährt wird. Weitere Informationen finden Sie unter VPC-Endpunktrichtlinien für private APIs in API Gateway verwenden.

Private API mit der API Gateway-Konsole bereitstellen

Um Ihre private API bereitzustellen, gehen Sie in der API Gateway-Konsole wie folgt vor:

  1. Wählen Sie im linken Navigationsbereich die API and danach Deploy API (API bereitstellen) im Dropdown-Menü Actions (Aktionen) aus.

  2. Wählen Sie im Dialogfeld API bereitstellen eine Stufe (oder [New Stage] für die erste Bereitstellung der API) aus. Geben Sie einen Namen (z. B. "test", "prod" oder "dev") in das Eingabefeld Stufenname ein. Geben Sie optional eine Beschreibung in Beschreibung der Stufe und/oder Beschreibung der Bereitstellung an. Wählen Sie dann Deploy (Bereitstellen) aus.

Zuordnen oder Aufheben der Zuordnung eines VPC-Endpunkts zu einer privaten REST-API

Wenn Sie einen VPC-Endpunkt mit Ihrer privaten API verknüpfen, generiert API Gateway einen neuen Route 53-ALIAS-DNS-Eintrag. Sie können diesen Datensatz verwenden, um Ihre privaten APIs genauso wie Ihre Edge-optimierten oder regionalen APIs aufzurufen, ohne einen Host-Header zu überschreiben oder einen x-apigw-api-id-Header zu übergeben.

Die generierte Basis-URL liegt im folgenden Format vor:

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}

Beim Zuordnen oder Aufheben der Zuordnung eines VPC-Endpunkt zu einer privaten REST-API müssen Sie die Konfiguration der API aktualisieren. Sie können diese Änderung über die API-Gateway-Konsole, die AWS-CLI oder ein AWS SDK für API Gateway vornehmen. Der Aktualisierungsvorgang kann aufgrund der DNS-Verbreitung einige Minuten dauern. Während dieser Zeit ist Ihre API verfügbar, aber die DNS-Verbreitung für die neu generierten DNS-URLs wird möglicherweise noch ausgeführt. Sie können versuchen, eine neue Bereitstellung für Ihre API zu erstellen, wenn Ihre neuen URLs auch nach einigen Minuten nicht in DNS aufgelöst werden.

Verwenden der AWS-CLI zum Zuordnen des VPC-Endpunkts zu einer privaten REST-API

Um VPC-Endpunkte zum Zeitpunkt der API-Erstellung zuzuordnen, verwenden Sie den folgenden Befehl:

aws apigateway create-rest-api \ --name Petstore \ --endpoint-configuration '{ "types": ["PRIVATE"], "vpcEndpointIds" : ["vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee"] }' \ --region us-west-2

Die Ausgabe sieht wie folgt aus:

{ "apiKeySource": "HEADER", "endpointConfiguration": { "types": [ "PRIVATE" ], "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee" ] }, "id": "u67n3ov968", "createdDate": 1565718256, "name": "Petstore" }

Um VPC-Endpunkte einer bereits erstellten privaten API zuzuordnen, verwenden Sie den folgenden CLI-Befehl:

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'" \ --region us-west-2

Die Ausgabe sieht wie folgt aus:

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }

Verwenden der AWS-CLI zum Aufheben der Zuordnung des VPC-Endpunkts zu einer privaten REST-API

Verwenden Sie den folgenden CLI-Befehl, um die Zuordnung eines VPC-Endpunkts zu einer privaten API aufzuheben:

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='remove',path='/endpointConfiguration/vpcEndpointIds',value='vpce-0393a628149c867ee'" \ --region us-west-2

Die Ausgabe sieht wie folgt aus:

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }