範例 1:具有已驗證許可和 Cedar 的基本 ABAC - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

範例 1:具有已驗證許可和 Cedar 的基本 ABAC

在此範例案例中,Amazon Verified Permissions 用於判斷哪些使用者可存取虛構薪資微服務中的資訊。本節包含 Cedar 程式碼片段,示範如何使用 Cedar 來呈現存取控制決策。這些範例並非旨在完整探索 Cedar 和 Verified Permissions 提供的功能。如需 Cedar 的更完整概觀,請參閱 Cedar 文件

在下圖中,我們希望強制執行與 viewSalary GET 方法相關聯的兩個一般商業規則:員工可以檢視自己的薪資,而員工可以檢視向其報告的任何人員的薪資。您可以使用 Verified Permissions 政策來強制執行這些業務規則。

使用 Amazon Verified Permissions 和 Cedar 實作 PDP 的基本 ABAC 實作範例

員工可以檢視自己的薪資。

在 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資源,您需要提供實體結構,將 類型EmployeeBob(委託人) 值連結至類型為 Salary 之資源的擁有者屬性。您可以在 中提供此結構entityList,其中與 相關聯的屬性Salary包含擁有者,指定包含 類型Employee和值 entityIdentifierBob。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 的授權請求會將下列項目傳回為輸出,其中 屬性decisionALLOWDENY

{ "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的實體結構,該結構接著必須與 類型 ownerSalary為 的 屬性相關聯Salary-Bob。您可以在 中提供此結構entityList,其中與 相關聯的屬性Salary包含擁有者,指定包含 類型Employee和值 entityIdentifierBob。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 文件