

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Verified Permissions での認可の実装
<a name="authorization"></a>

ポリシーストア、ポリシー、テンプレート、スキーマ、認可モデルを構築したら、Amazon Verified Permissions を使用してリクエストの承認を開始する準備が整います。Verified Permissions 認可を実装するには、 の認可ポリシーの設定 AWS をアプリケーションの統合と組み合わせる必要があります。Verified Permissions をアプリケーションと統合するには、 AWS SDK を追加し、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 セキュリティブログ*の「Use [Amazon Verified Permissions for fine-grained authorization at scale](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 ウェブトークン (JWTs) のユーザーデータから認可リクエストを生成します。Verified Permissions は、ポリシーストアの ID ソース Amazon Cognito として などの OIDC プロバイダーと直接連携します。Verified Permissions は、ユーザーの ID またはアクセストークンのクレームからリクエストのすべての属性をプリンシパルに入力します。ID ソースのユーザー属性またはグループメンバーシップからアクションとリソースを承認できます。  
`IsAuthorizedWithToken` リクエストにグループまたはユーザープリンシパルタイプに関する情報を含めることはできません。指定した JWT にすべてのプリンシパルデータを入力する必要があります。

**[BatchIsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html)**  
`BatchIsAuthorized` オペレーションは、1 つの API リクエストで 1 つのプリンシパルまたはリソースに対して複数の認可決定を処理します。このオペレーションは、[クォータの使用](quotas.md#quotas-tps.title)を最小限に抑え、最大 30 個の複雑なネストされたアクションごとに認可決定を返す 1 つのバッチオペレーションにリクエストをグループ化します。単一のリソースのバッチ認可を使用すると、ユーザーがリソースに対して実行できるアクションをフィルタリングできます。単一のプリンシパルのバッチ認可を使用すると、ユーザーがアクションを実行できるリソースをフィルタリングできます。

**[BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html)**  
`BatchIsAuthorizedWithToken` オペレーションは、1 つの API リクエストで 1 つのプリンシパルに対して複数の承認決定を処理します。プリンシパルは、ポリシーストア ID ソースによって ID またはアクセストークンで提供されます。このオペレーションは、[クォータの使用](quotas.md#quotas-tps.title)を最小限に抑え、アクションとリソースに対する最大 30 個のリクエストごとに認可決定を返す単一のバッチオペレーションにリクエストをグループ化します。ポリシーでは、属性またはユーザーディレクトリのグループメンバーシップからのアクセスを許可できます。  
と同様に`IsAuthorizedWithToken`、グループまたはユーザープリンシパルタイプに関する情報を`BatchIsAuthorizedWithToken`リクエストに含めることはできません。指定した JWT にすべてのプリンシパルデータを入力する必要があります。

# 認可モデルのテスト
<a name="authorization-testing"></a>

アプリケーションをデプロイする際の Amazon Verified Permissions 認可決定の影響を理解するために、 [Amazon Verified Permissions テストベンチの使用](test-bench.md)および Verified Permissions への HTTPS REST API リクエストを使用してポリシーを開発する際にポリシーを評価できます。テストベンチは、ポリシーストア内の認可リクエストとレスポンスを評価する 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. サンプルリクエスト本文に貼り付け、 の値を前にメモしたポリシーストア ID `policyStoreId` に変更します。

1. リクエストを送信し、結果を確認します。デフォルトの **DigitalPetStore** ポリシーストアでは、このリクエストは `ALLOW` 決定を返します。

------

テスト環境のポリシー、スキーマ、リクエストを変更して、結果を変更し、より複雑な決定を行うことができます。

1. Verified Permissions から決定を変更する方法でリクエストを変更します。例えば、Alice のロールを に変更`Employee`するか、順序 1234 の `owner` 属性を に変更します`Bob`。

1. 承認の決定に影響する方法でポリシーを変更します。例えば、**顧客ロール - 注文**を取得するという説明でポリシーを変更して、 が の所有者である`User`必要があるという条件を削除`Resource`し`Bob`、 が注文を表示するようにリクエストを変更します。

1. スキーマを変更して、ポリシーがより複雑な決定を行うことを許可します。Alice が新しい要件を満たすことができるようにリクエストエンティティを更新します。例えば、スキーマを編集して、 `User`が `ActiveUsers`または のメンバーになるようにします`InactiveUsers`。アクティブなユーザーのみが自分の注文を表示できるようにポリシーを更新します。Alice がアクティブまたは非アクティブなユーザーになるようにリクエストエンティティを更新します。

# 認可モデルとアプリケーションの統合
<a name="authorization-sdk"></a>

アプリケーションに Amazon Verified Permissions を実装するには、アプリケーションに適用するポリシーとスキーマを定義する必要があります。認可モデルを準備してテストしたら、次のステップは、適用時点から API リクエストの生成を開始することです。これを行うには、ユーザーデータを収集して認可リクエストに入力するようにアプリケーションロジックを設定する必要があります。

**アプリが Verified Permissions を使用してリクエストを承認する方法**

1. 現在のユーザーに関する情報を収集します。通常、ユーザーの詳細は、JWT やウェブセッション Cookie など、認証されたセッションの詳細で提供されます。このユーザーデータは、ポリシーストアにリンクされた Amazon Cognito [ID ソース](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[「Tools for Amazon Web Services](https://aws.amazon.com/tools/)」を参照してください。

以下は、さまざまな AWS SDKs。
+ [AWS SDK for .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/VerifiedPermissions/NVerifiedPermissions.html)
+ [AWS SDK for C\$1\$1](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-verifiedpermissions/html/class_aws_1_1_verified_permissions_1_1_verified_permissions_client.html)
+ [AWS SDK for Go](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/verifiedpermissions)
+ [AWS SDK for Java](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/verifiedpermissions/package-summary.html)
+ [AWS SDK for JavaScript](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/verifiedpermissions/)
+ [AWS SDK for PHP](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-verifiedpermissions-2021-12-01.html)
+ [AWS SDK for Python (Boto)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/verifiedpermissions.html)
+ [AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/VerifiedPermissions/Client.html)
+ [AWS SDK for Rust](https://docs.rs/aws-sdk-verifiedpermissions/latest/aws_sdk_verifiedpermissions/)

次の AWS SDK for JavaScript の例は、[Amazon Verified Permissions と Amazon Cognito を使用したきめ細かな認可の簡素化](https://aws.amazon.com/blogs/security/simplify-fine-grained-authorization-with-amazon-verified-permissions-and-amazon-cognito/)から`IsAuthorized`派生しています。

```
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/)