

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

# 在 Amazon Verified Permissions 中實作授權
<a name="authorization"></a>

在您建置政策存放區、政策、範本、結構描述和授權模型之後，即可開始使用 Amazon Verified Permissions 授權請求。若要實作 Verified Permissions 授權，您必須在 中結合授權政策的組態 AWS 與應用程式中的整合。若要將 Verified Permissions 與您的應用程式整合，請新增 AWS 開發套件並實作叫用 Verified Permissions API 的方法，並針對您的政策存放區產生授權決策。

Verified Permissions 的授權適用於應用程式中的 *UX 許可*和 *API 許可*。

**UX 許可**  
控制使用者存取您的應用程式 UX。您可以允許使用者只檢視他們需要存取的確切表單、按鈕、圖形和其他資源。例如，當使用者登入時，您可能想要判斷他們的帳戶中是否顯示「轉移資金」按鈕。您也可以控制使用者可採取的動作。例如，在相同的銀行應用程式中，您可能想要判斷您的使用者是否可以變更交易的類別。

**API 許可**  
控制使用者對資料的存取。應用程式通常是分散式系統的一部分，並從外部 APIs引入資訊。在 Verified Permissions 允許顯示「轉移資金」按鈕的銀行應用程式中，當您的使用者啟動轉移時，必須做出更複雜的授權決策。Verified Permissions 可以授權列出合格轉移目標目的地帳戶的 API 請求，然後將轉移推送到另一個帳戶的請求。

說明此內容的範例來自[範例政策存放區](policy-stores-create.md#policy-stores-create.title)。若要遵循，請在您的測試環境中建立 **DigitalPetStore** 範例政策存放區。

如需使用批次授權實作 UX 許可的端對端範例應用程式，請參閱 *AWS 安全部落格*上的[使用 Amazon Verified Permissions 進行大規模精細授權](https://aws.amazon.com/blogs/security/use-amazon-verified-permissions-for-fine-grained-authorization-at-scale/)。

**Topics**
+ [

## 授權可用的 API 操作
](#authorization-operations)
+ [

# 測試您的授權模型
](authorization-testing.md)
+ [

# 將您的授權模型與應用程式整合
](authorization-sdk.md)

## 授權可用的 API 操作
<a name="authorization-operations"></a>

Verified Permissions API 具有下列授權操作。

**[IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html)**  
`IsAuthorized` API 操作是使用 Verified Permissions 授權請求的進入點。您必須提交主體、動作、資源、內容和實體元素。Verified Permissions 會根據請求的政策存放區中套用至請求中實體的所有政策來評估您的請求。

**[IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)**  
`IsAuthorizedWithToken` 操作會從 JSON Web 字符 (JWTs) 中的使用者資料產生授權請求。Verified Permissions 可直接與 OIDC 提供者搭配使用，例如 Amazon Cognito 作為政策存放區中的身分來源。Verified Permissions 會從使用者 ID 或存取權杖中的宣告，將請求中的所有屬性填入委託人。您可以從身分來源中的使用者屬性或群組成員資格授權動作和資源。  
您無法在`IsAuthorizedWithToken`請求中包含群組或使用者主體類型的相關資訊。您必須將所有主體資料填入您提供的 JWT。

**[BatchIsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html)**  
`BatchIsAuthorized` 操作會在單一 API 請求中處理單一委託人或資源的多個授權決策。此操作會將請求分組為單一批次操作，可將[配額用量](quotas.md#quotas-tps.title)降至最低，並傳回最多 30 個複雜巢狀動作的授權決策。透過單一資源的批次授權，您可以篩選使用者可以對資源採取的動作。透過單一委託人的批次授權，您可以篩選使用者可採取動作的資源。

**[BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html)**  
`BatchIsAuthorizedWithToken` 操作會在一個 API 請求中處理單一委託人的多個授權決策。委託人是由您的政策存放區身分來源在 ID 或存取權杖中提供。此操作會將請求分組為單一批次操作，將[配額用量](quotas.md#quotas-tps.title)降至最低，並針對動作和資源傳回最多 30 個請求的授權決策。在您的政策中，您可以從其屬性或使用者目錄中的群組成員資格授權其存取權。  
如同 `IsAuthorizedWithToken`，您無法在`BatchIsAuthorizedWithToken`請求中包含群組或使用者主體類型的相關資訊。您必須將所有主體資料填入您提供的 JWT。

# 測試您的授權模型
<a name="authorization-testing"></a>

若要了解部署應用程式時 Amazon Verified Permissions 授權決策的影響，您可以在使用 [使用 Amazon Verified Permissions 測試工作台](test-bench.md)和 HTTPS REST API 請求對 Verified Permissions 開發政策時評估政策。測試工作台是 中的工具 AWS 管理主控台 ，用於評估政策存放區中的授權請求和回應。

Verified Permissions REST API 是您從概念理解到應用程式設計的下一個開發步驟。Verified Permissions API 接受具有 [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html)、[IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html) 和 [BatchIsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html) 的授權請求，做為區域[服務端點](https://docs.aws.amazon.com/general/latest/gr/verifiedpermissions.html)的[簽章 AWS API 請求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)。若要測試您的授權模型，您可以使用任何 API 用戶端產生請求，並驗證您的政策是否如預期傳回授權決策。

例如，您可以使用下列程序在範例政策存放`IsAuthorized`區中測試 。

------
#### [ Test bench ]

1. 在 Verified Permissions 主控台開啟 [Verified Permissions 主控台](https://console.aws.amazon.com/verifiedpermissions/)。從名為 **DigitalPetStore** 的**範本政策存放區建立政策存放**區。

1. 選取新政策存放區中的**測試工作台**。

1. 在 Verified Permissions API 參考中，從 [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html#API_IsAuthorized_Examples) 填入您的測試台請求。下列詳細資訊會複寫**範例 4** 中參考 **DigitalPetStore** 範例的條件。

   1. 將 Alice 設定為主體。針對**主體採取動作**，選擇 `DigitalPetStore::User`並輸入 `Alice`。

   1. 將 Alice 的角色設定為客戶。選擇**新增父**系，選擇 `DigitalPetStore::Role`，然後輸入客戶。

   1. 將資源設定為順序 "1234"。對於**委託人正在執行的資源**，選擇 `DigitalPetStore::Order`並輸入 `1234`。

   1. `DigitalPetStore::Order` 資源需要 `owner` 屬性。將 Alice 設定為訂單的擁有者。選擇`DigitalPetStore::User`並輸入 `Alice`

   1. Alice 請求檢視訂單。針對**委託人正在採取的動作**，選擇 `DigitalPetStore::Action::"GetOrder"`。

1. 選擇**執行授權請求**。在未修改的政策存放區中，此請求會導致 `ALLOW`決策。請注意傳回決策的**滿意政策**。

1. 從左側導覽列中選擇**政策**。檢閱靜態政策並說明**客戶角色 - 取得訂單**。

1. 觀察 Verified Permissions 允許請求，因為主體是客戶角色，並且是資源的擁有者。

------
#### [ REST API ]

1. 在 Verified Permissions 主控台開啟 [Verified Permissions 主控台](https://console.aws.amazon.com/verifiedpermissions/)。從名為 **DigitalPetStore** 的**範本政策存放區建立政策存放**區。

1. 請注意新**政策存放區的政策存放區 ID**。

1. 在 Verified Permissions API 參考中的 [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html#API_IsAuthorized_Examples) 中，複製參考 **DigitalPetStore** 範例**的範例 4** 請求內文。

1. 開啟您的 API 用戶端，並為政策存放區建立區域服務端點的請求。填入標頭，如[範例](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html#API_IsAuthorized_Examples)所示。

1. 在範例請求內文中貼上 ，並將 的值變更為您先前記下`policyStoreId`的政策存放區 ID。

1. 提交請求並檢閱結果。在預設 **DigitalPetStore** 政策存放區中，此請求會傳回 `ALLOW` 決策。

------

您可以在測試環境中變更政策、結構描述和請求，以變更結果並產生更複雜的決策。

1. 變更請求的方式會變更驗證許可的決策。例如，將 Alice 的角色變更為 `Employee`，或將順序 `owner` 1234 的屬性變更為 `Bob`。

1. 以影響授權決策的方式變更政策。例如，使用描述**客戶角色 - 取得訂單**來修改政策，以移除 `User` 必須是 擁有者的條件，`Resource`並修改請求，以便 `Bob`想要檢視訂單。

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

# 將您的授權模型與應用程式整合
<a name="authorization-sdk"></a>

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

**應用程式如何使用 Verified Permissions 授權請求**

1. 收集目前使用者的相關資訊。一般而言，使用者的詳細資訊會在已驗證工作階段的詳細資訊中提供，例如 JWT 或 Web 工作階段 Cookie。此使用者資料可能來自連結至政策存放區的 Amazon Cognito [身分來源](identity-sources.md#identity-sources.title)，或來自其他 [OpenID Connect (OIDC) 供應商](cognito-validation.md#identity-sources-other-idp.title)。

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

1. 判斷您的使用者想要採取的動作。

1. 使用使用者嘗試操作的委託人、動作、資源和實體，向 Verified Permissions 產生授權請求。Verified Permissions 會根據政策存放區中的政策評估請求，並傳回授權決策。

1. 您的應用程式會從 Verified Permissions 讀取允許或拒絕回應，並強制執行使用者請求的決定。

Verified Permissions API 操作內建於 AWS SDKs中。若要在應用程式中包含 Verified Permissions，請將所選語言的 AWS SDK 整合到應用程式套件中。

若要進一步了解 和 AWS SDKs，請參閱[適用於 的工具 Amazon Web Services](https://aws.amazon.com/tools/)。

以下是各種 AWS SDKs 中已驗證許可資源的文件連結。
+ [適用於 .NET 的 AWS SDK](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/VerifiedPermissions/NVerifiedPermissions.html)
+ [適用於 C\$1\$1 的 AWS SDK](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-verifiedpermissions/html/class_aws_1_1_verified_permissions_1_1_verified_permissions_client.html)
+ [適用於 Go 的 AWS SDK](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/verifiedpermissions)
+ [適用於 Java 的 AWS SDK](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/verifiedpermissions/package-summary.html)
+ [適用於 JavaScript 的 AWS SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/verifiedpermissions/)
+ [適用於 PHP 的 AWS SDK](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-verifiedpermissions-2021-12-01.html)
+ [適用於 Python (Boto) 的 AWS SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/verifiedpermissions.html)
+ [適用於 Ruby 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/VerifiedPermissions/Client.html)
+ [適用於 Rust 的 AWS SDK](https://docs.rs/aws-sdk-verifiedpermissions/latest/aws_sdk_verifiedpermissions/)

的下列 適用於 JavaScript 的 AWS SDK 範例`IsAuthorized`源自[於使用 Amazon Verified Permissions 和 Amazon Cognito 簡化精細授權](https://aws.amazon.com/blogs/security/simplify-fine-grained-authorization-with-amazon-verified-permissions-and-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"
                }
            }
         }
       ]
    }
});
```

**更多開發人員資源**
+ [Amazon Verified Permissions 研討會](https://catalog.workshops.aws/verified-permissions-in-action)
+ [Amazon Verified Permissions - 資源](https://aws.amazon.com/verified-permissions/resources/)
+ [使用 Amazon Verified Permissions 實作 ASP.NET Core 應用程式的自訂授權政策提供者](https://aws.amazon.com/blogs/dotnet/implement-a-custom-authorization-policy-provider-for-asp-net-core-apps-using-amazon-verified-permissions/)
+ [使用 Amazon Verified Permissions 為商業應用程式建置權利服務](https://aws.amazon.com/blogs/security/build-an-entitlement-service-for-business-applications-using-amazon-verified-permissions/)
+ [使用 Amazon Verified Permissions 和 Amazon Cognito 簡化精細授權](https://aws.amazon.com/blogs/security/simplify-fine-grained-authorization-with-amazon-verified-permissions-and-amazon-cognito/)