Erstellen einer privaten API - Amazon API Gateway

Erstellen einer privaten API

Bevor Sie eine private API erstellen, brauchen Sie zunächst einen VPC-Endpunkt für API Gateway. Als Nächstes erstellen Sie Ihre private API und fügen ihr eine Ressourcenrichtlinie hinzu. Optional können Sie Ihren VPC-Endpunkt mit Ihrer privaten API verknüpfen, um den Aufruf Ihrer API zu vereinfachen. Im letzten Schritt stellen Sie Ihre API bereit.

Die entsprechende Vorgehensweise wird nachfolgend beschrieben. Sie können eine private REST-API mithilfe der AWS Management Console, AWS CLI oder einem AWS-SDK erstellen.

Voraussetzungen

Sie brauchen eine vollständig konfigurierte VPC, um diese Schritte ausführen zu können. Informationen zum Erstellen einer VPC finden Sie unter Erstellen einer VPC im Amazon-VPC-Benutzerhandbuch. Aktivieren Sie ihr privates DNS, um allen empfohlenen Schritten für die Erstellung Ihrer VPC befolgen zu können. Auf diese Weise können Sie Ihre API innerhalb einer VPC aufrufen, ohne den Host oder den x-apigw-api-id-Header übergeben zu müssen.

Die Attribute enableDnsSupport und enableDnsHostnames Ihrer VPC müssen auf true gesetzt sein, um das private DNS aktivieren zu können. Weitere Informationen finden Sie unter DNS-Support für Ihre VPC und Aktualisieren des DNS-Supports für Ihre VPC.

Schritt 1: Erstellen eines VPC-Endpunkts für API Gateway in Ihrer VPC

Im Folgenden sehen Sie, wie Sie einen VPC-Endpunkt für API Gateway erstellen. Zum Erstellen eines VPC-Endpunkts für API Gateway geben Sie die execute-api-Domain für die AWS-Region an, in der Sie Ihre private API erstellen. Die execute-api-Domain is der API-Gateway-Komponenten-Service für die API-Ausführung.

Beim Erstellen des VPC-Endpunkts für API Gateway legen Sie auch die DNS-Einstellungen fest. Wenn Sie das private DNS deaktivieren, können Sie nur über ein öffentliches DNS auf Ihre API zugreifen. Weitere Informationen finden Sie unter Problem: Ich kann keine Verbindung zwischen einem API-Gateway-VPC-Endpunkt und meiner öffentlichen API herstellen.

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

  2. Wählen Sie im Navigationsmenü unter Virtual Private Cloud die Option Endpunkte.

  3. Wählen Sie Endpunkt erstellen aus.

  4. (Optional) Geben Sie für Name-Tag einen Namen ein, um Ihren VPC-Endpunkt zu identifizieren.

  5. Wählen Sie bei Service category (Servicekategorie) die Option AWS services (-Services) aus.

  6. Geben Sie im Suchfeld Services execute-api ein. Wählen Sie dann den API-Gateway-Service-Endpunkt in der AWS-Region aus, in der Sie Ihre API erstellen möchten. Der Dienstname sollte wie folgt aussehen: com.amazonaws.us-east-1.execute-api, und der Typ sollte Interface sein.

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

  8. (Optional) Wenn Sie Privaten DNS-Namen aktivieren deaktivieren wollen, wählen Sie Zusätzliche Einstellungen aus und löschen Sie den Feldinhalt für Privaten DNS-Namen aktivieren.

  9. Wählen Sie für Subnetze die Availability Zones aus, in denen Sie die Endnkt-Netzwerkschnittstellen für die Endpunkte erstellt haben. Zur Verbesserung der Verfügbarkeit Ihrer API wählen Sie mehrere Subnetze aus.

  10. 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.

  11. Führen Sie für Richtlinie einen der folgenden Schritte aus:

    • Wenn Sie Ihre private API nicht erstellt haben oder keine benutzerdefinierte VPC-Endpunktrichtlinie konfigurieren möchten, wählen Sie Vollzugriff aus.

    • Wenn Sie bereits eine private API erstellt haben und eine benutzerdefinierte VPC-Endpunktrichtlinie konfigurieren möchten, geben Sie eine benutzerdefinierte VPC-Endpunktrichtlinie ein. Weitere Informationen finden Sie unter VPC-Endpunktrichtlinien für private APIs in API Gateway verwenden.

    Sie können die VPC-Endpunktrichtlinie nach dem Erstellen des VPC-Endpunkts aktualisieren. Weitere Informationen finden Sie unter Aktualisieren einer VPC-Endpunktrichtlinie.

  12. Wählen Sie Endpunkt erstellen aus.

  13. Kopieren Sie die resultierende VPC-Endpunkt-ID, da Sie sie u. U. bei späteren Schritten noch brauchen werden.

AWS CLI

Der Befehl create-vpc-endpoint kann zum Erstellen eines VPC-Endpunkts verwendet werden:

aws ec2 create-vpc-endpoint \ --vpc-id vpc-1a2b3c4d \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.execute-api \ --subnet-ids subnet-7b16de0c \ --security-group-id sg-1a2b3c4d

Kopieren Sie die resultierende VPC-Endpunkt-ID, da Sie sie u. U. bei späteren Schritten noch brauchen werden.

Schritt 2: Erstellen einer privaten API

Nachdem Sie Ihren VPC-Endpunkt erstellt haben, erstellen Sie nun eine private REST-API. Im folgenden Verfahren sehen Sie, wie Sie eine private API erstellen.

AWS Management Console
Erstellen einer privaten API
  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 unter Name einen Namen ein.

  5. (Optional) Geben Sie unter Description (Beschreibung) eine Beschreibung ein.

  6. Wählen Sie für API endpoint type (API-Endpunkttyp) die Option Private (Privat) aus.

  7. (Optional) Geben Sie eine VPC-Endpunkt-ID unter VPC-Endpunkt-IDs ein.

    Wenn Sie Ihrer privaten API eine VPC-Endpunkt-ID zuordnen, können Sie Ihre API von Ihrer VPC aus aufrufen, ohne einen Host-Header zu überschreiben oder einen x-apigw-api-id header zu übergeben. Weitere Informationen finden Sie unter (Optional) Zuordnen oder Aufheben der Zuweisung eines VPC-Endpunkts zu einer privaten API.

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

Nachdem Sie die Schritte oben abgeschlossen haben, können Sie der Anleitung unter Erste Schritte mit der REST-API-Konsole folgen, um Methoden und Integrationen für diese API einzurichten - Sie können die API jedoch noch nicht bereitstellen. Zur Bereitstellung Ihrer API folgen Sie Schritt 3 und fügen Ihrer API eine Ressourcenrichtlinie hinzu.

AWS CLI

Der folgende Befehl create-rest-api demonstriert das Erstellen einer privaten API:

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)" }

Nachdem Sie die Schritte oben abgeschlossen haben, können Sie der Anleitung unter Tutorial: Erstellen einer REST-API mithilfe von AWS-SDKs oder AWS CLI folgen, um Methoden und Integrationen für diese API einzurichten - Sie können die API jedoch noch nicht bereitstellen. Zur Bereitstellung Ihrer API folgen Sie Schritt 3 und fügen Ihrer API eine Ressourcenrichtlinie hinzu.

SDK JavaScript v3

Im folgenden Beispiel sehen Sie, wie man eine private API mithilfe des AWS-SDK für JavaScript v3 erstellt:

import {APIGatewayClient, CreateRestApiCommand} from "@aws-sdk/client-api-gateway"; const apig = new APIGatewayClient({region:"us-east-1"}); const input = { // CreateRestApiRequest name: "Simple PetStore (JavaScript v3 SDK, private)", // required description: "Demo private API created using the AWS SDK for JavaScript v3", version: "0.00.001", endpointConfiguration: { // EndpointConfiguration types: [ "PRIVATE"], }, }; export const handler = async (event) => { const command = new CreateRestApiCommand(input); try { const result = await apig.send(command); console.log(result); } catch (err){ console.error(err) } };

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

{ apiKeySource: 'HEADER', createdDate: 2024-04-03T17:56:36.000Z, description: 'Demo private API created using the AWS SDK for JavaScript v3', disableExecuteApiEndpoint: false, endpointConfiguration: { types: [ 'PRIVATE' ] }, id: 'abcd1234', name: 'Simple PetStore (JavaScript v3 SDK, private)', rootResourceId: 'efg567', version: '0.00.001' }

Nachdem Sie die Schritte oben abgeschlossen haben, können Sie der Anleitung unter Tutorial: Erstellen einer REST-API mithilfe von AWS-SDKs oder AWS CLI folgen, um Methoden und Integrationen für diese API einzurichten - Sie können die API jedoch noch nicht bereitstellen. Zur Bereitstellung Ihrer API folgen Sie Schritt 3 und fügen Ihrer API eine Ressourcenrichtlinie hinzu.

Python SDK

Im folgenden Beispiel sehen Sie, wie man eine private API mithilfe des AWS-SDK für Python erstellt:

import json import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') def lambda_handler(event, context): try: result = apig.create_rest_api( name='Simple PetStore (Python SDK, private)', description='Demo private API created using the AWS SDK for Python', version='0.00.001', endpointConfiguration={ 'types': [ 'PRIVATE', ], }, ) except botocore.exceptions.ClientError as error: logger.exception("Couldn't create private API %s.", error) raise attribute=["id", "name", "description", "createdDate", "version", "apiKeySource", "endpointConfiguration"] filtered_data ={key:result[key] for key in attribute} result = json.dumps(filtered_data, default=str, sort_keys='true') return result

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

"{\"apiKeySource\": \"HEADER\", \"createdDate\": \"2024-04-03 17:27:05+00:00\", \"description\": \"Demo private API created using the AWS SDK for \", \"endpointConfiguration\": {\"types\": [\"PRIVATE\"]}, \"id\": \"abcd1234\", \"name\": \"Simple PetStore (Python SDK, private)\", \"version\": \"0.00.001\"}"

Nachdem Sie die Schritte oben abgeschlossen haben, können Sie der Anleitung unter Tutorial: Erstellen einer REST-API mithilfe von AWS-SDKs oder AWS CLI folgen, um Methoden und Integrationen für diese API einzurichten - Sie können die API jedoch noch nicht bereitstellen. Zur Bereitstellung Ihrer API folgen Sie Schritt 3 und fügen Ihrer API eine Ressourcenrichtlinie hinzu.

Schritt 3: Einrichten einer Ressourcenrichtlinie für eine private API

Ihre aktuelle private API ist für alle VPCs unerreichbar. Verwenden Sie eine Ressourcenrichtlinie, um Ihren VPCs und VPC-Endpunkten Zugriff auf Ihre privaten APIs zu gewähren. Sie können für jedes AWS-Konto Zugriff auf einen VPC-Endpunkt gewähren.

Ihre Ressourcenrichtlinie sollte aws:SourceVpc- oder aws:SourceVpce-Bedingungen für Zugriffsbeschränkungen enthalten. Wir empfehlen, dass Sie bestimmte VPCs und VPC-Endpunkte vorgeben und keine Ressourcenrichtlinie erstellen, die allen VPCs und VPC-Endpunkten den Zugriff gewährt.

Im folgenden Verfahren sehen Sie, wie Sie eine Ressourcenrichtlinie an Ihre API anfügen.

AWS Management Console
  1. Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway an.

  2. Wählen Sie eine REST-API aus.

  3. Wählen Sie im Hauptnavigationsbereich Ressourcenrichtlinie.

  4. Wählen Sie Richtlinie erstellen aus.

  5. Wählen Sie Vorlage auswählen und dann Quell-VPC aus.

  6. Ersetzen Sie {{vpceID}} (einschließlich der geschweiften Klammern) durch Ihre VPC-Endpunkt-ID.

  7. Wählen Sie Änderungen speichern.

AWS CLI

Der folgende Befehl update-rest-api zeigt, wie Sie eine Ressourcenrichtlinie an eine vorhandene API anfügen:

aws apigateway update-rest-api \ --rest-api-id a1b2c3 \ --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'

Sie sollten u. U. auch vorgeben, welche Ressourcen Zugriff auf Ihren VPC-Endpunkt haben sollen. Verbinden Sie eine VPC-Endpunktrichtlinie mit Ihrem VPC-Endpunkt, um festzulegen, welche Ressourcen Zugriff auf Ihren VPC-Endpunkt haben sollen. Weitere Informationen finden Sie unter VPC-Endpunktrichtlinien für private APIs in API Gateway verwenden.

(Optional) Zuordnen oder Aufheben der Zuweisung eines VPC-Endpunkts zu einer privaten API

Wenn Sie einen VPC-Endpunkt mit Ihrer privaten API verknüpfen, generiert API Gateway einen neuen Route-53-ALIAS-DNS-Eintrag. Mit diesem Datensatz rufen Sie Ihre privaten APIs auf dieselbe Weise wie Ihre Edge-optimierten oder regionalen APIs auf, 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}
Associate a VPC endpoint (AWS Management Console)

Sie können Ihrer privaten API bei oder nach der Erstellung einen VPC-Endpunkt zuordnen. Im folgenden Verfahren sehen Sie, wie Sie einen VPC-Endpunkt mit einer zuvor erstellten API verknüpfen.

Zuordnen eines VPC-Endpunkts zu einer privaten API
  1. Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway an.

  2. Wählen Sie Ihre private API aus.

  3. Wählen Sie im Hauptnavigationsbereich Ressourcenrichtlinie.

  4. Bearbeiten Sie Ihre Ressourcenrichtlinie, um Anrufe von Ihrem zusätzlichen VPC-Endpunkt zuzulassen.

  5. Wählen Sie im Hauptnavigationsbereich API-Einstellungen.

  6. Wählen Sie im Abschnitt API-Details die Option Bearbeiten aus.

  7. Wählen Sie für VPC-Endpunkt-IDs zusätzliche VPC-Endpunkt-IDs aus.

  8. Wählen Sie Save (Speichern) aus.

  9. Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden.

Dissociate a VPC endpoint (AWS Management Console)
Die Zuordnung eines VPC-Endpunkts zu einer privaten REST-API entfernen
  1. Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway an.

  2. Wählen Sie Ihre private API aus.

  3. Wählen Sie im Hauptnavigationsbereich Ressourcenrichtlinie.

  4. Bearbeiten Sie Ihre Ressourcenrichtlinie, um Erwähnungen des VPC-Endpunkts zu entfernen, den Sie von Ihrer privaten API trennen möchten.

  5. Wählen Sie im Hauptnavigationsbereich API-Einstellungen.

  6. Wählen Sie im Abschnitt API-Details die Option Bearbeiten aus.

  7. Für VPC-Endpunkt-IDs klicken Sie auf das X, um den VPC-Endpunkt zu trennen.

  8. Wählen Sie Save (Speichern) aus.

  9. Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden.

Associate a VPC endpoint (AWS CLI)

Der Befehl create-rest-api zeigt, wie Sie VPC-Endpunkte einer APIs zum Zeitpunkt der Erstellung zuordnen:

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" }

Der Befehl update-rest-api zeigt, wie Sie VPC-Endpunkte einer API zuordnen, die Sie bereits erstellt haben:

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" }

Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden.

Disassociate a VPC endpoint (AWS CLI)

Der Befehl update-rest-api zeigt, wie Sie die Zuweisung eines VPC-Endpunkts zu einer privaten API entfernen:

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" }

Sie müssen Ihre API erneut bereitstellen, damit die Änderungen wirksam werden.

Schritt 4: Bereitstellen einer privaten API

Erstellen Sie eine API-Bereitstellung und verknüpfen sie mit einer Stufe. Im folgenden Verfahren sehen Sie, wie Sie Ihre private API bereitstellen.

AWS Management Console
Bereitstellen einer privaten API
  1. Wählen Sie Ihre API aus.

  2. Klicken Sie auf Deploy API.

  3. Wählen Sie für Stufe die Option Neue Stufe aus.

  4. Geben Sie unter Stage name (Stufenname) einen Namen für die Stufe ein.

  5. (Optional) Geben Sie unter Description (Beschreibung) eine Beschreibung ein.

  6. Wählen Sie Bereitstellen.

AWS CLI

Der folgende Befehl create-deployment zeigt, wie Sie eine private API bereitstellen:

aws apigateway create-deployment --rest-api-id a1b2c3 \ --stage-name test \ --stage-description 'Private API test stage' \ --description 'First deployment'

Fehlerbehebung für Ihre private API

Im Folgenden finden Sie Hinweise zur Fehlerbehebung bei Fehlern und Problemen, die bei der Erstellung einer privaten API auftreten können.

Problem: Ich kann keine Verbindung zwischen einem API-Gateway-VPC-Endpunkt und meiner öffentlichen API herstellen

Beim Erstellen Ihrer VPC haben Sie die Möglichkeit, die DNS-Einstellungen zu konfigurieren. Wir empfehlen, Ihr privates DNS für Ihre VPC zu aktivieren. Wenn Sie das private DNS deaktivieren, ist ein Zugriff auf Ihr API nur über das öffentliche DNS möglich.

Wenn Sie Ihr privates DNS aktivieren, können Sie von Ihrem VPC-Endpunkt aus nicht auf den Standardendpunkt einer öffentlichen API-Gateway-API zugreifen. Sie können auf eine API mit einem benutzerdefinierten Domainnamen zugreifen.

Wenn Sie einen benutzerdefinierten regionalen Domainnamen erstellen, verwenden Sie einen Aliaseintrag vom Typ A. Wenn Sie einen Edge-optimierten benutzerdefinierten Domainnamen erstellen, bestehen keine Einschränkungen für Ihren Datensatztyp. Sie können auf diese öffentlichen APIs zugreifen, wenn Ihr privates DNS aktiviert ist. Weitere Informationen finden Sie unter Problem: Verbindungsaufbau mit meiner öffentlichen API von einem API-Gateway-VPC-Endpunkt.

Problem: Meine API gibt {"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:********/****/****/"} zurück

Wenn Sie in Ihrer Ressourcenrichtlinie den Prinzipal als AWS-Prinzipal festlegen, zum Beispiel:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", ""Principal": { "AWS": [ "arn:aws:iam::account-id:role/developer", "arn:aws:iam::account-id:role/Admin" ] }, "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ] }, ... }

Dann müssen Sie die AWS_IAM-Genehmigung für jede einzelne Methode in Ihrer API verwenden, andernfalls gibt Ihre API die o. g. Fehlermeldung zurück. Weitere Anweisungen zum Aktivieren der AWS_IAM-Genehmigung für eine Methode finden Sie unter REST-API-Methoden in API Gateway.

Problem: Ich bin mir nicht sicher, ob mein VPC-Endpunkt mit meiner API verknüpft ist

Wenn Sie einen VPC-Endpunkt mit Ihrer privaten API verknüpfen oder die Zuweisung aufheben, müssen Sie Ihre API erneut bereitstellen. 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. Wenn Ihre neuen URLs nach einigen Minuten nicht im DNS aufgelöst werden, empfehlen wir, Ihre API erneut bereitzustellen.