Toko kebijakan terkait API - Izin Terverifikasi Amazon

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

Toko kebijakan terkait API

Saat membuat penyimpanan kebijakan baru di konsol Izin Terverifikasi Amazon, Anda dapat memilih opsi Mengatur dengan API Gateway dan sumber identitas. Dengan opsi ini, Anda membuat toko kebijakan terkait API, model otorisasi untuk aplikasi yang mengautentikasi dengan kumpulan pengguna Amazon Cognito atau penyedia identitas OIDC (iDP) dan mendapatkan data dari Amazon API Gateway API. Untuk memulai, lihat Membuat toko kebijakan dengan API dan penyedia identitas yang terhubung.

penting

Penyimpanan kebijakan yang Anda buat dengan Pengaturan dengan API Gateway dan opsi sumber identitas di konsol Izin Terverifikasi tidak dimaksudkan untuk penerapan langsung ke produksi. Dengan toko kebijakan awal Anda, selesaikan model otorisasi Anda dan ekspor sumber daya penyimpanan kebijakan ke. CloudFormation Menerapkan Izin Terverifikasi untuk produksi secara terprogram dengan AWS Cloud Development Kit (CDK). Untuk informasi selengkapnya, lihat Pindah ke produksi dengan AWS CloudFormation.

Di toko kebijakan yang ditautkan ke API dan sumber identitas, aplikasi Anda menampilkan token kumpulan pengguna di header otorisasi saat membuat permintaan ke API. Sumber identitas toko kebijakan Anda menyediakan validasi token untuk Izin Terverifikasi. Token membentuk permintaan otorisasi principal dalam dengan IsAuthorizedWithTokenAPI. Izin Terverifikasi membuat kebijakan seputar keanggotaan grup pengguna Anda, seperti yang ditampilkan dalam klaim grup dalam identitas (ID) dan token akses, misalnya cognito:groups untuk kumpulan pengguna. API Anda memproses token dari aplikasi Anda di otorisasi Lambda dan mengirimkannya ke Izin Terverifikasi untuk keputusan otorisasi. Saat API Anda menerima keputusan otorisasi dari otorisasi Lambda, API akan meneruskan permintaan tersebut ke sumber data Anda atau menolak permintaan tersebut.

Komponen sumber identitas dan otorisasi API Gateway dengan Izin Terverifikasi
  • Kumpulan pengguna Amazon Cognito atau OIDC iDP yang mengautentikasi dan mengelompokkan pengguna. Token pengguna mengisi keanggotaan grup dan prinsipal atau konteks yang dievaluasi Izin Terverifikasi di toko kebijakan Anda.

  • API REST API Gateway. Izin Terverifikasi mendefinisikan tindakan dari jalur API dan metode API, misalnya. MyAPI::Action::get /photo

  • Fungsi Lambda dan otorisasi Lambda untuk API Anda. Fungsi Lambda mengambil token pembawa dari kumpulan pengguna Anda, meminta otorisasi dari Izin Terverifikasi, dan mengembalikan keputusan ke API Gateway. Alur kerja Pengaturan dengan Cognito dan API Gateway secara otomatis membuat otorisasi Lambda ini untuk Anda.

  • Toko kebijakan Izin Terverifikasi. Sumber identitas toko kebijakan adalah kumpulan pengguna Anda. Skema penyimpanan kebijakan mencerminkan konfigurasi API Anda, dan kebijakan menautkan grup pengguna ke tindakan API yang diizinkan.

  • Aplikasi yang mengautentikasi pengguna dengan IDP Anda dan menambahkan token ke permintaan API.

Bagaimana Izin Terverifikasi mengotorisasi permintaan API

Saat Anda membuat penyimpanan kebijakan baru dan memilih opsi Siapkan dengan Cognito dan API Gateway, Izin Terverifikasi akan membuat skema dan kebijakan penyimpanan kebijakan. Skema dan kebijakan mencerminkan tindakan API dan grup kumpulan pengguna yang ingin Anda otorisasi untuk mengambil tindakan. Izin Terverifikasi juga menciptakan fungsi dan otorisasi Lambda. Anda harus mengonfigurasi otorisasi baru pada metode di API Anda.

Diagram yang menampilkan alur permintaan otorisasi dengan Amazon API Gateway, Amazon Cognito, dan Izin Terverifikasi Amazon.
  1. Pengguna Anda masuk dengan aplikasi Anda melalui Amazon Cognito atau IDP OIDC lainnya. IDP mengeluarkan ID dan token akses dengan informasi pengguna.

  2. Aplikasi Anda menyimpan JWT. Untuk informasi selengkapnya, lihat Menggunakan token dengan kumpulan pengguna di Panduan Pengembang Amazon Cognito..

  3. Pengguna Anda meminta data yang harus diambil aplikasi Anda dari API eksternal.

  4. Aplikasi Anda meminta data dari REST API di API Gateway. Ini menambahkan ID atau token akses sebagai header permintaan.

  5. Jika API Anda memiliki cache untuk keputusan otorisasi, API akan mengembalikan respons sebelumnya. Jika caching dinonaktifkan atau API tidak memiliki cache saat ini, API Gateway meneruskan parameter permintaan ke otorisasi Lambda berbasis token.

  6. Fungsi Lambda mengirimkan permintaan otorisasi ke penyimpanan kebijakan Izin Terverifikasi dengan API. IsAuthorizedWithToken Fungsi Lambda melewati elemen keputusan otorisasi:

    1. Token pengguna sebagai prinsipal.

    2. Metode API dikombinasikan dengan jalur API, misalnyaGetPhoto, sebagai tindakan.

    3. Istilah Application sebagai sumber daya.

  7. Izin Terverifikasi memvalidasi token. Untuk informasi selengkapnya tentang cara token Amazon Cognito divalidasi, lihat Otorisasi dengan Izin Terverifikasi Amazon di Panduan Pengembang Amazon Cognito.

  8. Izin Terverifikasi mengevaluasi permintaan otorisasi terhadap kebijakan di toko kebijakan Anda dan mengembalikan keputusan otorisasi.

  9. Authorizer Lambda mengembalikan Deny respons Allow atau ke API Gateway.

  10. API mengembalikan data atau ACCESS_DENIED respons terhadap aplikasi Anda. Aplikasi Anda memproses dan menampilkan hasil permintaan API.

Menambahkan kontrol akses berbasis atribut (ABAC)

Sesi otentikasi khas dengan IDP mengembalikan ID dan token akses. Anda dapat meneruskan salah satu dari jenis token ini sebagai token pembawa dalam permintaan aplikasi ke API Anda. Bergantung pada pilihan Anda saat membuat toko kebijakan, Izin Terverifikasi mengharapkan salah satu dari dua jenis token. Kedua jenis membawa informasi tentang keanggotaan grup pengguna. Untuk informasi selengkapnya tentang jenis token di Amazon Cognito, lihat Menggunakan token dengan kumpulan pengguna di Panduan Pengembang Amazon Cognito.

Setelah membuat toko kebijakan, Anda dapat menambahkan dan memperluas kebijakan. Misalnya, Anda dapat menambahkan grup baru ke kebijakan saat menambahkannya ke kumpulan pengguna. Karena toko kebijakan Anda sudah mengetahui cara kumpulan pengguna menampilkan grup dalam token, Anda dapat mengizinkan serangkaian tindakan untuk grup baru dengan kebijakan baru.

Anda mungkin juga ingin memperluas model evaluasi kebijakan berbasis grup menjadi model yang lebih tepat berdasarkan properti pengguna. Token kumpulan pengguna berisi informasi pengguna tambahan yang dapat berkontribusi pada keputusan otorisasi.

Token ID

Token ID mewakili atribut pengguna dan memiliki tingkat kontrol akses berbutir halus tertinggi. Untuk mengevaluasi alamat email, nomor telepon, atau atribut khusus seperti departemen dan manajer, evaluasi token ID.

Token akses

Token akses mewakili izin pengguna dengan cakupan OAuth 2.0. Untuk menambahkan lapisan otorisasi atau untuk mengatur permintaan sumber daya tambahan, evaluasi token akses. Misalnya, Anda dapat memvalidasi bahwa pengguna berada dalam grup yang sesuai dan membawa cakupan seperti PetStore.read itu umumnya mengotorisasi akses ke API. Kumpulan pengguna dapat menambahkan cakupan khusus ke token dengan server sumber daya dan dengan kustomisasi token saat runtime.

Lihat Bekerja dengan sumber identitas dalam skema dan kebijakan misalnya kebijakan yang memproses klaim dalam ID dan token akses.

Pertimbangan untuk toko kebijakan terkait API

Saat membuat penyimpanan kebijakan terkait API di konsol Izin Terverifikasi, Anda membuat pengujian untuk penerapan produksi pada akhirnya. Sebelum Anda pindah ke produksi, buat konfigurasi tetap untuk API dan kumpulan pengguna Anda. Pertimbangkan faktor-faktor berikut:

API Gateway cache tanggapan

Di toko kebijakan terkait API, Izin Terverifikasi membuat otorisasi Lambda dengan TTL caching Otorisasi 120 detik. Anda dapat menyesuaikan nilai ini atau mematikan caching di otorisasi Anda. Dalam otorisasi dengan caching diaktifkan, otorisasi Anda mengembalikan respons yang sama setiap kali sampai TTL kedaluwarsa. Ini dapat memperpanjang masa efektif token kumpulan pengguna dengan durasi yang sama dengan TTL caching dari tahap yang diminta.

Grup Amazon Cognito dapat digunakan kembali

Izin Terverifikasi Amazon menentukan keanggotaan grup untuk pengguna kumpulan pengguna dari cognito:groups klaim di ID pengguna atau token akses. Nilai klaim ini adalah larik nama ramah grup kumpulan pengguna yang dimiliki pengguna. Anda tidak dapat mengaitkan grup kumpulan pengguna dengan pengenal unik.

Grup kumpulan pengguna yang Anda hapus dan buat ulang dengan nama yang sama yang ada di toko kebijakan Anda sebagai grup yang sama. Saat Anda menghapus grup dari kumpulan pengguna, hapus semua referensi ke grup dari toko kebijakan Anda.

Namespace dan skema yang diturunkan dari API adalah point-in-time

Izin Terverifikasi menangkap API Anda pada satu titik waktu: Izin Terverifikasi hanya akan menanyakan API saat Anda membuat toko kebijakan. Ketika skema atau nama API Anda berubah, Anda harus memperbarui penyimpanan kebijakan dan otorisasi Lambda, atau membuat penyimpanan kebijakan terkait API baru. Izin Terverifikasi memperoleh namespace penyimpanan kebijakan dari nama API Anda.

Fungsi Lambda tidak memiliki konfigurasi VPC

Fungsi Lambda yang dibuat Izin Terverifikasi untuk otorisasi API Anda tidak terhubung ke VPC. Secara default. API yang memiliki akses jaringan terbatas pada VPC pribadi tidak dapat berkomunikasi dengan fungsi Lambda yang mengotorisasi permintaan akses dengan Izin Terverifikasi.

Izin Terverifikasi menyebarkan sumber daya otorisasi di CloudFormation

Untuk membuat penyimpanan kebijakan terkait API, Anda harus masuk ke AWS prinsipal yang memiliki hak istimewa tinggi ke konsol Izin Terverifikasi. Pengguna ini menyebarkan AWS CloudFormation tumpukan yang membuat sumber daya di beberapa Layanan AWS. Prinsipal ini harus memiliki izin untuk menambah dan memodifikasi sumber daya di Izin Terverifikasi, IAM, Lambda, dan API Gateway. Sebagai praktik terbaik, jangan bagikan kredensyal ini dengan administrator lain di organisasi Anda.

Lihat Pindah ke produksi dengan AWS CloudFormation ikhtisar sumber daya yang dibuat oleh Izin Terverifikasi.

Pindah ke produksi dengan AWS CloudFormation

Penyimpanan kebijakan terkait API adalah cara untuk membuat model otorisasi untuk API Gateway API dengan cepat. Mereka dirancang untuk berfungsi sebagai lingkungan pengujian untuk komponen otorisasi aplikasi Anda. Setelah membuat toko kebijakan pengujian, luangkan waktu untuk menyempurnakan kebijakan, skema, dan otorisasi Lambda.

Anda dapat menyesuaikan arsitektur API Anda, yang memerlukan penyesuaian yang setara dengan skema dan kebijakan penyimpanan kebijakan Anda. Toko kebijakan yang ditautkan API tidak secara otomatis memperbarui skema mereka dari Arsitektur APIā€”Izin Terverifikasi hanya melakukan polling API pada saat Anda membuat penyimpanan kebijakan. Jika API Anda cukup berubah, Anda mungkin harus mengulangi prosesnya dengan penyimpanan kebijakan baru.

Saat model aplikasi dan otorisasi Anda siap untuk diterapkan ke produksi, integrasikan toko kebijakan terkait API yang Anda kembangkan dengan proses otomatisasi Anda. Sebagai praktik terbaik, kami menyarankan Anda mengekspor skema penyimpanan kebijakan dan kebijakan ke dalam AWS CloudFormation templat yang dapat Anda terapkan ke yang lain Akun AWS dan. Wilayah AWS

Hasil dari proses penyimpanan kebijakan terkait API adalah penyimpanan kebijakan awal dan otorisasi Lambda. Otorisasi Lambda memiliki beberapa sumber daya yang bergantung. Izin Terverifikasi menyebarkan sumber daya ini dalam tumpukan yang dibuat secara otomatis CloudFormation . Untuk menyebarkan ke produksi, Anda harus mengumpulkan penyimpanan kebijakan dan sumber daya otorisasi Lambda ke dalam templat. Toko kebijakan terkait API dibuat dari sumber daya berikut:

  1. AWS::VerifiedPermissions::PolicyStore: Salin skema Anda ke SchemaDefinition objek. "Karakter melarikan diri sebagai\".

  2. AWS::VerifiedPermissions::IdentitySource: Salin nilai dari output GetIdentitySource dari penyimpanan kebijakan pengujian Anda dan modifikasi sesuai kebutuhan.

  3. Satu atau lebih dari AWS::VerifiedPermissions::Policy: Salin pernyataan kebijakan Anda ke Definition objek. "Karakter melarikan diri sebagai\".

  4. AWS: :Lambda: :Function, AWS::IAM: :Role, AWS::IAM: :Policy, AWS::ApiGateway: :Authorizer, AWS::Lambda::Permission: Salin templat dari tab Template tumpukan yang digunakan Izin Terverifikasi saat Anda membuat toko kebijakan.

Template berikut adalah contoh toko kebijakan. Anda dapat menambahkan sumber daya otorisasi Lambda dari tumpukan yang ada ke template ini.

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyExamplePolicyStore": { "Type": "AWS::VerifiedPermissions::PolicyStore", "Properties": { "ValidationSettings": { "Mode": "STRICT" }, "Description": "ApiGateway: PetStore/test", "Schema": { "CedarJson": "{\"PetStore\":{\"actions\":{\"get /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /pets/{petId}\":{\"appliesTo\":{\"context\":{\"type\":\"Record\",\"attributes\":{}},\"resourceTypes\":[\"Application\"],\"principalTypes\":[\"User\"]}},\"post /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}}},\"entityTypes\":{\"Application\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}},\"User\":{\"memberOfTypes\":[\"UserGroup\"],\"shape\":{\"attributes\":{},\"type\":\"Record\"}},\"UserGroup\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}}}}}" } } }, "MyExamplePolicy": { "Type": "AWS::VerifiedPermissions::Policy", "Properties": { "Definition": { "Static": { "Description": "Policy defining permissions for testgroup cognito group", "Statement": "permit(\nprincipal in PetStore::UserGroup::\"us-east-1_EXAMPLE|testgroup\",\naction in [\n PetStore::Action::\"get /\",\n PetStore::Action::\"post /pets\",\n PetStore::Action::\"get /pets\",\n PetStore::Action::\"get /pets/{petId}\"\n],\nresource);" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" } }, "DependsOn": [ "MyExamplePolicyStore" ] }, "MyExampleIdentitySource": { "Type": "AWS::VerifiedPermissions::IdentitySource", "Properties": { "Configuration": { "CognitoUserPoolConfiguration": { "ClientIds": [ "1example23456789" ], "GroupConfiguration": { "GroupEntityType": "PetStore::UserGroup" }, "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" }, "PrincipalEntityType": "PetStore::User" }, "DependsOn": [ "MyExamplePolicyStore" ] } } }