Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Untuk menyempurnakan contoh RBAC di bagian sebelumnya, Anda dapat menambahkan atribut ke pengguna untuk membuat pendekatan hybrid RBAC-ABAC untuk kontrol akses multi-tenant. Contoh ini mencakup peran yang sama dari contoh sebelumnya, tetapi menambahkan atribut pengguna account_lockout_flag
dan parameter konteksuses_mfa
. Contoh ini juga mengambil pendekatan yang berbeda untuk menerapkan kontrol akses multi-penyewa dengan menggunakan RBAC dan ABAC, dan menggunakan satu penyimpanan kebijakan bersama alih-alih penyimpanan kebijakan yang berbeda untuk setiap penyewa.

Contoh ini mewakili solusi SaaS multi-penyewa di mana Anda perlu memberikan keputusan otorisasi untuk Penyewa A dan Penyewa B, mirip dengan contoh sebelumnya.
Untuk mengimplementasikan fitur kunci pengguna, contoh menambahkan atribut account_lockout_flag
ke prinsipal User
entitas dalam permintaan otorisasi. Bendera ini mengunci akses pengguna ke sistem dan akan DENY
semua hak istimewa bagi pengguna yang terkunci. account_lockout_flag
Atribut dikaitkan dengan User
entitas dan berlaku untuk User
sampai flag dicabut secara aktif di beberapa sesi. Contoh menggunakan when
kondisi untuk mengevaluasiaccount_lockout_flag
.
Contoh ini juga menambahkan detail tentang permintaan dan sesi. Informasi konteks menentukan bahwa sesi telah diautentikasi dengan menggunakan otentikasi multi-faktor. Untuk mengimplementasikan validasi ini, contoh menggunakan when
kondisi untuk mengevaluasi uses_mfa
bendera sebagai bagian dari bidang konteks. Untuk informasi selengkapnya tentang praktik terbaik untuk menambahkan konteks, lihat dokumentasi Cedar
permit (
principal in MultitenantApp::Role::"allAccessRole",
action in [
MultitenantApp::Action::"viewData",
MultitenantApp::Action::"updateData"
],
resource
)
when {
principal.account_lockout_flag == false &&
context.uses_mfa == true &&
resource in principal.Tenant
};
Kebijakan ini mencegah akses ke sumber daya kecuali sumber daya berada dalam grup yang sama dengan Tenant
atribut prinsipal yang meminta. Pendekatan untuk mempertahankan isolasi penyewa ini disebut sebagai pendekatan One Shared Multi-Tenant Policy Store. Untuk informasi selengkapnya tentang pertimbangan desain Izin Terverifikasi untuk aplikasi SaaS multi-penyewa, lihat bagian pertimbangan desain multi-penyewa Izin Terverifikasi.
Kebijakan ini juga memastikan bahwa kepala sekolah adalah anggota allAccessRole
dan membatasi tindakan untuk viewData
danupdateData
. Selain itu, kebijakan ini memverifikasi account_lockout_flag
itu false
dan bahwa nilai konteks untuk uses_mfa
mengevaluasi. true
Demikian pula, kebijakan berikut memastikan bahwa prinsipal dan sumber daya terkait dengan penyewa yang sama, yang mencegah akses lintas penyewa. Kebijakan ini juga memastikan bahwa kepala sekolah adalah anggota viewDataRole
dan membatasi tindakan untukviewData
. Selain itu, ini memverifikasi bahwa account_lockout_flag
adalah false
dan bahwa nilai konteks untuk uses_mfa
dievaluasi. true
permit (
principal in MultitenantApp::Role::"viewDataRole",
action == MultitenantApp::Action::"viewData",
resource
)
when {
principal.account_lockout_flag == false &&
context.uses_mfa == true &&
resource in principal.Tenant
};
Kebijakan ketiga mirip dengan yang sebelumnya. Kebijakan mengharuskan sumber daya untuk menjadi anggota grup yang sesuai dengan entitas yang diwakili olehprincipal.Tenant
. Ini memastikan bahwa prinsipal dan sumber daya terkait dengan Penyewa B, yang mencegah akses lintas penyewa. Kebijakan ini memastikan bahwa kepala sekolah adalah anggota updateDataRole
dan membatasi tindakan untukupdateData
. Selain itu, kebijakan ini memverifikasi bahwa account_lockout_flag
adalah false
dan bahwa nilai konteks untuk uses_mfa
dievaluasi. true
permit (
principal in MultitenantApp::Role::"updateDataRole",
action == MultitenantApp::Action::"updateData",
resource
)
when {
principal.account_lockout_flag == false &&
context.uses_mfa == true &&
resource in principal.Tenant
};
Permintaan otorisasi berikut dievaluasi oleh tiga kebijakan yang dibahas sebelumnya di bagian ini. Dalam permintaan otorisasi ini, kepala sekolah tipe User
dan dengan nilai Alice
membuat updateData
permintaan dengan peran allAccessRole
tersebut. Alice
memiliki atribut Tenant
yang nilainyaTenant::"TenantA"
. Tindakan Alice
yang coba dilakukan adalah updateData,
dan sumber daya yang akan diterapkan adalah SampleData
dari jenisnyaData
. SampleData
memiliki TenantA
sebagai entitas induk.
Menurut kebijakan pertama di toko <DATAMICROSERVICE_POLICYSTOREID>
kebijakan, Alice
dapat melakukan updateData
tindakan pada sumber daya, dengan asumsi bahwa kondisi dalam when
klausul kebijakan terpenuhi. Kondisi pertama membutuhkan principal.Tenant
atribut untuk dievaluasiTenantA
. Kondisi kedua membutuhkan atribut kepala sekolah account_lockout_flag
untuk menjadifalse
. Kondisi akhir membutuhkan konteksnya uses_mfa
true
. Karena ketiga kondisi terpenuhi, permintaan mengembalikan ALLOW
keputusan.
{
"policyStoreId": "DATAMICROSERVICE_POLICYSTORE",
"principal": {
"entityType": "MultitenantApp::User",
"entityId": "Alice"
},
"action": {
"actionType": "MultitenantApp::Action",
"actionId": "updateData"
},
"resource": {
"entityType": "MultitenantApp::Data",
"entityId": "SampleData"
},
"context": {
"contextMap": {
"uses_mfa": {
"boolean": true
}
}
},
"entities": {
"entityList": [
{
"identifier": {
"entityType": "MultitenantApp::User",
"entityId": "Alice"
},
"attributes": {
{
"account_lockout_flag": {
"boolean": false
},
"Tenant": {
"entityIdentifier": {
"entityType":"MultitenantApp::Tenant",
"entityId":"TenantA"
}
}
}
},
"parents": [
{
"entityType": "MultitenantApp::Role",
"entityId": "allAccessRole"
}
]
},
{
"identifier": {
"entityType": "MultitenantApp::Data",
"entityId": "SampleData"
},
"attributes": {},
"parents": [
{
"entityType": "MultitenantApp::Tenant",
"entityId": "TenantA"
}
]
}
]
}
}