本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
範例 1:具有已驗證許可和 Cedar 的基本 ABAC
在此範例案例中,Amazon Verified Permissions 用於判斷哪些使用者可存取虛構薪資微服務中的資訊。本節包含 Cedar 程式碼片段,示範如何使用 Cedar 來呈現存取控制決策。這些範例並非旨在完整探索 Cedar 和 Verified Permissions 提供的功能。如需 Cedar 的更完整概觀,請參閱 Cedar 文件
在下圖中,我們希望強制執行與 viewSalary
GET
方法相關聯的兩個一般商業規則:員工可以檢視自己的薪資,而員工可以檢視向其報告的任何人員的薪資。您可以使用 Verified Permissions 政策來強制執行這些業務規則。

員工可以檢視自己的薪資。
在 Cedar 中,基本建構是實體,代表委託人、動作或資源。若要提出授權請求並開始使用驗證許可政策進行評估,您需要提供委託人、動作、資源和實體清單。
-
主體 (
principal
) 是登入的使用者或角色。 -
動作 (
action
) 是由請求評估的操作。 -
資源 (
resource
) 是動作正在存取的元件。 -
實體清單 (
entityList
) 包含評估請求所需的所有必要實體。
為了滿足業務規則 員工可以檢視自己的薪資,您可以提供驗證許可政策,例如以下內容。
permit ( principal, action == Action::"viewSalary", resource ) when { principal == resource.owner };
此政策會評估 Action
ALLOW
是否為 ,viewSalary
且請求中的資源是否具有等於主體的屬性擁有者。例如,如果 Bob 是請求薪資報告的登入使用者,也是薪資報告的擁有者,則政策會評估為 ALLOW
。
下列授權請求會提交至驗證許可,以供範例政策評估。在此範例中,Bob 是提出viewSalary
請求的登入使用者。因此,Bob 是實體類型的委託人Employee
。Bob 嘗試執行的動作是 viewSalary,
,viewSalary
而將顯示的資源是 Salary-Bob
類型 Salary
。為了評估 Bob 是否可以檢視Salary-Bob
資源,您需要提供實體結構,將 類型Employee
與 Bob
(委託人) 值連結至類型為 Salary
之資源的擁有者屬性。您可以在 中提供此結構entityList
,其中與 相關聯的屬性Salary
包含擁有者,指定包含 類型Employee
和值 entityIdentifier
的 Bob
。Verified Permissions 會將授權請求中principal
提供的 owner
與與Salary
資源相關聯的 屬性進行比較,以做出決策。
{ "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": {} } ] } }
對 Verified Permissions 的授權請求會將下列項目傳回為輸出,其中 屬性decision
為 ALLOW
或 DENY
。
{ "determiningPolicies": [ { "determiningPolicyId": "PAYROLLAPP_POLICYSTOREID" } ], "decision": "ALLOW", "errors": [] }
在此情況下,由於 Bob 嘗試檢視自己的薪資,傳送至 Verified Permissions 的授權請求會評估為 ALLOW
。不過,我們的目標是使用 Verified Permissions 來強制執行兩個業務規則。陳述下列項目的商業規則也應該是 true:
員工可以檢視向他們報告的任何人員的薪資。
若要滿足此業務規則,您可以提供另一個政策。下列政策會評估 動作ALLOW
是否為 ,viewSalary
且請求中的資源具有等於主體owner.manager
的 屬性。例如,如果 Alice 是請求薪資報告的登入使用者,而 Alice 是報告擁有者的經理,則政策會評估為 ALLOW
。
permit ( principal, action == Action::"viewSalary", resource ) when { principal == resource.owner.manager };
下列授權請求會提交至驗證許可,以供範例政策評估。在此範例中,Alice 是提出viewSalary
請求的登入使用者。因此,Alice 是委託人,而實體的類型為 Employee
。Alice 嘗試執行的動作為 viewSalary
,而viewSalary
將顯示的資源類型為 Salary
,值為 Salary-Bob
。為了評估 Alice 是否可以檢視Salary-Bob
資源,您需要提供將 類型Employee
與 值與 manager
屬性連結Alice
的實體結構,該結構接著必須與 類型 owner
值Salary
為 的 屬性相關聯Salary-Bob
。您可以在 中提供此結構entityList
,其中與 相關聯的屬性Salary
包含擁有者,指定包含 類型Employee
和值 entityIdentifier
的 Bob
。Verified Permissions 會先檢查 owner
屬性,該屬性會評估 類型Employee
和值 Bob
。然後,驗證許可會評估與 相關聯的manager
屬性,Employee
並將其與提供的委託人進行比較,以做出授權決策。在這種情況下,決策是ALLOW
由於 principal
和 resource.owner.manager
屬性相等。
{ "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": [] } ] } }
在此範例中,我們提供了與 viewSalary
方法相關聯的兩個業務規則,員工可以檢視自己的薪資,而員工可以檢視向其報告之任何人的薪資,以驗證許可做為政策,獨立滿足每個業務規則的條件。您也可以使用單一已驗證許可政策來滿足這兩個業務規則的條件:
員工可以檢視自己的薪水,以及向其報告的任何人員的薪水。
當您使用先前的授權請求時,下列政策會評估 動作ALLOW
是否為 ,viewSalary
而請求中的資源是否具有等於 owner.manager
的屬性principal
,或 屬性是否owner
等於 principal
。
permit ( principal, action == PayrollApp::Action::"viewSalary", resource ) when { principal == resource.owner.manager || principal == resource.owner };
例如,如果 Alice 是請求薪資報告的登入使用者,而且 Alice 是擁有者的經理或報告擁有者,則政策會評估為 ALLOW
。
如需搭配 Cedar 政策使用邏輯運算子的詳細資訊,請參閱 Cedar 文件