Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
UsandoAWS AppSyncAPI private
Se utilizzi Amazon Virtual Private Cloud (Amazon VPC), puoi creareAWS AppSyncAPI private, che sono API a cui è possibile accedere solo da un VPC. Con un'API privata, puoi limitare l'accesso dell'API alle tue applicazioni interne e connetterti agli endpoint GraphQL e Realtime senza esporre i dati pubblicamente.
Per stabilire una connessione privata tra il tuo VPC eAWS AppSyncservizio, è necessario creare uninterfaccia VPC, endpoint. Gli endpoint di interfaccia sono alimentati da AWS PrivateLink
Ci sono alcuni fattori aggiuntivi da considerare prima di abilitare le funzionalità dell'API privata:
-
Configurazione degli endpoint dell'interfaccia VPC perAWS AppSynccon le funzionalità DNS private abilitate impedirà alle risorse del VPC di richiamarne altreAWS AppSyncAPI pubbliche che utilizzanoAWS AppSyncURL API generato. Ciò è dovuto al fatto che la richiesta all'API pubblica viene instradata tramite l'endpoint dell'interfaccia, cosa non consentita per le API pubbliche. Per richiamare le API pubbliche in questo scenario, si consiglia di configurare nomi di dominio personalizzati su API pubbliche, che possono quindi essere utilizzate dalle risorse del VPC per richiamare l'API pubblica.
-
Il tuoAWS AppSyncLe API private saranno disponibili solo dal tuo VPC. IlAWS AppSyncconsole L'editor di query sarà in grado di raggiungere l'API solo se la configurazione di rete del browser è in grado di indirizzare il traffico verso il VPC (ad esempio, connessione tramite VPN o tramiteAWS Direct Connect).
-
Con un endpoint di interfaccia VPC perAWS AppSync, puoi accedere a qualsiasi API privata nella stessaAWSaccount e regione. Per limitare ulteriormente l'accesso alle API private, puoi prendere in considerazione le seguenti opzioni:
-
Garantire che solo gli amministratori necessari possano creare interfacce endpoint VPC perAWS AppSync.
-
Utilizzo di policy personalizzate per gli endpoint VPC per limitare le API che possono essere richiamate dalle risorse del VPC.
-
Per le risorse nel VPC, ti consigliamo di utilizzare l'autorizzazione IAM per richiamarleAWS AppSyncAPI assicurando che alle risorse vengano assegnati ruoli limitati alle API.
-
-
Quando si creano o si utilizzano policy che limitano i principi IAM, è necessario impostare il
authorizationType
del metodo aAWS_IAM
oNONE
.
CreareAWS AppSyncAPI private
I seguenti passaggi mostrano come creare API private inAWS AppSyncservizio.
avvertimento
È possibile abilitare le funzionalità dell'API privata solo durante la creazione dell'API. Questa impostazione non può essere modificata su unAWS AppSyncAPI o unAWS AppSyncAPI privata dopo la sua creazione.
-
Accedere alla AWS Management Console e aprire la console AppSync
. -
Nel pannello di controllo, scegliere Create API (Crea API).
-
-
ScegliProgetta un'API da zero, quindi scegliAvanti.
-
NelAPI privatasezione, scegliUsa le funzionalità dell'API privata.
-
Configura il resto delle opzioni, esamina i dati dell'API, quindi scegliCrea.
Prima di poter usare il tuoAWS AppSyncAPI privata, è necessario configurare un endpoint di interfaccia perAWS AppSyncnel tuo VPC. Tieni presente che sia l'API privata che il VPC devono trovarsi nello stessoAWSaccount e regione.
Creazione di un endpoint di interfaccia perAWS AppSync
È possibile creare un endpoint di interfaccia perAWS AppSyncutilizzando la console Amazon VPC o ilAWS Command Line Interface(AWS CLI). Per ulteriori informazioni, consulta Creazione di un endpoint di interfaccia nella Guida per l'utente di Amazon VPC.
Per utilizzare l'opzione DNS privato, è necessario impostareenableDnsHostnames
eenableDnsSupportattributes
valori del tuo VPC. Per ulteriori informazioni, consulta Visualizzazione e aggiornamento del supporto DNS per il VPC nella Guida per l'utente di Amazon VPC. Se abiliti le funzionalità DNS private per l'endpoint dell'interfaccia, puoi effettuare richieste alAWS AppSyncAPI GraphQL e Real-time endpoint che utilizzano gli endpoint DNS pubblici predefiniti utilizzando il formato seguente:
https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql
Per ulteriori informazioni sugli endpoint di servizio, consultaEndpoint e quote del servizionelAWSRiferimento generale.
Per ulteriori informazioni sulle interazioni dei servizi con gli endpoint di interfaccia, vedereAccesso a un servizio tramite un endpoint di interfaccianelGuida per l'utente di Amazon VPC.
Per informazioni sulla creazione e la configurazione di un endpoint utilizzandoAWS CloudFormation, consulta ilAWS::EC2: :VPCEndpointrisorsa inAWS CloudFormationGuida per l'utente.
Esempi avanzati
Se abiliti le funzionalità DNS private per l'endpoint dell'interfaccia, puoi effettuare richieste alAWS AppSyncAPI GraphQL e Real-time endpoint che utilizzano gli endpoint DNS pubblici predefiniti utilizzando il formato seguente:
https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql
Utilizzando i nomi di host DNS pubblici degli endpoint VPC dell'interfaccia, l'URL di base per richiamare l'API avrà il seguente formato:
https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql
Puoi anche utilizzare il nome host DNS specifico di AZ se hai distribuito un endpoint nell'AZ:
https://{vpc_endpoint_id}-{endpoint_dns_identifier}-{az_id}.appsync-api.{region}.vpce.amazonaws.com/graphql.
L'utilizzo del nome DNS pubblico dell'endpoint VPC richiederàAWS AppSyncNome host dell'endpoint API da passare comeHost
o come x-appsync-domain
intestazione della richiesta. Questi esempi utilizzano unTodoAPI
che è stato creato nelAvvia uno schema di esempioguida:
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"}}}'
Nei seguenti esempi, useremo ilTodoapp generata nelAvvia uno schema di esempioguida. Per testare l'API Todo di esempio, utilizzeremo il DNS privato per richiamare l'API. Puoi usare qualsiasi strumento da riga di comando di tua scelta; questo esempio usaarricciare{ }
nei comandi seguenti con i valori corrispondenti del tuoAWSconto.
Test dell'operazione di mutazione —createTodo
Richiesta
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"}}}'
Operazione di test della mutazione —createTodo
Risposta
{ "data": { "createTodo": { "id": "<todo-id>", "name": "My first GraphQL task", "where": "Day 1", "when": "Friday Night", "description": "Learn more about GraphQL" } } }
Test del funzionamento delle interrogazioni —listTodos
Richiesta
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"}}}'
Test del funzionamento delle interrogazioni —listTodos
Richiesta
{ "data": { "listTodos": { "items": [ { "description": "Learn more about GraphQL", "id": "<todo-id>", "name": "My first GraphQL task", "when": "Friday night", "where": "Day 1" } ] } } }
Test del funzionamento dell'abbonamento: abbonamento acreateTodo
mutazione
Per configurare gli abbonamenti GraphQL inAWS AppSync, vediCostruire un real-timeWebSocketcliente. Da un'istanza Amazon EC2 in un VPC, puoi testareAWS AppSyncEndpoint di abbonamento API privato utilizzandowscatAPI
KEY
per l'autorizzazione.
$ 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"}
In alternativa, usa il nome di dominio dell'endpoint VPC assicurandoti di specificareHostintestazione inwscat
comando per stabilire il websocket:
$ 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"}
Esegui il codice di mutazione seguente:
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"}}}'
Successivamente, viene attivato un abbonamento e la notifica del messaggio viene visualizzata come mostrato di seguito:
< {"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"}}}}
Utilizzo delle policy IAM per limitare la creazione di API pubbliche
AWS AppSyncsupporta IAMCondition
dichiarazionida utilizzare con API private. Lavisibility
il campo può essere incluso nelle dichiarazioni politiche IAM perappsync:CreateGraphqlApi
operazione per controllare quali ruoli e utenti IAM possono creare API pubbliche e private. Ciò offre a un amministratore IAM la possibilità di definire una policy IAM che consenta solo a un utente di creare un'API GraphQL privata. Un utente che tenta di creare un'API pubblica riceverà un messaggio non autorizzato.
Ad esempio, un amministratore IAM potrebbe creare la seguente dichiarazione di policy IAM per consentire la creazione di API private:
{ "Sid": "AllowPrivateAppSyncApis", "Effect": "Allow", "Action": "appsync:CreateGraphqlApi", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "appsync:Visibility": "PRIVATE" } } }
Un amministratore IAM potrebbe anche aggiungere quanto seguepolitica di controllo del servizioper bloccare tutti gli utenti in unAWSorganizzazione dalla creazioneAWS AppSyncAPI diverse dalle API private:
{ "Sid": "BlockNonPrivateAppSyncApis", "Effect": "Deny", "Action": "appsync:CreateGraphqlApi", "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "appsync:Visibility": "PRIVATE" } } }