Contoh 1: ABAC Dasar dengan Izin Terverifikasi dan Cedar - AWS Bimbingan Preskriptif

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

Contoh 1: ABAC Dasar dengan Izin Terverifikasi dan Cedar

Dalam skenario contoh ini, Izin Terverifikasi Amazon digunakan untuk menentukan pengguna mana yang diizinkan mengakses informasi dalam layanan mikro Payroll fiksi. Bagian ini mencakup cuplikan kode Cedar untuk menunjukkan bagaimana Anda dapat menggunakan Cedar untuk membuat keputusan kontrol akses. Contoh-contoh ini tidak dimaksudkan untuk memberikan eksplorasi penuh atas kemampuan yang disediakan oleh Cedar dan Izin Terverifikasi. Untuk ikhtisar Cedar yang lebih menyeluruh, lihat dokumentasi Cedar.

Dalam diagram berikut, kami ingin menegakkan dua aturan bisnis umum yang terkait dengan viewSalary GET metode ini: Karyawan dapat melihat gaji mereka sendiri dan Karyawan dapat melihat gaji siapa saja yang melapor kepada mereka. Anda dapat menerapkan aturan bisnis ini dengan menggunakan kebijakan Izin Terverifikasi.

Contoh implementasi ABAC dasar dengan Izin Terverifikasi Amazon dan Cedar untuk mengimplementasikan PDP

Karyawan dapat melihat gaji mereka sendiri.

Dalam Cedar, konstruksi dasar adalah entitas, yang mewakili prinsip, tindakan, atau sumber daya. Untuk membuat permintaan otorisasi dan memulai evaluasi dengan kebijakan Izin Terverifikasi, Anda perlu memberikan prinsipal, tindakan, sumber daya, dan daftar entitas.

  • Principal (principal) adalah pengguna atau peran yang masuk.

  • Action (action) adalah operasi yang dievaluasi oleh permintaan.

  • Resource (resource) adalah komponen yang diakses oleh tindakan.

  • Daftar entitas (entityList) berisi semua entitas yang diperlukan untuk mengevaluasi permintaan.

Untuk memenuhi aturan bisnis Karyawan dapat melihat gaji mereka sendiri, Anda dapat memberikan kebijakan Izin Terverifikasi seperti berikut ini.

permit ( principal, action == Action::"viewSalary", resource ) when { principal == resource.owner };

Kebijakan ini mengevaluasi ALLOW apakah Action is viewSalary dan sumber daya dalam permintaan memiliki pemilik atribut yang sama dengan prinsipal. Misalnya, jika Bob adalah pengguna yang masuk yang meminta laporan gaji dan juga pemilik laporan gaji, kebijakan akan mengevaluasiALLOW.

Permintaan otorisasi berikut diserahkan ke Izin Terverifikasi untuk dievaluasi oleh kebijakan sampel. Dalam contoh ini, Bob adalah pengguna yang masuk yang membuat viewSalary permintaan. Oleh karena itu, Bob adalah prinsipal dari tipe entitasEmployee. Tindakan yang coba dilakukan Bob adalah viewSalary, dan sumber daya yang viewSalary akan ditampilkan adalah Salary-Bob dengan jenisnyaSalary. Untuk mengevaluasi apakah Bob dapat melihat Salary-Bob sumber daya, Anda perlu menyediakan struktur entitas yang menghubungkan tipe Employee dengan nilai Bob (prinsipal) ke atribut pemilik sumber daya yang memiliki tipeSalary. Anda menyediakan struktur ini dientityList, di mana atribut yang terkait dengan Salary menyertakan pemilik, yang menentukan entityIdentifier yang berisi tipe Employee dan nilaiBob. Izin Terverifikasi membandingkan yang principal disediakan dalam permintaan otorisasi dengan owner atribut yang terkait dengan Salary sumber daya untuk membuat keputusan.

{ "policyStoreId": "PAYROLLAPP_POLICYSTOREID", "principal": { "entityType": "PayrollApp::Employee", "entityId": "Bob" }, "action": { "actionType": "PayrollApp::Action", "actionId": "viewSalary" }, "resource": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "entities": { "entityList": [ { "identifier": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "attributes": { "owner": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" } } } }, { "identifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" }, "attributes": {} } ] } }

Permintaan otorisasi untuk Izin Terverifikasi mengembalikan berikut ini sebagai output, di mana atributnya decision adalah salah satu atauALLOW. DENY

{ "determiningPolicies": [ { "determiningPolicyId": "PAYROLLAPP_POLICYSTOREID" } ], "decision": "ALLOW", "errors": [] }

Dalam hal ini, karena Bob mencoba melihat gajinya sendiri, permintaan otorisasi yang dikirim ke Izin Terverifikasi mengevaluasi. ALLOW Namun, tujuan kami adalah menggunakan Izin Terverifikasi untuk menegakkan dua aturan bisnis. Aturan bisnis yang menyatakan hal-hal berikut juga harus benar:

Karyawan dapat melihat gaji siapa saja yang melapor kepada mereka.

Untuk memenuhi aturan bisnis ini, Anda dapat memberikan kebijakan lain. Kebijakan berikut mengevaluasi ALLOW apakah tindakan tersebut viewSalary dan sumber daya dalam permintaan memiliki atribut owner.manager yang sama dengan prinsipal. Misalnya, jika Alice adalah pengguna yang masuk yang meminta laporan gaji dan Alice adalah manajer pemilik laporan, kebijakan tersebut akan dievaluasi. ALLOW

permit ( principal, action == Action::"viewSalary", resource ) when { principal == resource.owner.manager };

Permintaan otorisasi berikut diserahkan ke Izin Terverifikasi untuk dievaluasi oleh kebijakan sampel. Dalam contoh ini, Alice adalah pengguna yang masuk yang membuat viewSalary permintaan. Oleh karena itu Alice adalah kepala sekolah dan entitas adalah tipeEmployee. Tindakan yang Alice coba lakukan adalahviewSalary, dan sumber daya yang viewSalary akan ditampilkan adalah tipe Salary dengan nilai. Salary-Bob Untuk mengevaluasi apakah Alice dapat melihat Salary-Bob sumber daya, Anda perlu menyediakan struktur entitas yang menghubungkan tipe Employee dengan nilai manager atribut, yang kemudian harus dikaitkan dengan owner atribut tipe Salary dengan nilaiSalary-Bob. Alice Anda menyediakan struktur ini dientityList, di mana atribut yang terkait dengan Salary menyertakan pemilik, yang menentukan entityIdentifier yang berisi tipe Employee dan nilaiBob. Izin Terverifikasi terlebih dahulu memeriksa owner atribut, yang mengevaluasi tipe Employee dan nilainya. Bob Kemudian, Izin Terverifikasi mengevaluasi manager atribut yang terkait dengan Employee dan membandingkannya dengan prinsipal yang disediakan untuk membuat keputusan otorisasi. Dalam hal ini, keputusannya adalah ALLOW karena resource.owner.manager atribut principal dan setara.

{ "policyStoreId": "PAYROLLAPP_POLICYSTOREID", "principal": { "entityType": "PayrollApp::Employee", "entityId": "Alice" }, "action": { "actionType": "PayrollApp::Action", "actionId": "viewSalary" }, "resource": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "entities": { "entityList": [ { "identifier": { "entityType": "PayrollApp::Employee", "entityId": "Alice" }, "attributes": { "manager": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "None" } } }, "parents": [] }, { "identifier": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "attributes": { "owner": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" } } }, "parents": [] }, { "identifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" }, "attributes": { "manager": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "Alice" } } }, "parents": [] } ] } }

Sejauh ini dalam contoh ini, kami memberikan dua aturan bisnis yang terkait dengan viewSalary metode ini, Karyawan dapat melihat gaji mereka sendiri dan Karyawan dapat melihat gaji siapa saja yang melapor kepada mereka, ke Izin Terverifikasi sebagai kebijakan untuk memenuhi ketentuan masing-masing aturan bisnis secara independen. Anda juga dapat menggunakan satu kebijakan Izin Terverifikasi untuk memenuhi ketentuan kedua aturan bisnis:

Karyawan dapat melihat gaji mereka sendiri dan gaji siapa saja yang melapor kepada mereka.

Bila Anda menggunakan permintaan otorisasi sebelumnya, kebijakan berikut akan mengevaluasi ALLOW apakah tindakan tersebut viewSalary dan sumber daya dalam permintaan memiliki atribut owner.manager yang sama denganprincipal, atau atribut owner yang sama dengan. principal

permit ( principal, action == PayrollApp::Action::"viewSalary", resource ) when { principal == resource.owner.manager || principal == resource.owner };

Misalnya, jika Alice adalah pengguna yang masuk yang meminta laporan gaji, dan jika Alice adalah manajer pemilik atau pemilik laporan, maka kebijakan tersebut akan dievaluasi. ALLOW

Untuk informasi selengkapnya tentang menggunakan operator logis dengan kebijakan Cedar, lihat dokumentasi Cedar.