Menggunakan AWS AppSync Private APIs - AWS AppSync GraphQL

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan AWS AppSync Private APIs

Jika Anda menggunakan Amazon Virtual Private Cloud (Amazon VPC), Anda dapat membuat AWS AppSync Private APIs, APIs yang hanya dapat diakses dari VPC. Dengan API Pribadi, Anda dapat membatasi akses API ke aplikasi internal Anda dan terhubung ke titik akhir GraphQL dan Realtime tanpa mengekspos data secara publik.

Untuk membuat koneksi pribadi antara VPC Anda dan AWS AppSync layanan, Anda harus membuat antarmuka VPC endpoint. Endpoint antarmuka didukung oleh AWS PrivateLink, yang memungkinkan Anda mengakses secara pribadi AWS AppSync APIs tanpa gateway internet, perangkat NAT, koneksi VPN, atau koneksi. AWS Direct Connect Instans di VPC Anda tidak memerlukan alamat IP publik untuk berkomunikasi. AWS AppSync APIs Lalu lintas antara VPC Anda dan AWS AppSync tidak meninggalkan jaringan. AWS

AWS AppSync mendukung AWS PrivateLink untuk operasi bidang data dan bidang kontrol:

  • Data plane endpoint (com.amazonaws.{region}.appsync-api): Menyediakan akses pribadi ke GraphQL Anda dan APIs Real-time untuk kueri, mutasi, dan langganan.

  • Control plane endpoint (com.amazonaws.{region}.appsync): Menyediakan akses pribadi ke operasi AWS AppSync manajemen seperti membuat APIs, memperbarui skema, dan mengonfigurasi sumber data.

AWS Cloud architecture showing VPC with public and private subnets connecting to AWS AppSync via PrivateLink.

Ada beberapa faktor tambahan yang perlu dipertimbangkan sebelum mengaktifkan fitur API Pribadi:

  • Menyiapkan titik akhir antarmuka VPC AWS AppSync dengan fitur DNS Pribadi diaktifkan akan mencegah sumber daya di VPC dapat memanggil publik lain AWS AppSync menggunakan URL API yang dihasilkan. APIs AWS AppSync Ini karena permintaan ke API publik dirutekan melalui titik akhir antarmuka, yang tidak diizinkan untuk umum. APIs Untuk memanggil publik APIs dalam skenario ini, disarankan untuk mengonfigurasi nama domain khusus di publik APIs, yang kemudian dapat digunakan oleh sumber daya di VPC untuk memanggil API publik.

  • AWS AppSync Private Anda hanya APIs akan tersedia dari VPC Anda. Editor kueri AWS AppSync konsol hanya akan dapat menjangkau API Anda jika konfigurasi jaringan browser Anda dapat merutekan lalu lintas ke VPC Anda (misalnya, koneksi melalui VPN atau lebih AWS Direct Connect).

  • Dengan titik akhir antarmuka VPC untuk AWS AppSync, Anda dapat mengakses API Pribadi apa pun di AWS akun dan Wilayah yang sama. Untuk lebih membatasi akses ke Private APIs, Anda dapat mempertimbangkan opsi berikut:

    • Memastikan hanya administrator yang diperlukan yang dapat membuat antarmuka titik akhir VPC untuk. AWS AppSync

    • Menggunakan kebijakan kustom titik akhir VPC untuk membatasi mana yang APIs dapat dipanggil dari sumber daya di VPC.

    • Untuk sumber daya di VPC, kami menyarankan Anda menggunakan otorisasi IAM untuk memanggil AWS AppSync APIs dengan memastikan bahwa sumber daya diberikan peran tercakup ke bawah. APIs

  • Saat membuat atau menggunakan kebijakan yang membatasi prinsip IAM, Anda harus mengatur metode ke atauauthorizationType. AWS_IAM NONE

Membuat AWS AppSync Pribadi APIs

Langkah-langkah berikut di bawah ini menunjukkan kepada Anda cara membuat Private APIs di AWS AppSync layanan.

Awas

Anda dapat mengaktifkan fitur API Pribadi hanya selama pembuatan API. Pengaturan ini tidak dapat dimodifikasi pada AWS AppSync API atau API AWS AppSync Pribadi setelah dibuat.

  1. Masuk ke AWS Management Console dan buka AppSync konsol.

    1. Di Dashboard, pilih Create API.

  2. Pilih Desain API dari awal, lalu pilih Berikutnya.

  3. Di bagian Private API, pilih Use Private API features.

  4. Konfigurasikan opsi lainnya, tinjau data API Anda, lalu pilih Buat.

Sebelum Anda dapat menggunakan API AWS AppSync Pribadi, Anda harus mengonfigurasi titik akhir antarmuka AWS AppSync di VPC Anda. Perhatikan bahwa API Pribadi dan VPC harus berada di AWS akun dan Wilayah yang sama.

Membuat titik akhir antarmuka untuk AWS AppSync

Anda dapat membuat titik akhir antarmuka untuk AWS AppSync menggunakan konsol VPC Amazon atau () AWS Command Line Interface .AWS CLI Bergantung pada kasus penggunaan Anda, Anda mungkin perlu membuat satu atau kedua jenis titik akhir:

  • Titik akhir pesawat data: Diperlukan untuk mengakses Private APIs dari VPC Anda

  • Titik akhir bidang kontrol: Diperlukan untuk mengelola AWS AppSync sumber daya dari VPC Anda menggunakan atau AWS CLI SDKs

Untuk informasi selengkapnya, lihat Membuat titik akhir antarmuka dalam Panduan Pengguna Amazon VPC.

catatan

Pastikan Anda memilih layanan titik akhir VPC yang tepat; ada dua untuk AppSync: com.amazonaws.{region}.appsync-api adalah yang diperlukan untuk pribadi APIs sementara com.amazonaws.{region}.appsync digunakan untuk manajemen API.

Console
  1. Masuk ke AWS Management Console dan buka halaman Endpoints dari konsol VPC Amazon.

  2. Pilih Buat titik akhir.

    1. Di bidang Kategori Layanan, verifikasi bahwa AWS layanan dipilih.

    2. Dalam tabel Layanan, pilih salah satu layanan berikut:

      • Untuk akses pesawat data: com.amazonaws.{region}.appsync-api

      • Untuk akses pesawat kontrol: com.amazonaws.{region}.appsync

      Verifikasi bahwa nilai kolom Type adalahInterface.

    3. Di bidang VPC, pilih VPC dan subnetnya.

    4. Untuk mengaktifkan fitur DNS pribadi untuk titik akhir antarmuka, centang kotak centang Aktifkan Nama DNS.

    5. Di bidang Grup keamanan, pilih satu atau beberapa grup keamanan.

  3. Pilih Buat titik akhir.

  4. Ulangi proses untuk membuat tipe endpoint kedua jika diperlukan.

CLI

Gunakan perintah create-vpc-endpoint dan tentukan ID VPC, tipe VPC endpoint (antarmuka), nama layanan, subnet yang akan menggunakan titik akhir, dan grup keamanan yang dikaitkan dengan antarmuka jaringan titik akhir.

Buat titik akhir bidang data:

$ 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

Buat titik akhir bidang kontrol:

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

Untuk menggunakan opsi DNS pribadi, Anda harus mengatur enableDnsHostnames dan enableDnsSupportattributes nilai VPC Anda. Untuk informasi selengkapnya, lihat Melihat dan memperbarui dukungan DNS untuk VPC Anda di Panduan Pengguna Amazon VPC. Jika Anda mengaktifkan fitur DNS pribadi untuk titik akhir antarmuka, Anda dapat membuat permintaan ke API AWS AppSync GraphQL dan titik akhir Real-time menggunakan titik akhir DNS publik defaultnya menggunakan format di bawah ini:

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

Untuk operasi pesawat kontrol, Anda dapat menggunakan titik akhir AWS AppSync layanan standar:

https://appsync.{region}.amazonaws.com

Untuk informasi selengkapnya tentang titik akhir layanan, lihat Titik akhir layanan dan kuota di Referensi Umum.AWS

Untuk informasi selengkapnya tentang interaksi layanan dengan titik akhir antarmuka, lihat Mengakses layanan melalui titik akhir antarmuka di Panduan Pengguna Amazon VPC.

Untuk informasi tentang membuat dan mengonfigurasi titik akhir menggunakan AWS CloudFormation, lihat VPCEndpoint sumber daya AWS:EC2:: di AWS CloudFormation Panduan Pengguna.

Contoh lanjutan

Jika Anda mengaktifkan fitur DNS pribadi untuk titik akhir antarmuka, Anda dapat membuat permintaan ke API AWS AppSync GraphQL dan titik akhir Real-time menggunakan titik akhir DNS publik defaultnya menggunakan format di bawah ini:

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

Menggunakan antarmuka VPC endpoint public DNS hostname, URL dasar untuk memanggil API akan dalam format berikut:

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

Anda juga dapat menggunakan nama host DNS khusus AZ jika Anda telah menerapkan titik akhir di AZ:

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

Menggunakan nama DNS publik titik akhir VPC akan memerlukan nama host titik akhir AWS AppSync API untuk diteruskan sebagai Host atau sebagai header ke permintaan. x-appsync-domain Contoh-contoh ini menggunakan TodoAPI yang dibuat dalam panduan skema Launch a sample:

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

Dalam contoh berikut, kita akan menggunakan aplikasi Todo yang dihasilkan dalam panduan Launch a sample schema. Untuk menguji contoh Todo API, kita akan menggunakan DNS Pribadi untuk menjalankan API. Anda dapat menggunakan alat baris perintah pilihan Anda; contoh ini menggunakan curl untuk mengirim kueri dan mutasi dan wscat untuk mengatur langganan. Untuk meniru contoh kami, ganti nilai dalam tanda kurung dalam perintah { } di bawah ini dengan nilai yang sesuai dari akun Anda AWS .

Pengujian Operasi Mutasi — createTodo Permintaan

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

Pengujian Operasi Mutasi — createTodo Respon

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

Operasi Kueri Pengujian - listTodos Permintaan

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

Operasi Kueri Pengujian - listTodos Permintaan

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

Menguji Operasi Langganan - Berlangganan mutasi createTodo

Untuk mengatur langganan GraphQL, lihat Membangun AWS AppSync klien waktu nyata. WebSocket Dari EC2 instans Amazon di VPC, Anda dapat menguji titik akhir langganan API AWS AppSync Pribadi menggunakan wscat. Contoh di bawah ini menggunakan API KEY untuk otorisasi.

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

Atau, gunakan nama domain titik akhir VPC sambil memastikan untuk menentukan header Host dalam wscat perintah untuk membuat 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"}

Jalankan kode mutasi di bawah ini:

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

Setelah itu, langganan dipicu, dan pemberitahuan pesan muncul seperti yang ditunjukkan di bawah ini:

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

Contoh bidang kontrol

Dengan titik akhir VPC bidang kontrol yang dikonfigurasi, Anda dapat mengelola AWS AppSync sumber daya dari dalam VPC Anda menggunakan atau. AWS CLI SDKs Berikut adalah contoh operasi pesawat kontrol umum:

Membuat API menggunakan AWS CLI

aws appsync create-graphql-api \ --name "MyPrivateAPI" \ --authentication-type API_KEY \ --visibility PRIVATE

Memperbarui skema

aws appsync start-schema-creation \ --api-id {api-id} \ --definition file://schema.graphql

Membuat sumber data

aws appsync create-data-source \ --api-id {api-id} \ --name "MyDataSource" \ --type AWS_LAMBDA \ --lambda-config lambdaFunctionArn=arn:aws:lambda:{region}:{account}:function:MyFunction

Saat menggunakan titik akhir bidang kontrol dengan DNS pribadi diaktifkan, perintah ini akan secara otomatis merutekan melalui titik akhir VPC Anda. Jika DNS pribadi tidak diaktifkan, Anda dapat menentukan URL titik akhir:

aws appsync create-graphql-api \ --endpoint-url https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync.{region}.vpce.amazonaws.com \ --name "MyPrivateAPI" \ --authentication-type API_KEY \ --visibility PRIVATE

Menggunakan kebijakan IAM untuk membatasi pembuatan API publik

AWS AppSync mendukung Conditionpernyataan IAM untuk digunakan dengan Private APIs. visibilityBidang ini dapat disertakan dengan pernyataan kebijakan IAM untuk appsync:CreateGraphqlApi operasi untuk mengontrol peran IAM dan pengguna mana yang dapat membuat pribadi dan publik. APIs Ini memberi administrator IAM kemampuan untuk menentukan kebijakan IAM yang hanya akan memungkinkan pengguna untuk membuat API GraphQL Pribadi. Pengguna yang mencoba membuat API publik akan menerima pesan yang tidak sah.

Misalnya, administrator IAM dapat membuat pernyataan kebijakan IAM berikut untuk memungkinkan pembuatan Private: APIs

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

Administrator IAM juga dapat menambahkan kebijakan kontrol layanan berikut untuk memblokir semua pengguna dalam AWS organisasi agar tidak membuat AWS AppSync APIs selain Pribadi APIs:

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

Dukungan VPC Privatelink tersedia di. AWS AppSync PrivateLink memungkinkan Anda untuk menggunakan dan berinteraksi dengan AWS Layanan tanpa lalu lintas apa pun yang meninggalkan AWS jaringan.

AWS AppSync mendukung AWS PrivateLink untuk kedua bidang data dan operasi pesawat kontrol.

  • VPCE endpoint (appsync.<region>.vpce.amazonaws.com): Menyediakan akses VPC ke bidang data dan operasi pesawat kontrol sebagai berikut:

    • appsync untuk operasi pesawat kontrol

    • appsync-api untuk operasi pesawat data