Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh 3: Kontrol akses multi-penyewa dengan RBAC
Untuk menguraikan contoh RBAC sebelumnya, Anda dapat memperluas persyaratan Anda untuk memasukkan multi-tenancy SaaS, yang merupakan persyaratan umum untuk penyedia SaaS. Dalam solusi multi-penyewa, akses sumber daya selalu disediakan atas nama penyewa tertentu. Artinya, pengguna Tenant A tidak dapat melihat data Tenant B, bahkan jika data tersebut secara logis atau fisik ditempatkan dalam suatu sistem. Contoh berikut menggambarkan bagaimana Anda dapat menerapkan isolasi penyewa dengan menggunakan beberapa penyimpanan kebijakan Izin Terverifikasi, dan bagaimana Anda dapat menggunakan peran pengguna untuk menentukan izin dalam penyewa.
Menggunakan pola desain Toko Kebijakan Per Penyewa adalah praktik terbaik untuk mempertahankan isolasi penyewa sambil menerapkan kontrol akses dengan Izin Terverifikasi. Dalam skenario ini, permintaan pengguna Penyewa A dan Penyewa B diverifikasi terhadap penyimpanan kebijakan terpisah, DATAMICROSERVICE_POLICYSTORE_A
danDATAMICROSERVICE_POLICYSTORE_B
, masing-masing. Untuk informasi selengkapnya tentang pertimbangan desain Izin Terverifikasi untuk aplikasi SaaS multi-penyewa, lihat bagian pertimbangan desain multi-penyewa Izin Terverifikasi.

Kebijakan berikut berada di toko DATAMICROSERVICE_POLICYSTORE_A
kebijakan. Ini memverifikasi bahwa kepala sekolah akan menjadi bagian dari kelompok allAccessRole
tipeRole
. Dalam hal ini, kepala sekolah akan diizinkan untuk melakukan viewData
dan updateData
tindakan pada semua sumber daya yang terkait dengan Penyewa A.
permit ( principal in MultitenantApp::Role::"allAccessRole", action in [ MultitenantApp::Action::"viewData", MultitenantApp::Action::"updateData" ], resource );
Kebijakan berikut berada di toko DATAMICROSERVICE_POLICYSTORE_B
kebijakan. Kebijakan pertama memverifikasi bahwa prinsipal adalah bagian dari updateDataRole
kelompok tipeRole
. Dengan asumsi demikian, ia memberikan izin kepada kepala sekolah untuk melakukan updateData
tindakan pada sumber daya yang terkait dengan Penyewa B.
permit ( principal in MultitenantApp::Role::"updateDataRole", action == MultitenantApp::Action::"updateData", resource );
Kebijakan kedua ini mengamanatkan bahwa kepala sekolah yang merupakan bagian dari viewDataRole
kelompok tipe Role
harus diizinkan untuk melakukan viewData
tindakan terhadap sumber daya yang terkait dengan Penyewa B.
permit ( principal in MultitenantApp::Role::"viewDataRole", action == MultitenantApp::Action::"viewData", resource );
Permintaan otorisasi yang dibuat dari Penyewa A perlu dikirim ke toko DATAMICROSERVICE_POLICYSTORE_A
kebijakan dan diverifikasi oleh kebijakan milik toko tersebut. Dalam hal ini, ini diverifikasi oleh kebijakan pertama yang dibahas sebelumnya sebagai bagian dari contoh ini. Dalam permintaan otorisasi ini, prinsipal tipe User
dengan nilai Alice
meminta untuk melakukan tindakan. viewData
Kepala sekolah termasuk dalam kelompok allAccessRole
tipeRole
. Alice sedang mencoba untuk melakukan viewData
tindakan pada SampleData
sumber daya. Karena Alice memiliki allAccessRole
peran, evaluasi ini menghasilkan ALLOW
keputusan.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A", "principal": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "viewData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "allAccessRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }
Jika, sebaliknya, Anda melihat permintaan yang dibuat dari Penyewa B olehUser Bob
, Anda akan melihat sesuatu seperti permintaan otorisasi berikut. Permintaan dikirim ke toko DATAMICROSERVICE_POLICYSTORE_B
kebijakan karena berasal dari Penyewa B. Dalam permintaan ini, kepala sekolah Bob
ingin melakukan tindakan updateData
pada sumber daya. SampleData
Namun, Bob
bukan bagian dari grup yang memiliki akses ke tindakan updateData
pada sumber daya itu. Oleh karena itu, permintaan menghasilkan DENY
keputusan.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_B", "principal": { "entityType": "MultitenantApp::User", "entityId": "Bob" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "updateData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Bob" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "viewDataRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }
Dalam contoh ketiga ini, User Alice
cobalah untuk melakukan viewData
tindakan pada sumber dayaSampleData
. Permintaan ini diarahkan ke toko DATAMICROSERVICE_POLICYSTORE_A
kebijakan karena kepala sekolah Alice
milik Penyewa A. Alice
adalah bagian allAccessRole
dari kelompok tipeRole
, yang memungkinkannya untuk melakukan viewData
tindakan pada sumber daya. Dengan demikian, permintaan menghasilkan ALLOW
keputusan.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A", "principal": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "viewData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "allAccessRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }