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.
Topik
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.