在 Amazon 驗證許可中實施授權 - Amazon Verified Permissions

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

在 Amazon 驗證許可中實施授權

建立原則存放區、政策、範本、結構描述和授權模型之後,就可以開始使用 Amazon 驗證許可授權請求了。若要實作「已驗證的權限」授權,您必須將原則的組態 AWS 與應用程式的整合結合。若要將已驗證權限與您的應用程式整合,請新增 AWS SDK 並實作呼叫已驗證權限 API 的方法,並針對您的原則存放區產生授權決策。

具有已驗證權限的授權對於應用程序中的 UX 權限和 API 權限非常有用。

用戶體驗權

控制使用者對應用程式 UX 的存取。您可以允許使用者只檢視他們需要存取的確切表單、按鈕、圖形和其他資源。例如,當用戶登錄時,您可能想要確定他們的帳戶中是否可以看到「轉移資金」按鈕。您也可以控制使用者可以採取的動作。例如,在同一個銀行應用程序中,您可能想要確定是否允許您的用戶更改交易類別。

API 許可

控制使用者對資料的存取權。應用程序通常是分佈式系統的一部分,並從外部 API 引入信息。在「已驗證權限」允許顯示「轉移資金」按鈕的銀行應用程序示例中,當您的用戶啟動轉移時,必須做出更複雜的授權決策。「已驗證的權限」可以授權列出符合資格移轉目標的目的地帳戶的 API 請求,然後授權將轉移推送至其他帳戶的請求。

說明此內容的範例來自範例原則存放區若要進行操作,請在您的測試環境中建立存放區範例原則存放區。DigitalPet

如需使用批次授權實作 UX 許可的端對端範例應用程式,請參閱 AWS Security Blog 上的大規模使用 Amazon 驗證許可進行大規模的精細授權

用於授權的 API 操作

驗證權限 API 具有以下授權操作。

IsAuthorized

IsAuthorizedAPI 操作是具有已驗證權限的授權請求的入口點。您必須提交主參與者、作業、資源、前後關聯及實體元素。已驗證的權限會根據您的原則存放區結構描述驗證請求中的實體。「已驗證的權限」接著會根據要求原則存放區中套用至要求中實體的所有原則評估您的要求。

IsAuthorizedWithToken

IsAuthorizedWithToken作業會從 Amazon Cognito JSON 網路權杖 (JWT) 中的使用者資料產生授權要求。已驗證的許可可直接與 Amazon Cognito 搭配使用,做為政策存放區中的身分來源。「已驗證的權限」會將使用者 ID 或存取權杖中宣告的要求中的所有屬性填入主體。您可以從 Amazon Cognito 使用者集區中的使用者屬性或群組成員資格授權動作和資源。

您無法在IsAuthorizedWithToken要求中包含群組或使用者主體類型的相關資訊。您必須將所有主體資料填入您提供的 JWT 中。

BatchIs已授權

BatchIsAuthorized作業會針對單一 API 要求中的單一主體或資源處理多項授權決策。此作業會將要求分組成單一批次作業,以最大限度地減少配額使用量,並針對多達 30 個複雜巢狀動作傳回授權決策。透過單一資源的批次授權,您可以篩選使用者可對資源執行的動作。透過單一主參與者的批次授權,您可以篩選使用者可對其採取動作的資源。

BatchIsAuthorizedWith令牌

BatchIsAuthorizedWithToken作業會在一個 API 要求中針對單一主體處理多個授權決策。主體是由您的原則儲存區識別來源在 ID 或存取權杖中提供。此作業會將請求分組成單一批次作業,以最大限度地減少配額使用量,並針對每個動作和資源最多 30 個請求傳回授權決策。在您的政策中,您可以從 Amazon Cognito 使用者集區中的屬性或群組成員資格授權其存取權限。

就像使用一樣IsAuthorizedWithToken,您無法在要求中包含有關群組或使用者主體類型的BatchIsAuthorizedWithToken資訊。您必須將所有主體資料填入您提供的 JWT 中。

測試您的授權模型

若要瞭解部署應用程式時已驗證權限授權決策的影響,您可以在開發原則時評估原則,測試台並使用 HTTPS REST API 要求傳送至已驗證的權限。測試工作台是評估政策存放區中的授權要求和回應的工具。 AWS Management Console

驗證權限 REST API 是您開發中的下一個步驟,當您從概念理解轉移到應用程式設計。驗證權限 API 接受向區域服務端點提供IsAuthorizedIsAuthorizedWithToken、和BatchIs授權為已簽署 AWS API 請求的授權要求。若要測試您的授權模型,您可以使用任何 API 用戶端產生要求,並確認您的政策是否如預期傳回授權決策。

例如,您可以使用下列程序IsAuthorized在範例原則存放區中進行測試。

Test bench
  1. https://console.aws.amazon.com/verifiedpermissions/ 開啟「已驗證的權限」主控台。從名稱為 [存放區] 的範例原則存放區建立原則DigitalPet存放區

  2. 在新原則存放區中選取「測試工作台」。

  3. 從「已驗證權限 API」參考IsAuthorized中填入您的測試工作台請求。下列詳細資訊會複寫範例 4 中參照 DigitalPetStore 範例的條件。

    1. 設置愛麗絲為校長。對於主體採取行動,請選擇DigitalPetStore::User並輸入Alice

    2. 設置愛麗絲作為客戶的角色。選擇「新增上層DigitalPetStore::Role,選擇並輸入「客戶」。

    3. 將資源設定為順序「1234」。針對主參與者作用的資源,選擇DigitalPetStore::Order並輸入1234

    4. DigitalPetStore::Order源需要一個owner屬性。將愛麗絲設置為訂單的擁有者。選擇DigitalPetStore::User並輸入 Alice

    5. 愛麗絲要求查看訂單。針對主體正在採取的動作,選擇DigitalPetStore::Action::"GetOrder"

  4. 選擇「執行授權請求」。在未修改的原則存放區中,此要求會產生ALLOW決定。請注意傳回決定的「滿意」原則。

  5. 從左側導覽列選擇「策略」。檢閱具有「客戶角色-取得訂單」說明的靜態政策。

  6. 請注意,已驗證的權限允許請求,因為主參與者是客戶角色,並且是資源的擁有者。

REST API
  1. https://console.aws.amazon.com/verifiedpermissions/ 開啟「已驗證的權限」主控台。從名稱為 [存放區] 的範例原則存放區建立原則DigitalPet存放區

  2. 記下新原則存放區的原則存放區 ID

  3. 從驗證權限 API 參考資料IsAuthorized中,複製參考DigitalPet存放區例的範例 4 的要求內文。

  4. 開啟 API 用戶端,並為您的政策存放區建立對區域服務端點的要求。如範例所示填入標頭。

  5. 貼上範例要求主體,並將的值變更policyStoreId為您先前所記下的原則存放區識別碼。

  6. 提交請求並複查結果。在預設的DigitalPet儲存區原則存放區中,此要求會傳回ALLOW決定。

您可以變更測試環境中的原則、結構描述和要求,以變更結果並產生更複雜的決策。

  1. 以變更 [已驗證權限] 決定的方式變更要求。例如,將 Alice 的角色變更為Employee或將順序 1234 的owner屬性變更為Bob

  2. 以影響授權決策的方式變更政策。例如,使用「客戶角色-取得訂單」描述修改原則,以移除User必須是的擁有者的條件,Resource並修改Bob要求以檢視訂單。

  3. 變更結構描述以允許政策做出更複雜的決策。更新要求實體,讓 Alice 能夠滿足新的需求。例如,編輯綱要以允User許成為ActiveUsers或的成員InactiveUsers。更新政策,以便只有作用中使用者可以檢視自己的訂單。更新要求實體,讓 Alice 是作用中或非作用中的使用者。

與應用程式和 AWS SDK 整合

若要在應用程式中實作 Amazon 驗證許可,您必須定義希望應用程式強制執行的政策和結構描述。有了您的授權模型並經過測試後,您的下一步就是從強制執行點開始產生 API 請求。若要這麼做,您必須設定應用程式邏輯來收集使用者資料,並將其填入授權要求。

應用程式如何使用已驗證權限授權要求
  1. 收集有關當前用戶的信息。通常,用戶的詳細信息在經過身份驗證的會話的詳細信息中提供,例如 JWT 或 Web 會話 cookie。此使用者資料可能來自連結至您政策存放區的 Amazon Cognito 身分來源,或來自其他 OpenID Connect (OIDC) 提供者。

  2. 收集使用者想要存取之資源的相關資訊。一般而言,當使用者選取要求您的應用程式載入新資產時,您的應用程式會收到有關資源的資訊。

  3. 決定您的使用者想要採取的動作。

  4. 針對使用者嘗試作業的主參與者、動作、資源和實體產生「已驗證權限」的授權要求。「已驗證的權限」會根據原則存放區中的原則評估要求,並傳回授權決策。

  5. 您的應用程式會從已驗證的權限讀取允許或拒絕回應,並對使用者的要求強制執行決定。

已驗證的權限 API 作業內建於 AWS SDK 中。要在應用程序中包含「已驗證的權限」,請將所選語言的 AWS SDK 集成到應用程序包中。

若要深入了解並下載 AWS SDK,請參閱. Amazon Web Services

以下是各種 AWS SDK 中已驗證權限資源的文件連結。

以下 AWS SDK for JavaScript 範例來IsAuthorized源於使用 Amazon 驗證許可和 Amazon Cognito 簡化細粒度授權

const authResult = await avp.isAuthorized({ principal: 'User::"alice"', action: 'Action::"view"', resource: 'Photo::"VacationPhoto94.jpg"', // whenever our policy references attributes of the entity, // isAuthorized needs an entity argument that provides // those attributes entities: { entityList: [ { "identifier": { "entityType": "User", "entityId": "alice" }, "attributes": { "location": { "String": "USA" } } } ] } });