View a markdown version of this page

Contoh kebijakan - Batu Dasar Amazon AgentCore

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

Contoh kebijakan

Bagian ini memberikan contoh komprehensif kebijakan otorisasi Cedar untuk sistem manajemen asuransi. Contoh-contoh ini menunjukkan berbagai fitur bahasa Cedar dan pola otorisasi yang dapat Anda sesuaikan untuk aplikasi Anda sendiri.

Alat yang tersedia

API Asuransi menyediakan lima alat untuk mengelola polis asuransi dan klaim:

AsuransiAPI___get_Policy

Ambil detail polis asuransi.

Parameter:

  • policyId(string, wajib) - Pengidentifikasi kebijakan

AsuransiAPI___File_Claim

Mengajukan klaim asuransi.

Parameter:

  • policyId(string, wajib) - Pengidentifikasi kebijakan

  • claimType(string, wajib) - Jenis klaim (misalnya, “kesehatan”, “properti”, “otomatis”)

  • amount(nomor, wajib) - Jumlah klaim

  • description(string, opsional) - Deskripsi klaim

AsuransiAPI___Update_Coverage

Perbarui cakupan kebijakan.

Parameter:

  • policyId(string, wajib) - Pengidentifikasi kebijakan

  • coverageType(string, wajib) - Jenis cakupan (misalnya, “kewajiban”, “tabrakan”)

  • newLimit(nomor, wajib) - Batas cakupan baru

AsuransiAPI___Mendapat_Claim_Status

Periksa status klaim.

Parameter:

  • claimId(string, wajib) - Pengidentifikasi klaim

AsuransiAPI___Hitung_Premi

Hitung premi asuransi.

Parameter:

  • coverageType(string, diperlukan) - Jenis cakupan

  • coverageAmount(nomor, diperlukan) - Jumlah cakupan

  • riskFactors(objek, opsional) - Faktor penilaian risiko

Kebijakan otorisasi

Kebijakan berikut menunjukkan berbagai fitur bahasa Cedar dan pola otorisasi. Setiap kebijakan mencakup deskripsi bahasa alami, kode Cedar, dan penjelasan rinci.

Kebijakan 1: Multi-action izin

Kebijakan ini menunjukkan cara memberikan akses ke beberapa tindakan terkait menggunakan satu pernyataan kebijakan.

Bahasa alami: Izinkan semua kepala sekolah untuk mendapatkan kebijakan dan mendapatkan status klaim.

Kebijakan Cedar:

permit( principal is AgentCore::OAuthUser, action in [ AgentCore::Action::"InsuranceAPI___get_policy", AgentCore::Action::"InsuranceAPI___get_claim_status" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" );

Penjelasan: Kebijakan ini menunjukkan izin multi-aksi menggunakan in operator. Alih-alih menulis kebijakan terpisah untuk setiap operasi baca, kebijakan tunggal memberikan akses ke beberapa tindakan terkait. Ini berguna untuk mengelompokkan operasi serupa yang memiliki persyaratan otorisasi yang sama.

Kebijakan 2: Scope-based otorisasi

Kebijakan ini menunjukkan cara menggunakan cakupan OAuth untuk mengontrol akses ke operasi tertentu.

Bahasa alami: Iz inkan prinsipal dengan ruang lingkup yang berisi “asuransi: klaim” untuk mengajukan klaim.

Kebijakan Cedar:

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { principal.hasTag("scope") && principal.getTag("scope") like "*insurance:claim*" };

Penjelasan: Kebijakan ini menunjukkan validasi cakupan OAuth menggunakan tag. hasTagMetode memeriksa apakah tag ada, dan getTag mengambil nilainya. likeOperator dengan wildcard (*) melakukan pencocokan pola, memungkinkan format cakupan fleksibel seperti “insurance:klaim”, “insurance:claim:write”, atau “admin insurance:laim”.

Kebijakan 3: Role-based otorisasi dengan kecuali

Kebijakan ini menunjukkan penggunaan unless klausa untuk membuat pengecualian terhadap pembatasan.

Bahasa alami: Blokir kepala sekolah dari memperbarui cakupan kecuali kepala sekolah memiliki peran “ajuster senior” atau “manajer”.

Kebijakan Cedar:

forbid( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___update_coverage", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) unless { principal.hasTag("role") && (principal.getTag("role") == "senior-adjuster" || principal.getTag("role") == "manager") };

Penjelasan: Kebijakan ini menunjukkan unless klausa, yang membalikkan logika kondisi. Larangan berlaku kecuali pengguna memiliki salah satu peran yang ditentukan. Ini berguna untuk membuat pengecualian terhadap pembatasan. Kebijakan ini juga menunjukkan logika OR untuk memeriksa beberapa nilai yang dapat diterima.

Kebijakan 4: Kesetaraan string dengan logika OR

Kebijakan ini menunjukkan cara memvalidasi parameter input dan menggunakan logika OR untuk beberapa nilai yang dapat diterima.

Bahasa alami: Izinkan kepala sekolah mengajukan klaim jika jenis klaim adalah kesehatan, properti, atau otomatis.

Kebijakan Cedar:

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { context.input has claimType && (context.input.claimType == "health" || context.input.claimType == "property" || context.input.claimType == "auto") };

Penjelasan: Kebijakan ini menunjukkan akses parameter input alat melalui context.input dan pemeriksaan kesetaraan string dengan logika OR. hasOperator terlebih dahulu memverifikasi bahwa bidang tersebut ada sebelum mengaksesnya, mencegah kesalahan saat bidang opsional hilang.

Kebijakan 5: Pemeriksaan keberadaan lapangan

Kebijakan ini menunjukkan cara menerapkan aturan bisnis dengan mewajibkan bidang opsional.

Bahasa alami: Blokir prinsipal dari mengajukan klaim kecuali deskripsi diberikan.

Kebijakan Cedar:

forbid( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___file_claim", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) unless { context.input has description };

Penjelasan: Kebijakan ini menunjukkan penerapan bidang wajib untuk parameter opsional. Bidang deskripsi bersifat opsional dalam skema alat, tetapi kebijakan ini membuatnya wajib dengan melarang permintaan yang tidak menyertakannya. Ini menunjukkan bagaimana kebijakan dapat menambahkan aturan bisnis di luar validasi skema.

Kebijakan 6: Username-based otorisasi

Kebijakan ini menunjukkan cara memberikan akses berdasarkan identitas pengguna tertentu.

Bahasa alami: Iz inkan kepala sekolah dengan nama pengguna “Clare” untuk memperbarui cakupan.

Kebijakan Cedar:

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___update_coverage", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { principal.hasTag("username") && principal.getTag("username") == "Clare" };

Penjelasan: Kebijakan ini menunjukkan otorisasi berbasis nama pengguna menggunakan pencocokan string yang tepat. Dikombinasikan dengan Polis 3, ini menciptakan otorisasi dua bagian: pengguna harus memiliki nama pengguna “agen asuransi” DAN memiliki peran “senior-adjuster” atau “manajer” untuk memperbarui cakupan.

Kebijakan 7: Pencocokan pola dengan seperti

Kebijakan ini menunjukkan pencocokan pola fleksibel menggunakan wildcard untuk kontrol akses berbasis kategori.

Bahasa alami: Izinkan kepala sekolah menghitung premi ketika jenis cakupan berisi “otomatis”.

Kebijakan Cedar:

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___calculate_premium", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { context.input has coverageType && context.input.coverageType like "*auto*" };

Penjelasan: Kebijakan ini menunjukkan pencocokan pola fleksibel dengan like operator. Karakter pengganti * cocok dengan karakter apa pun, jadi “auto”, “auto-kewajiban”, “komprehensif otomatis”, atau “tabrakan otomatis” semuanya akan cocok. Ini berguna ketika Anda ingin mencocokkan kategori nilai daripada string yang tepat.

Kebijakan 8: Kondisi gabungan dengan AND

Kebijakan ini menunjukkan cara menggabungkan beberapa kondisi untuk membuat aturan otorisasi yang kompleks.

Bahasa alami: Izinkan prinsipal memperbarui cakupan ketika jenis cakupannya adalah kewajiban atau tabrakan dan batas baru disediakan.

Kebijakan Cedar:

permit( principal is AgentCore::OAuthUser, action == AgentCore::Action::"InsuranceAPI___update_coverage", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/insurance" ) when { context.input has coverageType && context.input has newLimit && (context.input.coverageType == "liability" || context.input.coverageType == "collision") };

Penjelasan: Kebijakan ini menunjukkan menggabungkan beberapa kondisi dengan logika AND. Ketiga kondisi harus benar: coverageType harus ada, newLimit harus ada, dan coverageType harus berupa “kewajiban” atau “tabrakan”. Ini bekerja dengan Kebijakan 6 untuk membuat otorisasi berlapis: siapa yang dapat memperbarui (Kebijakan 6) dan apa yang dapat mereka perbarui (Kebijakan 8).

Memahami semantik otorisasi

Kebijakan ini menunjukkan semantik otorisasi Cedar utama:

Blokir secara default

Jika tidak ada kebijakan yang secara eksplisit mengizinkan tindakan, tindakan tersebut ditolak. Misalnya, pengguna tanpa cakupan “insurance:klaim” tidak dapat mengajukan klaim meskipun tidak ada kebijakan yang secara eksplisit melarangnya.

Melarang kemenangan

Jika ada kebijakan larangan yang cocok, permintaan ditolak meskipun kebijakan izin juga cocok. Kebijakan 5 (dilarang tanpa deskripsi) mengesampingkan Kebijakan 2 (izin dengan ruang lingkup) ketika deskripsi tidak ada.

Pelapisan kebijakan

Beberapa kebijakan dapat berlaku untuk permintaan yang sama:

  • Polis 6 mengizinkan agen asuransi untuk memperbarui cakupan

  • Kebijakan 3 melarang pembaruan kecuali pengguna memiliki peran senior ajuster atau manajer

  • Kebijakan 8 mengizinkan pembaruan hanya untuk jenis tanggung jawab atau tabrakan

Agar permintaan berhasil, itu harus memenuhi ketiganya: menjadi agen asuransi (Polis 6), memiliki peran ajuster senior atau manajer (Kebijakan 3), dan memperbarui tanggung jawab atau tabrakan (Kebijakan 8).

Skenario uji

Skenario berikut menunjukkan bagaimana kebijakan bekerja bersama dalam praktik:

Skenario 1: Kebijakan tampilan pengguna biasa

Pengguna: nama pengguna = “john”, scope="insurance:view”

Tindakan: get_policy

Diharapkan: IZINKAN (Kebijakan 1)

Skenario 2: Pengguna mengajukan klaim kesehatan dengan deskripsi

Pengguna: username="jane”, scope="insurance:Claim”

Tindakan: file_laim dengan ClaimType="Health”, Description="Biaya Medis”

Dihar apkan: IZINKAN (Kebijakan 2, Kebijakan 4, Kebijakan 5 tidak melarang)

Skenario 3: Pengguna mengajukan klaim tanpa deskripsi

Pengguna: username="jane”, scope="insurance:Claim”

Tindakan: file_laim dengan ClaimType="Health”, tidak ada deskripsi

Diharapkan: DENY (Kebijakan 5 melarang kemenangan)

Skenario 4: Agen asuransi memperbarui cakupan

Pengguna: username="insurance-agent”, role="senior-adjuster”

Tindakan: update_cakupan dengan coverageType = “Liability”

Dihar apkan: IZINKAN (Kebijakan 6, Kebijakan 3 tidak melarang, Kebijakan 8)

Skenario 5: Agen asuransi tanpa peran senior

Pengguna: nama pengguna = “insurance-agent”, role="agent”

Tindakan: update_cakupan dengan coverageType = “Liability”

Diharapkan: DENY (Kebijakan 3 melarang kemenangan)

Skenario 6: Perhitungan premium untuk cakupan otomatis

Pengguna: nama pengguna = “siapa saja”, scope="any”

Tindakan: calculate_premium dengan coverageType = “Auto-Liability”

Diharapkan: IZ INKAN (Kebijakan 7, pola cocok dengan “otomatis”)

IAM-based contoh otorisasi

Ketika AgentCore Gateway Anda menggunakan otentikasi AWS_IAM alih-alih OAuth, prinsip dalam kebijakan Cedar direpresentasikan sebagai. AgentCore::IamEntity Untuk pemanggil yang mengautentikasi melalui peran yang diasumsikan, ID entitas Cedar menggunakan formatarn:aws:sts::<account>:assumed-role/<role-name>, memungkinkan pencocokan stabil dan pen principal == cocokan principal.id pola.

Izin entitas IAM dasar

Kebijakan ini mengizinkan IAM-authenticated setiap penelepon untuk menggunakan alat tertentu:

permit( principal is AgentCore::IamEntity, action == AgentCore::Action::"OrderAPI___get_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );

Penjelasan: Ini adalah bentuk kebijakan IAM yang paling sederhana. Ini memungkinkan setiap pemanggil yang diautentikasi melalui AWS_IAM untuk memanggil alat get_order. Gunakan ini ketika Anda hanya perlu memverifikasi bahwa penelepon IAM-authenticated tanpa batasan tambahan.

Role-based pembatasan dengan pencocokan prinsip yang tepat

Batasi akses alat ke pemanggil menggunakan peran IAM tertentu menggunakan: principal ==

permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/MyServiceRole", action == AgentCore::Action::"OrderAPI___process_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );

Penjelasan: ID entitas Cedar untuk peran yang diasumsikan adalaharn:aws:sts::<account>:assumed-role/<role-name>. Ini memungkinkan pen principal == cocokan stabil terlepas dari nama sesi yang digunakan selama otentikasi.

Role-based pembatasan dengan pencocokan pola

Anda juga dapat menggunakan principal.id like untuk pola pencocokan yang lebih luas:

permit( principal is AgentCore::IamEntity, action == AgentCore::Action::"OrderAPI___process_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" ) when { principal.id like "arn:aws:sts::111122223333:assumed-role/MyServiceRole" };

Penjelasan: Ini mencapai hasil yang sama seperti principal == tetapi menggunakan when klausa. Pencocokan pola berguna ketika Anda membutuhkan pencocokan yang lebih luas, seperti mencocokkan peran apa pun dalam akun (principal.id like "arn:aws:sts::111122223333:assumed-role/*").

Account-based pembatasan

Batasi akses alat ke penelepon dari AWS akun tertentu:

permit( principal is AgentCore::IamEntity, action == AgentCore::Action::"OrderAPI___process_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" ) when { principal.id like "*:111122223333:*" };

Penjelasan: P ola *:111122223333: * cocok dengan ARN yang berisi ID akun tersebut. Ini membatasi akses ke penelepon dari AWS akun yang ditentukan saja.

Multi-agent federasi

Ketika beberapa agen dengan peran IAM berbeda mengakses gateway yang sama, buat kebijakan terpisah untuk mengontrol alat mana yang dapat digunakan setiap agen:

// Agent A can only read orders permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/AgentA-Role", action == AgentCore::Action::"OrderAPI___get_order", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" ); // Agent B can read and process orders permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/AgentB-Role", action in [ AgentCore::Action::"OrderAPI___get_order", AgentCore::Action::"OrderAPI___process_order" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );

Penjelasan: Pola ini berguna untuk arsitektur multi-agen di mana agen yang berbeda memiliki peran IAM yang berbeda dan harus memiliki tingkat akses alat yang berbeda. Setiap kebijakan digunakan principal == dengan ID entitas peran tertentu. Resp tools/list ons untuk setiap agen hanya mencakup alat yang diizinkan untuk digunakan.

IAM dengan validasi input

Gabungkan pencocokan utama IAM dengan validasi input alat:

permit( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/RefundProcessorRole", action == AgentCore::Action::"RefundAPI___process_refund", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/refund-gateway" ) when { context.input has amount && context.input.amount < 1000 };

Penjelasan: Kebijakan ini menggabungkan pencocokan prinsip yang tepat dengan validasi input. Hanya penelepon yang mengasum RefundProcessorRole sikan dari akun yang ditentukan yang dapat memproses pengembalian uang, dan hanya jika jumlah pengembalian dana kurang dari $1000.

Melarang akun tertentu

Blokir penelepon dari AWS akun tertentu agar tidak mengakses alat sensitif:

forbid( principal is AgentCore::IamEntity, action == AgentCore::Action::"AdminAPI___delete_resource", resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/admin-gateway" ) when { principal.id like "*:444455556666:*" };

Penjelasan: Kebijakan larangan ini memblokir semua penelepon dari akun vendor pihak ketiga (444455556666) dari melakukan penghapusan administratif. Karena semantik dilarang menang, ini lebih diutamakan daripada kebijakan izin apa pun.

Melarang peran spesifik dari operasi sensitif

Blokir pemanggil menggunakan peran baca-saja dari melakukan operasi penulisan:

forbid( principal == AgentCore::IamEntity::"arn:aws:sts::111122223333:assumed-role/ReadOnlyAgentRole", action in [ AgentCore::Action::"OrderAPI___process_order", AgentCore::Action::"OrderAPI___cancel_order" ], resource == AgentCore::Gateway::"arn:aws:bedrock-agentcore:us-west-2:123456789012:gateway/order-gateway" );

Penjelasan: Kebijakan larangan ini mencegah penelepon yang menggunakan melakukan operasi penulisan, terlepas dari kebijakan izin yang mungkin mengizinkannya. ReadOnlyAgentRole