本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
允許存取實體的屬性 (ABAC)
屬性型存取控制 (ABAC) 是一種授權策略,可根據屬性來定義許可。「已驗證權限」可讓屬性附加至主參與者、動作及資源。然後可以在原則的when
和unless
子句中參照這些屬性,這些原則會評估構成請求前後關聯之主參與者、動作和資源的屬性。
下列範例會使用在 Cedar 原則語言參考指南〈範例結構 PhotoFlash
此範例顯示如何建立政策,允許HardwareEngineering
部門中任何工作層級大於或等於 5 的主參與者檢視和列出相簿中的相片device_prototypes
。
permit( principal, action in [Action::"listPhotos", Action::"view"], resource in Album::"device_prototypes" ) when { principal.department == "HardwareEngineering" && principal.jobLevel >= 5 };
此範例顯示如何建立允許使用者alice
檢視任何檔案類型資源的策略JPEG
。
permit( principal == User::"alice", action == Action::"view", resource ) when { resource.fileType == "JPEG" };
動作具有前後關聯屬性。您必須在授權要求中context
傳遞這些屬性。此範例顯示如何建立允許使用者alice
執行任何readOnly
動作的策略。您也可以為結構描述中的動作設定appliesTo
屬性。例如,當您想要確保使用者只能嘗試授權ViewPhoto
類型的資源時,這會指定資源的有效動作PhotoFlash::Photo
。
permit( principal == PhotoFlash::User::"alice", action, resource ) when { context has readOnly && context.readOnly == true };
不過,在結構描述中設定動作屬性的更好方法是將它們排列到功能性動作群組中。例如,您可以建立名ReadOnlyPhotoAccess
為ReadOnlyPhotoAccess
並設定PhotoFlash::Action::"ViewPhoto"
為作為動作群組成員的動作。此範例顯示如何建立原則,以授與 Alice 存取該群組中唯讀動作的權限。
permit( principal == PhotoFlash::User::"alice", action, resource ) when { action in PhotoFlash::Action::"ReadOnlyPhotoAccess" };
此範例顯示如何建立策略,以允許所有主參與者對其具有owner
屬性的資源執行任何動作。
permit( principal, action, resource ) when { principal == resource.owner };
此範例顯示如何建立策略,以便在主參與者的屬性符合資源的department
屬性時,允許任何主參與者檢視任何資源。department
注意
如果實體沒有在原則條件中提及的屬性,則當執行授權決策,且該實體的原則評估失敗時,將會忽略該原則。例如,任何沒有department
屬性的主參與者都無法透過此原則授與對任何資源的存取權。
permit( principal, action == Action::"view", resource ) when { principal.department == resource.owner.department };
此範例顯示如何建立原則,如果主參與者是資源的主參與者,或者如果主參與者是資源的admins
群組owner
的一部分,則允許任何主參與者對資源執行任何動作。
permit( principal, action, resource, ) when { principal == resource.owner || resource.admins.contains(principal) };