View a markdown version of this page

Contoh kebijakan - Batuan Dasar Amazon AgentCore

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 dan klaim asuransi:

AsuransiAPI___Get_Policy

Ambil detail polis asuransi.

Parameter:

  • policyId(string, wajib) - Pengidentifikasi kebijakan

AsuransiAPI___File_Klaim

Ajukan klaim asuransi.

Parameter:

  • policyId(string, wajib) - Pengidentifikasi kebijakan

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

  • amount(nomor, wajib) - Jumlah klaim

  • description(string, opsional) - Deskripsi klaim

AsuranceAPI___UPDATE_COVERAGE

Perbarui cakupan kebijakan.

Parameter:

  • policyId(string, wajib) - Pengidentifikasi kebijakan

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

  • newLimit(nomor, wajib) - Batas cakupan baru

AsuransiAPI___GET_CLAIM_Status

Periksa status klaim.

Parameter:

  • claimId(string, wajib) - Pengidentifikasi klaim

AsuransiAPI___Calculate_Premium

Hitung premi asuransi.

Parameter:

  • coverageType(string, diperlukan) - Jenis cakupan

  • coverageAmount(nomor, wajib) - 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 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 operator. in Alih-alih menulis kebijakan terpisah untuk setiap operasi baca, satu kebijakan 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: Izinkan kepala sekolah 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 lingkup fleksibel seperti “insurance:claim”, “insurance:claim:write”, atau “admin insurance:claim”.

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 “senior-adjuster” 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 untuk mengajukan klaim ketika 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 bidang yang ada sebelum mengaksesnya, mencegah kesalahan saat bidang opsional hilang.

Kebijakan 5: Pemeriksaan keberadaan lapangan

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

Bahasa alami: Blokir kepala sekolah dari pengajuan klaim kecuali deskripsi disediakan.

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. Kolom 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: Izinkan 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 Kebijakan 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 suka

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

Bahasa alami: Izinkan kepala sekolah menghitung premi saat jenis cakupan berisi “auto”.

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. Wildcard * cocok dengan karakter apa pun, jadi “auto”, “auto-liability”, “comprehensive-auto”, atau “auto-collision” 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 kepala sekolah untuk memperbarui cakupan ketika jenis cakupan 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 penggabungan 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 suatu tindakan, itu ditolak. Misalnya, pengguna tanpa cakupan “asuransi: klaim” tidak dapat mengajukan klaim meskipun tidak ada kebijakan yang secara eksplisit melarangnya.

Melarang menang

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

Pelapisan kebijakan

Beberapa kebijakan dapat berlaku untuk permintaan yang sama:

  • Kebijakan 6 mengizinkan agen asuransi untuk memperbarui cakupan

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

  • Kebijakan 8 mengizinkan pembaruan hanya untuk jenis kewajiban atau tabrakan

Agar permintaan berhasil, ia harus memenuhi ketiganya: menjadi agen asuransi (Kebijakan 6), memiliki peran adjuster senior atau manajer (Kebijakan 3), dan memperbarui kewajiban atau tabrakan (Kebijakan 8).

Skenario uji

Skenario berikut menunjukkan bagaimana kebijakan bekerja sama dalam praktik:

Skenario 1: Kebijakan tampilan pengguna reguler

Pengguna: username="john”, scope = “asuransi:view”

Tindakan: get_policy

Diharapkan: IZINKAN (Kebijakan 1)

Skenario 2: Pengguna mengajukan klaim kesehatan dengan deskripsi

Pengguna: username="jane”, cakupan = “asuransi:klaim”

Tindakan: file_claim dengan ClaimType="Kesehatan”, deskripsi="Biaya pengobatan”

Diharapkan: IZINKAN (Kebijakan 2, Kebijakan 4, Kebijakan 5 tidak melarang)

Skenario 3: Pengguna mengajukan klaim tanpa deskripsi

Pengguna: username="jane”, cakupan = “asuransi:klaim”

Tindakan: file_claim dengan claimType="Health”, tidak ada deskripsi

Diharapkan: DENY (Kebijakan 5 melarang menang)

Skenario 4: Agen asuransi memperbarui cakupan

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

Tindakan: update_coverage dengan coverageType="Liability”

Diharapkan: IZINKAN (Kebijakan 6, Kebijakan 3 tidak melarang, Kebijakan 8)

Skenario 5: Agen asuransi tanpa peran senior

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

Tindakan: update_coverage dengan coverageType="Liability”

Diharapkan: DENY (Kebijakan 3 melarang menang)

Skenario 6: Perhitungan premium untuk cakupan otomatis

Pengguna: username="anyone”, scope = “any”

Tindakan: calculate_premium dengan coverageType="Auto-liability”

Diharapkan: IZINKAN (Kebijakan 7, pola cocok dengan “auto”)

IAM-based contoh otorisasi

Ketika AgentCore Gateway Anda menggunakan autentikasi 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 principal == pencocokan stabil dan pencocokan pola. principal.id

Izin entitas IAM dasar

Kebijakan ini mengizinkan IAM-authenticated pemanggil 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 paling sederhana dari kebijakan IAM. Ini memungkinkan 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 utama yang tepat

Batasi akses alat ke penelepon 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>. Hal ini memungkinkan principal == pencocokan stabil terlepas dari nama sesi yang digunakan selama otentikasi.

Role-based pembatasan dengan pencocokan pola

Anda juga dapat menggunakan principal.id like 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 saat 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 akun tertentu AWS :

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: Pola *:111122223333: * cocok dengan ARN yang berisi ID akun tersebut. Ini membatasi akses ke penelepon dari AWS akun yang ditentukan saja.

Multi-agent federasi

Saat 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 menggunakan principal == ID entitas peran tertentu. tools/listTanggapan untuk setiap agen hanya mencakup alat yang diizinkan untuk mereka gunakan.

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 pokok yang tepat dengan validasi masukan. Hanya penelepon dengan asumsi RefundProcessorRole dari akun yang ditentukan yang dapat memproses pengembalian dana, 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) untuk melakukan penghapusan administratif. Karena semantik yang dilarang menang, ini lebih diutamakan daripada kebijakan izin apa pun.

Melarang peran tertentu dari operasi sensitif

Blokir penelepon yang menggunakan peran hanya-baca agar tidak melakukan operasi tulis:

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 operasi penulisan, terlepas ReadOnlyAgentRole dari kebijakan izin apa pun yang mungkin mengizinkannya.