

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

# Verified Permissions ポリシーストアの作成
<a name="policy-stores-create"></a>

以下の方法で、ポリシーストアを作成できます。
+ **ガイド付きセットアップに従う** – 最初のポリシーを作成する前に、有効なアクションとプリンシパルタイプを持つリソースタイプを定義します。
+ ** API Gateway と ID ソースのセットアップ** – ID プロバイダー (IdP) でサインインするユーザーと、Amazon API Gateway API からのアクションとリソースエンティティを使用して、プリンシパルエンティティを定義します。このオプションは、ユーザーのグループメンバーシップまたは他の属性を使用してアプリケーションが API リクエストを承認する場合にお勧めします。
+ **サンプルポリシーストアから開始** – 事前定義されたサンプルプロジェクトポリシーストアを選択します。Verified Permissions について学習していて、サンプルポリシーを表示およびテストしたい場合は、このオプションをお勧めします。
+ **空のポリシーストアを作成する** – スキーマとすべてのアクセスポリシーを自分で定義します。ポリシーストアの設定にすでに慣れている場合は、このオプションをお勧めします。

------
#### [ Guided setup ]

****ガイド付き設定**方法を使用してポリシーストアを作成するには**

ガイド付き設定ウィザードの指示に従って、ポリシーストアの最初のイテレーションを作成します。最初のリソースタイプのスキーマを作成し、そのリソースタイプに適用できるアクションと、権限を付与するプリンシパルタイプを記述します。次に、最初のポリシーを作成します。このウィザードを完了すると、ポリシーストアに追加したり、スキーマを拡張して他のリソースやプリンシパルタイプを記述したり、追加のポリシーやテンプレートを作成したりできます。

1. [Verified Permissions コンソール](https://console.aws.amazon.com/verifiedpermissions)で、**新しいポリシーストアの作成**を選択します。

1. **開始オプション**セクションで、**ガイド付きセットアップ**を選択します。

1. **ポリシーストアの説明**を入力します。このテキストは、*Weather updates web application* など、現在のポリシーストアの 関数へのわかりやすい参照として、組織に適したものにすることができます。

1. 「**詳細**」セクションに、スキーマの**名前空間**を入力します。名前空間の詳細については、「」を参照してください[名前空間の定義](terminology-differences-avp-cedar.md#differences-namespaces)。

1. [**次へ**] を選択します。

1. 「**リソースタイプ**」ウィンドウに、リソースタイプの名前を入力します。たとえば、 は *Weather updates ウェブアプリケーションの*リソース`currentTemperature`である可能性があります。

1. (オプション) [**属性を追加**] を選択してリソース属性を追加します。リソースの各属性の**属性名**を入力し、**属性タイプ**を選択します。各属性が**必須**かどうかを選択します。たとえば、 `temperatureFormat`は`currentTemperature`リソースの属性で、華氏または摂氏のいずれかになります。リソースタイプに追加された属性を削除するには、属性の横にある [**削除**] を選択します。

1. 「**アクション**」フィールドに、指定したリソースタイプに対して認証するアクションを入力します。リソースタイプにアクションを追加するには、「**アクションを追加**」を選択します。たとえば、 は*「Weather updates web application*」のアクション`viewTemperature`である場合があります。リソースタイプに追加されたアクションを削除するには、アクションの横にある [**削除**] を選択します。

1. 「**プリンシパルタイプの名前**」フィールドに、リソースタイプに指定されたアクションを使用するプリンシパルの名前を入力します。デフォルトでは、**ユーザーは**このフィールドに追加されますが、置き換えることができます。

1. [**次へ**] を選択します。

1. 「**プリンシパルタイプ**」ウィンドウで、プリンシパルタイプのID ソースを選択します。
   + プリンシパルの ID と属性を Verified Permissions アプリケーションから直接提供する場合は、「**カスタム**」を選択します。属性を追加するには、[**属性を追加**] を選択します。Verified Permissions では、スキーマに対してポリシーを検証するときに、指定された属性値を使用します。プリンシパルタイプに追加された属性を削除するには、属性の横にある**削除**を選択します。
   + プリンシパルの ID と属性が によって生成された ID またはアクセストークンから提供される場合は、**Cognito ユーザープール**を選択します Amazon Cognito。[**ユーザープールを接続**] を選択します。**AWS リージョン** を選択し、接続先の**ユーザープールのユーザープール ID** を入力します。 Amazon Cognito **[接続]**を選択します。詳細については、[「Amazon Cognito デベロッパーガイド」の「Amazon Verified Permissions による認可](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-authorization-with-avp.html)」を参照してください。 *Amazon Cognito *
   + プリンシパルの ID と属性が ID トークンやアクセストークンから抽出され、**外部 OIDC プロバイダー**によって生成された場合は、外部 OIDC プロバイダーを選択し、プロバイダーとトークンの詳細を追加します。

1. [**次へ**] を選択します。

1. **ポリシーの詳細**セクションに、最初の Cedar ポリシーに関する**ポリシーの説明**をオプションで入力します。

1. 「**プリンシパルの範囲**」フィールドで、ポリシーから権限を付与されるプリンシパルを選択します。
   + 特定のプリンシパルにポリシーを適用するには、「**特定のプリンシパル**」を選択します。「**アクションの実行を許可するプリンシパル**」フィールドでプリンシパルを選択し、プリンシパルのエンティティ ID を入力します。たとえば、 は*、Weather updates ウェブアプリケーションの*エンティティ識別子`user-id`である場合があります。
**注記**  
を使用している場合 Amazon Cognito、エンティティ識別子は の形式である必要があります`<userpool-id>|<sub>`。
   + ポリシーストア内のすべてのプリンシパルにポリシーを適用するには、「**すべてのプリンシパル**」を選択します。

1. ［**リソースの範囲**］フィールドで、指定したプリンシパルにアクションを許可するリソースを選択します。
   + 特定のリソースにポリシーを適用するには、「**特定のリソース**」を選択します。「**このポリシーが適用される必要があるリソース**」フィールドでリソースを選択し、リソースのエンティティ ID を入力します。たとえば、 は *Weather updates ウェブアプリケーションの*エンティティ識別子`temperature-id`である場合があります。
   + ポリシーストア内のすべてのリソースにポリシーを適用するには、[**すべてのリソース**] を選択します。

1. ［**アクションの範囲**］フィールドで、指定したプリンシパルに実行を許可するアクションを選択します。
   + 特定のアクションにポリシーを適用するには、「**特定のアクションセット**」を選択します。「**このポリシーが適用される必要があるアクション**」フィールドで、アクションの横にあるチェックボックスを選択します。
   + ポリシーストア内のすべてのアクションにポリシーを適用するには、[**すべてのアクション**] を選択します。

1. **ポリシープレビュー**セクションでポリシーを確認してください。[**ポリシーストアを作成**]を選択します。

------
#### [ Set up with API Gateway and an identity source ]

****でのセットアップ API Gateway と ID ソース**設定方法を使用してポリシーストアを作成するには**

 API Gateway オプションは、ユーザーのグループまたは*ロール*から認可を決定するように設計された Verified Permissions ポリシーを使用して APIs を保護します。このオプションは、ID ソースグループによる認可をテストするためのポリシーストアと、Lambda オーソライザーによる API を構築します。

IdP のユーザーとそのグループは、プリンシパル (ID トークン) またはコンテキスト (アクセストークン) になります。API のメソッドとパスは API Gateway 、ポリシーが承認するアクションになります。アプリケーションがリソースになります。このワークフローの結果として、Verified Permissions はポリシーストア、Lambda 関数、API Lambda オーソライザーを作成します。このワークフローが完了したら、Lambda [オーソライザー](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)を API に割り当てる必要があります。

1. [Verified Permissions コンソール](https://console.aws.amazon.com/verifiedpermissions)で、**新しいポリシーストアの作成**を選択します。

1. Starting **options** セクションで、**Set up with API Gateway and an identity source** を選択し、**Next** を選択します。

1. **リソースとアクションのインポート**ステップの **API** で、ポリシーストアのリソースとアクションのモデルとして機能する API を選択します。

   1. API で設定された**ステージからデプロイ**ステージを選択し、**API のインポート**を選択します。API ステージの詳細については、[Amazon API Gatewayデベロッパーガイド」の「REST API のステージのセットアップ](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-stages.html)」を参照してください。

   1. **インポートされたリソースとアクションのマップ**をプレビューします。

   1. リソースまたはアクションを更新するには、 API Gateway コンソールで API パスまたはメソッドを変更し、API の**インポート**を選択して更新を確認します。

   1. 選択内容に満足したら、**次**へを選択します。

1. **ID ソース**で、**ID プロバイダータイプ**を選択します。 Amazon Cognito ユーザープールまたは OpenID Connect (OIDC) IdP タイプを選択できます。

1. [**Amazon Cognito**] を選択した場合:

   1. ポリシーストアと同じ AWS リージョン および AWS アカウント のユーザープールを選択します。

   1. 承認のために送信する **API に渡すトークンタイプ**を選択します。どちらのトークンタイプにも、この API リンク認可モデルの基盤であるユーザーグループが含まれています。

   1. **アプリクライアントの検証**では、ポリシーストアの範囲をマルチテナントユーザープール内の Amazon Cognito アプリクライアントのサブセットに制限できます。ユーザープール内の 1 つ以上の指定されたアプリケーションクライアントによる認証をユーザーに要求するには、**予想されるアプリケーションクライアント IDs を持つトークンのみを受け入れる**を選択します。ユーザープールで認証するユーザーを受け入れるには、**アプリクライアント IDs を検証しない**を選択します。

   1. [**次へ**] を選択します。

1. **外部 OIDC プロバイダーを選択した場合:**

   1. **発行者 URL** に、OIDC 発行者の URL を入力します。これは、認可サーバー、署名キー、および などのプロバイダーに関するその他の情報を提供するサービスエンドポイントです`https://auth.example.com`。発行者 URL は、 で OIDC 検出ドキュメントをホストする必要があります`/.well-known/openid-configuration`。

   1. **トークンタイプ**で、アプリケーションが承認のために送信する OIDC JWT のタイプを選択します。詳細については、[「スキーマへの Amazon Cognito トークン](cognito-map-token-to-schema.md)のマッピング」および[「スキーマへの OIDC トークンのマッピング](oidc-map-token-to-schema.md)」を参照してください。

   1. (オプション) **トークンクレーム - オプション****で、トークンクレームの追加**を選択し、トークンの名前を入力し、値タイプを選択します。

   1. **ユーザートークンとグループトークンのクレーム**で、次の操作を行います。

      1. ID ソースの**トークンにユーザークレーム名**を入力します。これは、通常`sub`、評価されるエンティティの一意の識別子を保持する ID またはアクセストークンからのクレームです。接続された OIDC IdP の ID は、ポリシーストアのユーザータイプにマッピングされます。

      1. ID ソースの**トークンにグループクレーム名**を入力します。これは、通常`groups`、ユーザーのグループのリストを含む ID またはアクセストークンからのクレームです。ポリシーストアは、グループメンバーシップに基づいてリクエストを承認します。

   1. **対象者の検証**で、ポリシーストアが認可リクエストで受け入れる値を選択して`Add value`追加します。

   1. [**次へ**] を選択します。

1. を選択した場合**Amazon Cognito**、Verified Permissions はユーザープールにグループをクエリします。OIDC プロバイダーの場合は、グループ名を手動で入力します。**グループへのアクションの割り当て**ステップでは、グループメンバーがアクションを実行できるようにするポリシーストアのポリシーを作成します。

   1. ポリシーに含めるグループを選択または追加します。

   1. 選択した各グループにアクションを割り当てます。

   1. [**次へ**] を選択します。

1. **アプリ統合のデプロイ**で、後で Lambda オーソライザーを手動でアタッチするか、Verified Permissions で今すぐアタッチするかを選択し、Verified Permissions がポリシーストアと Lambda オーソライザーを作成するために実行する手順を確認します。

1. 新しいリソースを作成する準備ができたら、**ポリシーストアの作成**を選択します。

1. **ポリシーストアのステータス**ステップをブラウザで開いたままにして、Verified Permissions によるリソース作成の進行状況をモニタリングします。

1. 通常約 1 時間後、または **Lambda オーソライザーのデプロイ**ステップに **Success** と表示されたら、オーソライザーを手動でアタッチすることを選択した場合は、オーソライザーを設定します。

   Verified Permissions は、API に Lambda 関数と Lambda オーソライザーを作成します。**API **を開く を選択して、API に移動します。

   Lambda オーソライザーを割り当てる方法については、*Amazon API Gateway デベロッパーガイド*」の[API Gateway 「Lambda オーソライザー](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)を使用する」を参照してください。

   1. API **のオーソライザー**に移動し、Verified Permissions が作成したオーソライザーの名前を書き留めます。

   1. **リソース**に移動し、API で最上位のメソッドを選択します。

   1. **メソッドリクエスト設定**で**編集**を選択します。

   1. **オーソライザー**を前にメモしたオーソライザー名に設定します。

   1. **HTTP リクエストヘッダー**を展開し、**名前** または を入力し`AUTHORIZATION`、**必須** を選択します。

   1. API ステージをデプロイします。

   1. 変更**を保存します**。

1. **ID ソースの選択**ステップで選択した**トークンタイプの**ユーザープールトークンを使用してオーソライザーをテストします。ユーザープールのサインインとトークンの取得の詳細については、*Amazon Cognito デベロッパーガイド*」の[「ユーザープールの認証フロー](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html)」を参照してください。

1. API へのリクエストの`AUTHORIZATION`ヘッダーでユーザープールトークンを使用して認証を再度テストします。

1. 新しいポリシーストアを確認します。ポリシーを追加および絞り込みます。

------
#### [ Sample policy store ]

****サンプルポリシーストア**設定方法を使用してポリシーストアを作成するには**

1. **開始オプション**セクションで、**サンプルポリシーストア**を選択します。

1. 「**サンプルプロジェクト**」セクションで、使用するサンプルのVerified Permissions アプリケーションのタイプを選択します。
   + **PhotoFlash** は、ユーザーが個々の写真やアルバムを友人と共有できるようにする、顧客向けのサンプル Web アプリケーションです。ユーザーは、自分の写真の閲覧、コメント、再共有を誰に許可するかについて、きめ細かい権限を設定できます。アカウントオーナーは、友達のグループを作成したり、写真をアルバムにまとめたりすることもできます。
   + **DigitalPetStoreは**、誰でも登録して顧客になることができるサンプルアプリケーションです。顧客は販売するペットの追加、ペットの検索、注文を行うことができます。ペットを追加したお客様は、ペットの飼い主として記録されます。ペットの飼い主は、ペットの詳細を更新したり、ペットの画像をアップロードしたり、ペットリストを削除したりできます。注文した顧客は注文所有者として記録されます。注文所有者は注文の詳細を確認したり、注文をキャンセルしたりできます。ペットショップのマネージャーには管理者権限があります。
**注記**  
**DigitalPetStore** サンプルポリシーストアにはポリシーテンプレートは含まれていません。**PhotoFlash** と **TinyTodo** のサンプルポリシーストアにはポリシーテンプレートが含まれています。
   + **TinyToDo** は、ユーザがタスクやタスクリストを作成できるようにするサンプルアプリケーションです。リスト所有者はリストを管理および共有したり、リストを閲覧または編集できるユーザーを指定したりできます。

1. サンプルポリシーストアのスキーマの名前空間は、選択したサンプルプロジェクトに基づいて自動的に生成されます。

1. [**ポリシーストアを作成**]を選択します。

   ポリシーストアは、選択したサンプルポリシーストア用のポリシーとスキーマを使用して作成されます。サンプルポリシーストア用に作成できる、テンプレートにリンクされたポリシーの詳細については、[Amazon Verified Permissions テンプレートにリンクされたポリシーの例](policy-templates-example-policies.md)を参照してください。

------
#### [ Empty policy store ]

**「**空のポリシーストア**」設定方法を使用してポリシーストアを作成するには**

1. **開始オプション**セクションで、**空のポリシーストア**を選択します。

1. [**ポリシーストアを作成**]を選択します。

空のポリシーストアはスキーマなしで作成されます。つまり、ポリシーは検証されません。ポリシー ストアのスキーマの更新の詳細については、「[Amazon Verified Permissions ポリシーストアスキーマ](schema.md)」を参照してください。

ポリシーストアのポリシーの作成に関する詳細については、「[Amazon Verified Permissions 静的ポリシーの作成](policies-create.md)」と「[Amazon Verified Permissions テンプレートリンクポリシーの作成](policy-templates-create-policy.md)」を参照してください。

------
#### [ AWS CLI ]

**AWS CLIを使用して空のポリシーストアを作成するには。**  
ポリシーストアは、`create-policy-store`オペレーションを使用して作成できます。

**注記**  
を使用して作成したポリシーストア AWS CLI は空です。  
スキーマを追加するには、[Amazon Verified Permissions ポリシーストアスキーマ](schema.md)を参照してください。
 ポリシーを追加するには、[Amazon Verified Permissions 静的ポリシーの作成](policies-create.md)を参照してください。
ポリシーテンプレートを追加するには、[Amazon Verified Permissions ポリシーテンプレートの作成](policy-templates-create.md)を参照してください。

```
$ aws verifiedpermissions create-policy-store \
    --validation-settings "mode=STRICT"
{
    "arn": "arn:aws:verifiedpermissions::123456789012:policy-store/PSEXAMPLEabcdefg111111",
    "createdDate": "2023-05-16T17:41:29.103459+00:00",
    "lastUpdatedDate": "2023-05-16T17:41:29.103459+00:00",
    "policyStoreId": "PSEXAMPLEabcdefg111111"
}
```

------
#### [ AWS SDKs ]

`CreatePolicyStore`API を使用してポリシーストアを作成できます。詳細については、Amazon Verified Permissions API リファレンスガイドの「[CreatePolicyStore](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreatePolicyStore.html)」を参照してください。

------

# AWS SDK を使用した Rust での Amazon Verified Permissions の実装
<a name="code-samples-rust"></a>

このトピックでは、 SDK を使用して Rust で Amazon Verified Permissions を実装する AWS 実例を示します。この例では、ユーザーが写真を表示できるかどうかをテストできる認可モデルを開発する方法を示します。サンプルコードは、 の [aws-sdk-verifiedpermissions](https://docs.rs/aws-sdk-verifiedpermissions/latest/aws_sdk_verifiedpermissions/) クレートを使用します。これは[AWS SDK for Rust](https://github.com/awslabs/aws-sdk-rust)、 を操作するための堅牢なツールセットを提供します AWS のサービス。

## 前提条件
<a name="rust-prereqs"></a>

 開始する前に、システムに [AWS CLI](https://aws.amazon.com/cli/) が設定されており、Rust に精通していることを確認してください。
+ のインストール手順については AWS CLI、[AWS 「CLI インストールガイド](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html)」を参照してください。
+ の設定手順については AWS CLI、[「」の「 の設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-quickstart.html)」および[「 の設定と認証情報ファイルの設定 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-profiles.html)」を参照してください。
+ Rust の詳細については、[rust-lang.org](https://www.rust-lang.org/) および [AWS SDK for Rust デベロッパーガイド](https://docs.aws.amazon.com//sdk-for-rust/latest/dg/welcome.html)を参照してください。

環境の準備ができたら、Rust で Verified Permissions を実装する方法について説明します。

## サンプルコードをテストする
<a name="rust-code"></a>

サンプルコードは以下を実行します。
+ と通信するように SDK クライアントを設定します AWS
+ [ポリシーストア](policy-stores.md)を作成します。
+ [スキーマ](schema.md)を追加してポリシーストアの構造を定義します。
+ 承認リクエストをチェックする[ポリシー](policies.md)を追加します
+ テスト[認可リクエスト](authorization.md)を送信して、すべてが正しく設定されていることを確認します

**サンプルコードをテストするには**

1. Rust プロジェクトを作成します。

1. の既存のコードを次のコード`main.rs`に置き換えます。

   ```
   use std::time::Duration;
   use std::thread::sleep;
   use aws_config::BehaviorVersion;
   use aws_sdk_verifiedpermissions::Client;
   use aws_sdk_verifiedpermissions::{
       operation::{
           create_policy::CreatePolicyOutput,
           create_policy_store::CreatePolicyStoreOutput,
           is_authorized::IsAuthorizedOutput,
           put_schema::PutSchemaOutput,
       },
       types::{
           ActionIdentifier, EntityIdentifier, PolicyDefinition, SchemaDefinition, StaticPolicyDefinition, ValidationSettings
       },
   };
   
   //Function that creates a policy store in the client that's passed
   async fn create_policy_store(client: &Client, valid_settings: &ValidationSettings)-> CreatePolicyStoreOutput {
       let policy_store = client.create_policy_store().validation_settings(valid_settings.clone()).send().await;
       return policy_store.unwrap();
   }
   
   //Function that adds a schema to the policy store in the client
   async fn put_schema(client: &Client, ps_id: &str, schema: &str) -> PutSchemaOutput {
       let schema = client.put_schema().definition(SchemaDefinition::CedarJson(schema.to_string())).policy_store_id(ps_id.to_string()).send().await;
       return schema.unwrap();
   }
   
   //Function that creates a policy in the policy store in the client
   async fn create_policy(client: &Client, ps_id: &str, policy_definition:&PolicyDefinition) -> CreatePolicyOutput {
       let create_policy = client.create_policy().definition(policy_definition.clone()).policy_store_id(ps_id).send().await;
       return create_policy.unwrap();
   }
   
   //Function that tests the authorization request to the policy store in the client
   async fn authorize(client: &Client, ps_id: &str, principal: &EntityIdentifier, action: &ActionIdentifier, resource: &EntityIdentifier) -> IsAuthorizedOutput {
       let is_auth = client.is_authorized().principal(principal.to_owned()).action(action.to_owned()).resource(resource.to_owned()).policy_store_id(ps_id).send().await;
       return is_auth.unwrap();
   }
   
   #[::tokio::main]
   async fn main() -> Result<(), aws_sdk_verifiedpermissions::Error> {
   
   //Set up SDK client
       let config = aws_config::load_defaults(BehaviorVersion::latest()).await;
       let client = aws_sdk_verifiedpermissions::Client::new(&config);
   
   //Create a policy store
       let valid_settings = ValidationSettings::builder()
       .mode({aws_sdk_verifiedpermissions::types::ValidationMode::Strict
       })
       .build()
       .unwrap();
       let policy_store = create_policy_store(&client, &valid_settings).await;
       println!(
       "Created Policy store with ID: {:?}",
       policy_store.policy_store_id
       );
   
   //Add schema to policy store
       let schema= r#"{
           "PhotoFlash": {
               "actions": {
                   "ViewPhoto": {
                       "appliesTo": {
                           "context": {
                               "type": "Record",
                               "attributes": {}
                           },
                           "principalTypes": [
                               "User"
                           ],
                           "resourceTypes": [
                               "Photo"
                           ]
                       },
                       "memberOf": []
                   }
               },
               "entityTypes": {
                   "Photo": {
                       "memberOfTypes": [],
                       "shape": {
                           "type": "Record",
                           "attributes": {
                               "IsPrivate": {
                                   "type": "Boolean"
                               }
                           }
                       }
                   },
                   "User": {
                       "memberOfTypes": [],
                       "shape": {
                           "attributes": {},
                           "type": "Record"
                       }
                   }
               }
           }
       }"#;
       let put_schema = put_schema(&client, &policy_store.policy_store_id, schema).await;
       println!(
           "Created Schema with Namespace: {:?}",
           put_schema.namespaces
       ); 
   
   //Create policy
       let policy_text = r#"
           permit (
               principal in PhotoFlash::User::"alice",
               action == PhotoFlash::Action::"ViewPhoto",
               resource == PhotoFlash::Photo::"VacationPhoto94.jpg"
           );
           "#;
       let policy_definition = PolicyDefinition::Static(StaticPolicyDefinition::builder().statement(policy_text).build().unwrap()); 
       let policy = create_policy(&client, &policy_store.policy_store_id, &policy_definition).await;
       println!(
           "Created Policy with ID: {:?}",
           policy.policy_id
       ); 
   
   //Break to make sure the resources are created before testing authorization
       sleep(Duration::new(2, 0));
   
   //Test authorization
       let principal= EntityIdentifier::builder().entity_id("alice").entity_type("PhotoFlash::User").build().unwrap();
       let action = ActionIdentifier::builder().action_type("PhotoFlash::Action").action_id("ViewPhoto").build().unwrap();
       let resource = EntityIdentifier::builder().entity_id("VacationPhoto94.jpg").entity_type("PhotoFlash::Photo").build().unwrap();
       let auth = authorize(&client, &policy_store.policy_store_id, &principal, &action, &resource).await;
       println!(
           "Decision: {:?}",
           auth.decision
           );
           println!(
           "Policy ID: {:?}",
           auth.determining_policies
           );
        Ok(())   
   }
   ```

1. ターミナルに `cargo run` を入力してコードを実行します。

コードが正しく実行されると、ターミナルに決定ポリシーのポリシー ID が`Decision: Allow`続きます。これは、ポリシーストアが正常に作成され、 AWS SDK for Rust を使用してテストされたことを意味します。

## リソースをクリーンアップする
<a name="rust-clean-up"></a>

ポリシーストアの探索が完了したら、削除します。

**ポリシーストアを削除するには**  
`delete-policy-store` オペレーションを使用してポリシーストアを削除し、 を削除するポリシーストア ID `PSEXAMPLEabcdefg111111`に置き換えます。

```
$ aws verifiedpermissions delete-policy-store \
    --policy-store-id PSEXAMPLEabcdefg111111
```

このコマンドが成功した場合、出力は生成されません。