BenutzenAWS AppSyncPrivate APIs - AWS AppSync

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

BenutzenAWS AppSyncPrivate APIs

Wenn Sie Amazon Virtual Private Cloud (Amazon VPC) verwenden, können Sie Folgendes erstellenAWS AppSyncPrivate APIs, also APIs, auf die nur von einer VPC aus zugegriffen werden kann. Mit einer privaten API können Sie den API-Zugriff auf Ihre internen Anwendungen einschränken und eine Verbindung zu Ihren GraphQL- und Realtime-Endpunkten herstellen, ohne Daten öffentlich zugänglich zu machen.

Um eine private Verbindung zwischen Ihrer VPC und dem herzustellenAWS AppSyncService, Sie müssen einen erstellenSchnittstelle VPC-Endpunkt. Schnittstellenendpunkte werden von AWS PrivateLink betrieben, sodass Sie privat ohne Internet-Gateway, NAT-Gerät, VPN-Verbindung oder AWS Direct Connect-Verbindung auf AWS AppSync-APIs zugreifen können. Die Instances in Ihrer VPC benötigen für die Kommunikation mit AWS AppSync-APIs keine öffentlichen IP-Adressen. Verkehr zwischen Ihrer VPC undAWS AppSyncverlässt nicht dieAWSNetzwerk.

Es gibt einige zusätzliche Faktoren, die Sie berücksichtigen sollten, bevor Sie die Funktionen der privaten API aktivieren:

  • Einrichtung von VPC-Schnittstellen-Endpunkten fürAWS AppSyncWenn private DNS-Funktionen aktiviert sind, wird verhindert, dass Ressourcen in der VPC andere aufrufen könnenAWS AppSyncöffentliche APIs, dieAWS AppSyncgenerierte API-URL. Dies liegt daran, dass die Anfrage an die öffentliche API über den Schnittstellenendpunkt weitergeleitet wird, was für öffentliche APIs nicht zulässig ist. Um in diesem Szenario öffentliche APIs aufzurufen, wird empfohlen, benutzerdefinierte Domainnamen auf öffentlichen APIs zu konfigurieren, die dann von Ressourcen in der VPC zum Aufrufen der öffentlichen API verwendet werden können.

  • IhrAWS AppSyncPrivate APIs sind nur in Ihrer VPC verfügbar. DieAWS AppSyncDer Konsolen-Abfrage-Editor kann nur dann auf Ihre API zugreifen, wenn die Netzwerkkonfiguration Ihres Browsers den Datenverkehr zu Ihrer VPC weiterleiten kann (z. B. Verbindung über VPN oder überAWS Direct Connect).

  • Mit einem VPC-Schnittstellen-Endpunkt fürAWS AppSync, Sie können auf jede private API in derselben zugreifenAWSKonto und Region. Um den Zugriff auf private APIs weiter einzuschränken, können Sie die folgenden Optionen in Betracht ziehen:

    • Stellen Sie sicher, dass nur die erforderlichen Administratoren VPC-Endpunktschnittstellen erstellen können fürAWS AppSync.

    • Verwenden von benutzerdefinierten VPC-Endpunktrichtlinien, um einzuschränken, welche APIs von Ressourcen in der VPC aufgerufen werden können.

    • Für Ressourcen in der VPC empfehlen wir, dass Sie zum Aufrufen die IAM-Autorisierung verwendenAWS AppSyncAPIs, indem Sie sicherstellen, dass den Ressourcen abgegrenzte Rollen für die APIs zugewiesen werden.

  • Wenn Sie Richtlinien erstellen oder verwenden, die IAM-Prinzipale einschränken, müssen Sie Folgendes festlegenauthorizationTypeder Methode aufAWS_IAModerNONE.

ErstellenAWS AppSyncPrivate APIs

Die folgenden Schritte zeigen Ihnen, wie Sie private APIs in der erstellenAWS AppSyncDienst.

Warnung

Sie können private API-Funktionen nur während der Erstellung der API aktivieren. Diese Einstellung kann nicht auf einem geändert werdenAWS AppSyncAPI oder einAWS AppSyncPrivate API, nachdem sie erstellt wurde.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die AppSync-Konsole.

    1. Wählen Sie im Dashboard Create API (API erstellen) aus.

  2. Wählen SieEntwerfen Sie eine API von Grund auf, dann wähleAls Nächstes.

  3. In derPrivate APIAbschnitt, wählenVerwenden Sie die Funktionen der privaten API.

  4. Konfigurieren Sie die restlichen Optionen, überprüfen Sie die Daten Ihrer API und wählen Sie dannErstellen.

Bevor du deine benutzen kannstAWS AppSyncPrivate API, Sie müssen einen Schnittstellenendpunkt konfigurieren fürAWS AppSyncin Ihrer VPC. Beachten Sie, dass sich sowohl die private API als auch die VPC in derselben befinden müssenAWSKonto und Region.

Erstellen eines Schnittstellenendpunkts fürAWS AppSync

Sie können einen Schnittstellenendpunkt erstellen fürAWS AppSyncentweder mit der Amazon VPC-Konsole oderAWS Command Line Interface(AWS CLI). Weitere Informationen finden Sie unter Erstellung eines Schnittstellenendpunkts im Benutzerhandbuch für Amazon VPC.

Console
  1. Loggen Sie sich ein inAWS Management Consoleund öffne dasEndpunkteSeite der Amazon VPC-Konsole.

  2. Wählen Sie Endpunkt erstellen.

    1. In derKategorie ServiceFeld, überprüfen Sie dasAWSDienstleistungenist ausgewählt.

    2. In derDienstleistungenTabelle, wählencom.amazonaws.{region}.appsync-api. Vergewissern Sie sich, dassGeben Sie einSpaltenwert istInterface.

    3. In derVPCFeld, wählen Sie eine VPC und ihre Subnetze aus.

    4. Um private DNS-Funktionen für den Schnittstellenendpunkt zu aktivieren, kreuzen Sie dasAktivieren Sie den DNS-NamenKontrollkästchen.

    5. In derSicherheitsgruppeFeld, wählen Sie eine oder mehrere Sicherheitsgruppen aus.

  3. Wählen Sie Endpunkt erstellen.

CLI

Verwenden Sie den create-vpc-endpoint-Befehl und geben Sie die VPC-ID an, den VPC-Endpunkttyp (Schnittstelle), den Servicenamen, die Subnetze, die den Endpunkt verwenden sollen, sowie die Sicherheitsgruppen, die den Endpunktnetzwerkschnittstellen zugeordnet werden sollen. Beispiele:

$ aws ec2 create-vpc-endpoint —vpc-id vpc-ec43eb89 \ —vpc-endpoint-type Interface \ —service-name com.amazonaws.{region}.appsync-api \ —subnet-id subnet-abababab —security-group-id sg-1a2b3c4d

Um die private DNS-Option zu verwenden, müssen Sie dieenableDnsHostnamesundenableDnsSupportattributesWerte Ihrer VPC. Weitere Informationen finden Sie unter Anzeigen und Aktualisieren der DNS-Unterstützung für Ihre VPC im Amazon-VPC-Benutzerhandbuch. Wenn Sie private DNS-Funktionen für den Schnittstellenendpunkt aktivieren, können Sie Anfragen an IhrenAWS AppSyncAPI GraphQL und Echtzeit-Endpunkt unter Verwendung seiner standardmäßigen öffentlichen DNS-Endpunkte im folgenden Format:

https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql

Weitere Informationen zu Dienstendpunkten finden Sie unterDienstendpunkte und Kontingentein derAWSAllgemeine Referenz.

Weitere Informationen zu Dienstinteraktionen mit Schnittstellenendpunkten finden Sie unterZugreifen auf einen Dienst über einen Schnittstellenendpunktin derAmazon VPC-Benutzerhandbuch.

Informationen zum Erstellen und Konfigurieren eines Endpunkts finden Sie unterAWS CloudFormation, sieheAWS:: EC2: :VPC-EndpunktRessource in derAWS CloudFormationBenutzerleitfaden.

Fortschrittliche -Beispiele

Wenn Sie private DNS-Funktionen für den Schnittstellenendpunkt aktivieren, können Sie Anfragen an IhreAWS AppSyncAPI GraphQL und Echtzeit-Endpunkt unter Verwendung seiner standardmäßigen öffentlichen DNS-Endpunkte im folgenden Format:

https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql

Unter Verwendung der öffentlichen DNS-Hostnamen des VPC-Endpunkts der Schnittstelle hat die Basis-URL zum Aufrufen der API das folgende Format:

https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql

Sie können auch den AZ-spezifischen DNS-Hostnamen verwenden, wenn Sie einen Endpunkt in der AZ bereitgestellt haben:

https://{vpc_endpoint_id}-{endpoint_dns_identifier}-{az_id}.appsync-api.{region}.vpce.amazonaws.com/graphql.

Für die Verwendung des öffentlichen DNS-Namens des VPC-Endpunkts ist Folgendes erforderlichAWS AppSyncDer Hostname des API-Endpunkts muss übergeben werden alsHostoder als x-appsync-domainHeader der Anfrage. Diese Beispiele verwenden aTodoAPIdas wurde erstellt inStarten Sie ein BeispielschemaLeitfaden:

curl https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -H "Host:{api_url_identifier}.appsync-api.{region}.amazonaws.com" \ -d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

In den folgenden Beispielen verwenden wirTodoApp, die generiert wird inStarten Sie ein BeispielschemaLeitfaden. Um die Todo-Beispiel-API zu testen, werden wir das Private DNS verwenden, um die API aufzurufen. Sie können jedes Befehlszeilentool Ihrer Wahl verwenden. In diesem Beispiel wirdLockenum Anfragen und Mutationen zu senden undwscatum Abonnements einzurichten. Um unser Beispiel zu emulieren, ersetzen Sie die Werte in Klammern{ }in den folgenden Befehlen mit den entsprechenden Werten aus IhremAWSKonto.

Mutationsoperation testen —createTodoAnfrage

curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

Mutationsoperation testen —createTodoAntwort

{ "data": { "createTodo": { "id": "<todo-id>", "name": "My first GraphQL task", "where": "Day 1", "when": "Friday Night", "description": "Learn more about GraphQL" } } }

Der Abfragevorgang wird getestet —listTodosAnfrage

curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -d '{"query":"query ListTodos {\n listTodos {\n items {\n description\n id\n name\n when\n where\n }\n }\n}\n","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

Der Abfragevorgang wird getestet —listTodosAnfrage

{ "data": { "listTodos": { "items": [ { "description": "Learn more about GraphQL", "id": "<todo-id>", "name": "My first GraphQL task", "when": "Friday night", "where": "Day 1" } ] } } }

Testen des Abonnementbetriebs — AbonnierencreateTodoMutation

Um GraphQL-Abonnements einzurichten inAWS AppSync, sieheAufbau einer EchtzeitumgebungWebSocketKlient. Von einer Amazon EC2-Instance in einer VPC aus können Sie Ihre testenAWS AppSyncEndpunkt für ein privates API-Abonnement mitwscat. Das folgende Beispiel verwendet eineAPI KEYzur Autorisierung.

$ header=`echo '{"host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com","x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}"}' | base64 | tr -d '\n'` $ wscat -p 13 -s graphql-ws -c "wss://{api_url_identifier}.appsync-realtime-api.us-west-2.amazonaws.com/graphql?header=$header&payload=e30=" Connected (press CTRL+C to quit) > {"type": "connection_init"} < {"type":"connection_ack","payload":{"connectionTimeoutMs":300000}} < {"type":"ka"} > {"id":"f7a49717","payload":{"data":"{\"query\":\"subscription onCreateTodo {onCreateTodo {description id name where when}}\",\"variables\":{}}","extensions":{"authorization":{"x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}","host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com"}}},"type":"start"} < {"id":"f7a49717","type":"start_ack"}

Verwenden Sie alternativ den Domainnamen des VPC-Endpunkts und achten Sie darauf, Folgendes anzugebenHostKopfzeile imwscatBefehl zum Einrichten des Websockets:

$ header=`echo '{"host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com","x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}"}' | base64 | tr -d '\n'` $ wscat -p 13 -s graphql-ws -c "wss://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql?header=$header&payload=e30=" --header Host:{api_url_identifier}.appsync-realtime-api.us-west-2.amazonaws.com Connected (press CTRL+C to quit) > {"type": "connection_init"} < {"type":"connection_ack","payload":{"connectionTimeoutMs":300000}} < {"type":"ka"} > {"id":"f7a49717","payload":{"data":"{\"query\":\"subscription onCreateTodo {onCreateTodo {description id priority title}}\",\"variables\":{}}","extensions":{"authorization":{"x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}","host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com"}}},"type":"start"} < {"id":"f7a49717","type":"start_ack"}

Führen Sie den folgenden Mutationscode aus:

curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

Danach wird ein Abonnement ausgelöst und die Nachrichtenbenachrichtigung wird wie folgt angezeigt:

< {"id":"f7a49717","type":"data","payload":{"data":{"onCreateTodo":{"description":"Go to the shops","id":"169ce516-b7e8-4a6a-88c1-ab840184359f","priority":5,"title":"Go to the shops"}}}}

Verwendung von IAM-Richtlinien zur Beschränkung der Erstellung öffentlicher APIs

AWS AppSyncunterstützt IAMConditionAussagenzur Verwendung mit privaten APIs. DasvisibilityDas Feld kann in die IAM-Richtlinienerklärungen aufgenommen werden fürappsync:CreateGraphqlApiOperation zur Steuerung, welche IAM-Rollen und Benutzer private und öffentliche APIs erstellen können. Dies gibt einem IAM-Administrator die Möglichkeit, eine IAM-Richtlinie zu definieren, die es einem Benutzer nur ermöglicht, eine private GraphQL-API zu erstellen. Ein Benutzer, der versucht, eine öffentliche API zu erstellen, erhält eine nicht autorisierte Nachricht.

Ein IAM-Administrator könnte beispielsweise die folgende IAM-Richtlinienerklärung erstellen, um die Erstellung von privaten APIs zu ermöglichen:

{ "Sid": "AllowPrivateAppSyncApis", "Effect": "Allow", "Action": "appsync:CreateGraphqlApi", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "appsync:Visibility": "PRIVATE" } } }

Ein IAM-Administrator könnte auch Folgendes hinzufügenRichtlinie zur Dienststeuerungum alle Benutzer in einem zu blockierenAWSOrganisation von der ErstellungAWS AppSyncAndere APIs als private APIs:

{ "Sid": "BlockNonPrivateAppSyncApis", "Effect": "Deny", "Action": "appsync:CreateGraphqlApi", "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "appsync:Visibility": "PRIVATE" } } }