

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

# Amazon Verified Permissions ポリシー
<a name="policies"></a>

*ポリシー*は、*プリンシパル*が*リソース*に対して 1 つ以上の*アクション*を実行することを許可または禁止するステートメントです。各ポリシーは、他のすべてのポリシーとは独立して評価されます。Cedar ポリシーの構造と評価方法の詳細については、「Cedar ポリシー言語リファレンスガイド」の「[スキーマに対する Cedar ポリシーの検証](https://docs.cedarpolicy.com/policies/validation.html)」を参照してください。

オプションで、ポリシーにポリシー名を割り当てることができます。ポリシー名は、ポリシーストア内のすべてのポリシーで一意で、プレフィックスが である必要があります`name/`。`policyId` パラメータを受け入れるコントロールプレーンオペレーションでは、ポリシー ID の代わりにポリシー名を使用できます。次の例では、ポリシー名を使用して でポリシーを取得します`GetPolicy`。

```
$ aws verifiedpermissions get-policy \
    --policy-id name/example-policy \
    --policy-store-id PSEXAMPLEabcdefg111111
```

**重要**  
プリンシパル、リソース、アクションを参照する Cedar ポリシーを作成する場合、それらの各要素に使用される一意の識別子を定義できます。次のベスト プラクティスに従うことを強くお勧めします。  
**すべてのプリンシパル識別子とリソース識別子に汎用一意識別子 (UUIDs) を使用します。**  
たとえば、ユーザー `jane` が会社を退職し、後で別のユーザーに `jane` という名前を使用させた場合、その新しいユーザーは、まだ `User::"jane"` を参照しているポリシーによって付与されているすべてのものに自動的にアクセスできるようになります。Cedar は、新しいユーザーと古いユーザーを区別できません。これは、プリンシパル ID とリソース ID の両方に適用されます。ポリシーに古い ID が含まれているために意図せずアクセスを許可してしまうことがないよう、常に一意性が保証され、再利用されない識別子を使用してください。  
エンティティに UUID を使用する場合は、その後に//コメント指定子とエンティティの「わかりやすい」名前を付けることをお勧めします。これにより、ポリシーがわかりやすくなります。例: principal == Role::"a1b2c3d4-e5f6-a1b2-c3d4-EXAMPLE11111"、// administrators
**プリンシパル、リソースの固有識別子の一部に、個人を特定する情報、機密性の高い情報を含めないでください。**これらの識別子は、 AWS CloudTrail 証跡で共有されているログエントリに含まれます。

**Topics**
+ [Amazon Verified Permissions 静的ポリシーの作成](policies-create.md)
+ [Amazon Verified Permissions の静的ポリシーの編集](policies-edit.md)
+ [コンテキストの追加](context.md)
+ [Amazon Verified Permissions テストベンチの使用](test-bench.md)
+ [Amazon Verified Permissions](policies-examples.md)

# Amazon Verified Permissions 静的ポリシーの作成
<a name="policies-create"></a>

プリンシパルの静的ポリシーを作成して、アプリケーションの指定されたリソースに対して指定されたアクションを実行することをプリンシパルに許可または禁止できます。静的ポリシーには、 `principal``resource`と に特定の値が含まれており、認可の決定に使用できる準備ができています。

------
#### [ AWS マネジメントコンソール ]

**静的ポリシーを作成するには**

1. [Verified Permissions コンソール](https://console.aws.amazon.com/verifiedpermissions/)を開きます。ポリシーストアを選択します。

1. 左側のナビゲーションペインで、**[ポリシー]** を選択します。

1. [**ポリシーを作成**] を選択し、次に [**静的ポリシーを作成**] を選択します。
**注記**  
使用するポリシーステートメントがある場合は、**ステップ 8 **に進み、次のページの**ポリシー**セクションにポリシーを貼り付けます。

1. 「**ポリシー効果**」セクションで、リクエストがポリシーに一致した場合にポリシーを「**許可**」か「**禁止**」にするかを選択します。**許可**を選択すると、ポリシーはプリンシパルがリソースに対してアクションを実行することを許可します。逆に、**Forbid **を選択した場合、ポリシーはプリンシパルがリソースに対してアクションを実行することを許可しません。

1. 「**プリンシパルの範囲**」フィールドで、ポリシーを適用するプリンシパルの範囲を選択します。
   + **特定のプリンシパル**にポリシーを適用するには、「特定のプリンシパル」を選択します。ポリシーで指定されたアクションを実行することを許可または禁止するプリンシパルのエンティティタイプと識別子を指定します。
   + プリンシパルのグループにポリシーを適用するには、「**プリンシパルのグループ**」を選択します。「**プリンシパルのグループ**」フィールドにプリンシパルのグループ名を入力します。
   + ポリシーストア内のすべてのプリンシパルにポリシーを適用するには、「**すべてのプリンシパル**」を選択します。

1. ［**リソース範囲**］フィールドで、ポリシーを適用するリソースの範囲を選択します。
   + **特定のリソース**にポリシーを適用するには、「特定のリソース」を選択します。ポリシーを適用するリソースのエンティティタイプと識別子を指定します。
   + [**リソースグループ**] を選択して、ポリシーをリソースグループに適用します。「リソースグループ」**フィールドにリソースグループ名を入力します**。
   + ポリシーストア内のすべてのリソースにポリシーを適用するには、[**すべてのリソース**] を選択します。

1. ［**アクションの範囲**］セクションで、ポリシーを適用するリソースの範囲を選択します。
   + [**特定のアクションセット**] を選択して、ポリシーをアクションセットに適用します。アクションの横にあるチェックボックスを選択して、ポリシーを適用します。
   + ポリシーストア内のすべてのアクションにポリシーを適用するには、[**すべてのアクション**] を選択します。

1. **[次へ]**をクリックします。

1. 「**ポリシー**」セクションで、Cedar ポリシーを確認します。「**フォーマット**」を選択すると、ポリシーの構文を推奨間隔とインデントでフォーマットできます。詳細については、「Cedar ポリシー言語リファレンスガイド」の「[Cedar における基本ポリシー構築](https://docs.cedarpolicy.com/policies/syntax-policy.html)」を参照してください。

1. 「**詳細**」セクションに、ポリシーの説明を任意で入力します。

1. [**Create policy**] (ポリシーの作成) を選択します。

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

**静的ポリシーを作成するには**  
[CreatePolicy](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreatePolicy.html) オペレーションを使用して、静的インスタンスを作成できます。次の例は、単純な静的ポリシーを作成します。

```
$ aws verifiedpermissions create-policy \
    --definition "{ \"static\": { \"Description\": \"MyTestPolicy\", \"Statement\": \"permit(principal,action,resource) when {principal.owner == resource.owner};\"}}" \
    --policy-store-id PSEXAMPLEabcdefg111111
{
"Arn": "arn:aws:verifiedpermissions::123456789012:policy/PSEXAMPLEabcdefg111111/SPEXAMPLEabcdefg111111",
    "createdDate": "2023-05-16T20:33:01.730817+00:00",
    "lastUpdatedDate": "2023-05-16T20:33:01.730817+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC"
}
```

**ポリシー名でポリシーを作成するには**  
オプションで、ポリシーの作成時にポリシー名を指定できます。名前は、ポリシーストア内のすべてのポリシーで一意で、プレフィックスが である必要があります`name/`。ポリシー ID の代わりに名前を使用できます。

```
$ aws verifiedpermissions create-policy \
    --definition "{ \"static\": { \"Statement\": \"permit(principal, action, resource in Album::\\\"public_folder\\\");\"}}" \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --name name/example-policy
{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:33:37.382907+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "resource": {
        "entityId": "public_folder",
        "entityType": "Album"
    }
}
```

**注記**  
ポリシーストア内の別のポリシーに既に関連付けられている名前を指定すると、`ConflictException`エラーが発生します。

------

# Amazon Verified Permissions の静的ポリシーの編集
<a name="policies-edit"></a>

ポリシーストアで既存の静的ポリシーを編集できます。直接更新できるのは、静的ポリシーのみです。テンプレートにリンクされたポリシーを変更するには、ポリシーテンプレートを更新する必要があります。詳細については、「[Amazon Verified Permissions ポリシーテンプレートの編集](policy-templates-edit.md)」を参照してください。

静的ポリシーの次の要素を変更できます。
+ ポリシーが参照する`action`。
+ `when`や`unless`などの条件句。

静的ポリシーの次の要素は変更できません。これらの要素のいずれかを変更するには、ポリシーを削除して再作成する必要があります。
+ 静的ポリシーからテンプレートにリンクされたポリシーへのポリシー。
+ `permit` または からの静的ポリシーの効果`forbid`。
+ 静的ポリシーによって参照される`principal`。
+ 静的ポリシーによって参照される`resource`。

------
#### [ AWS マネジメントコンソール ]

**静的ポリシーを編集するには**

1. [Verified Permissions コンソール](https://console.aws.amazon.com/verifiedpermissions/)を開きます。ポリシーストアを選択します。

1. 左側のナビゲーションペインで、**[ポリシー]** を選択します。

1. 編集する静的ポリシーの横にあるラジオボタンを選択して、[**編集**] を選択します。

1. 「**ポリシー本文**」セクションで、静的ポリシーの `action` または 条件句を更新します。ポリシーのポリシー効果、`principal`、または`resource`は更新できません。

1. [**ポリシーを更新**] を選択します。
**注記**  
ポリシーストアで[ポリシー検証](policy-validation-mode.md)が有効になっている場合、静的ポリシーを更新すると、Verified Permissions はポリシーストア内のスキーマと照合してポリシーを検証します。更新された静的ポリシーが検証に合格しない場合、操作は失敗し、更新は保存されません。

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

**静的ポリシーを編集するには**  
[UpdatePolicy](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdatePolicy.html) オペレーションを使用して静的ポリシーを編集できます。次の例では、単純な静的ポリシーを編集します。

この例では、`definition.txt`ファイルを使用してポリシー定義を格納しています。

```
{
    "static": {
        "description":  "Grant everyone of janeFriends UserGroup access to the vacationFolder Album",
        "statement": "permit(principal in UserGroup::\"janeFriends\", action, resource in Album::\"vacationFolder\" );"
    }
}
```

以下のコマンドはそのファイルを参照します。

```
$ aws verifiedpermissions create-policy \
    --definition file://definition.txt \
    --policy-store-id PSEXAMPLEabcdefg111111

{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:33:37.382907+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "principal": {
        "entityId": "janeFriends",
        "entityType": "UserGroup"
    },
    "resource": {
        "entityId": "vacationFolder",
        "entityType": "Album"
    }
}
```

**ポリシーの名前を更新するには**  
ポリシーを更新するときに、ポリシー名を設定または更新できます。名前は、ポリシーストア内のすべてのポリシーで一意で、プレフィックスが である必要があります`name/`。更新リクエストに名前フィールドを含めない場合、既存の名前は変更されません。名前を削除するには、空の文字列に設定します。

```
$ aws verifiedpermissions update-policy \
    --policy-id SPEXAMPLEabcdefg111111 \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --definition file://definition.txt \
    --name name/example-policy
{
    "createdDate": "2023-06-12T20:33:37.382907+00:00",
    "lastUpdatedDate": "2023-06-12T20:47:42.804511+00:00",
    "policyId": "SPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "STATIC",
    "principal": {
        "entityId": "janeFriends",
        "entityType": "UserGroup"
    },
    "resource": {
        "entityId": "vacationFolder",
        "entityType": "Album"
    }
}
```

------

# コンテキストの追加
<a name="context"></a>

*コンテキスト*は、ポリシーの決定に関連する情報ですが、プリンシパル、アクション、またはリソースのアイデンティティの一部ではありません。アクセストークンクレームはコンテキストです。アクションは、ソース IP アドレスのセットからのみ、またはユーザーが MFA でサインインした場合にのみ許可できます。アプリケーションはこのコンテキストセッションデータにアクセスできるため、承認リクエストに入力する必要があります。Verified Permissions 認可リクエストのコンテキストデータは、 `contextMap`要素で JSON 形式である必要があります。

このコンテンツを説明する例は、[サンプルポリシーストア](policy-stores-create.md)からのものです。これを行うには、テスト環境に **DigitalPetStore** サンプルポリシーストアを作成します。

次のコンテキストオブジェクトは、サンプル **DigitalPetStore** ポリシーストアに基づいて、アプリケーションの各 Cedar データ型のいずれかを宣言します。

```
"context": {
  "contextMap": {
    "AccountCodes": {
      "set": [
        {
          "long": 111122223333
        },
        {
          "long": 444455556666
        },
        {
          "long": 123456789012
        }
      ]
    },
    "approvedBy": {
    "entityIdentifier": {
      "entityId": "Bob",
      "entityType": "DigitalPetStore::User"
    }
    },
    "MfaAuthorized": {
      "boolean": true
    },
    "NetworkInfo": {
      "record": {
        "IPAddress": {
          "string": "192.0.2.178"
        },
        "Country": {
          "string": "United States of America"
        },
        "SSL": {
          "boolean": true
        }
    }
    },
    "RequestedOrderCount": {
      "long": 4
    },
    "UserAgent": {
      "string": "My UserAgent 1.12"
    }
  }
}
```認可コンテキストのデータ型

**ブール値**  
バイナリ`true`または`false`値。この例では、 `true`のブール値 は、顧客が注文の表示をリクエストする前に多要素認証を実行した`MfaAuthenticated`ことを示します。

**設定**  
コンテキスト要素のコレクション。セットメンバーは、この例のようにすべて同じタイプにすることも、ネストされたセットを含む異なるタイプにすることもできます。この例では、顧客は 3 つの異なるアカウントに関連付けられています。

**String**  
文字で囲まれた文字、数字、または記号のシーケンス`"`。この例では、`UserAgent`文字列は、顧客が注文の表示をリクエストするために使用したブラウザを表します。

**Long**  
整数。この例では、 は、顧客が過去の 4 つの注文を表示するように求めた結果、このリクエストがバッチの一部である`RequestedOrderCount`ことを示します。

**レコード**  
属性のコレクション。これらの属性は、リクエストコンテキストで宣言する必要があります。スキーマを持つポリシーストアには、このエンティティとエンティティの属性をスキーマに含める必要があります。この例では、`NetworkInfo`レコードには、ユーザーの発信元 IP、クライアントによって決定されるその IP の位置情報、転送中の暗号化に関する情報が含まれています。

**EntityIdentifier**  
リクエストの `entities`要素で宣言されたエンティティと属性への参照。この例では、ユーザーの注文は従業員 によって承認されました`Bob`。

このサンプルコンテキストをサンプル **DigitalPetStore** アプリでテストするには、リクエスト `entities`、ポリシーストアスキーマ、静的ポリシーを、**Customer Role - Get Order** という説明で更新する必要があります。

## 認可コンテキストを受け入れるように DigitalPetStore を変更する
<a name="authorization-context-example"></a>

当初、 **DigitalPetStore** はそれほど複雑なポリシーストアではありません。提示したコンテキストをサポートするために事前設定されたポリシーやコンテキスト属性は含まれません。このコンテキスト情報を使用して認可リクエストの例を評価するには、ポリシーストアと認可リクエストに次の変更を加えます。アクセストークン情報をコンテキストとするコンテキストの例については、[Amazon Cognito 「アクセストークンのマッピング](cognito-map-token-to-schema.md#cognito-map-access-token)」および[「OIDC アクセストークンのマッピング](oidc-map-token-to-schema.md#oidc-map-access-token)」を参照してください。

------
#### [ Schema ]

新しいコンテキスト属性をサポートするために、ポリシーストアスキーマに次の更新を適用します。`GetOrder` を`actions`次のように更新します。

```
"GetOrder": {
  "memberOf": [],
  "appliesTo": {
    "resourceTypes": [
      "Order"
    ],
    "context": {
      "type": "Record",
      "attributes": {
        "AccountCodes": {
          "type": "Set",
          "required": true,
          "element": {
            "type": "Long"
          }
        },
        "approvedBy": {
          "name": "User",
          "required": true,
          "type": "Entity"
        },
        "MfaAuthorized": {
          "type": "Boolean",
          "required": true
        },
        "NetworkInfo": {
          "type": "NetworkInfo",
          "required": true
        },
        "RequestedOrderCount": {
          "type": "Long",
          "required": true
        },
        "UserAgent": {
          "required": true,
          "type": "String"
        }
      }
    },
    "principalTypes": [
      "User"
    ]
  }
}
```

リクエストコンテキスト`NetworkInfo`で という名前`record`のデータ型を参照するには、 の前にスキーマに以下を追加して、スキーマに [commonType](https://docs.cedarpolicy.com/schema/schema.html#schema-commonTypes) コンストラクトを作成します`actions`。`commonType` コンストラクトは、異なるエンティティに適用できる属性の共有セットです。

```
"commonTypes": {
  "NetworkInfo": {
    "attributes": {
      "IPAddress": {
        "type": "String",
        "required": true
      },
      "SSL": {
        "required": true,
        "type": "Boolean"
      },
      "Country": {
        "required": true,
        "type": "String"
      }
    },
    "type": "Record"
  }
},
```

------
#### [ Policy ]

次のポリシーは、指定された各コンテキスト要素が満たす必要がある条件を設定します。既存の静的ポリシー上に、**Customer Role - Get Order **という説明が付けられています。このポリシーでは、最初は、リクエストを行うプリンシパルがリソースの所有者である必要があるだけです。

```
permit (
    principal in DigitalPetStore::Role::"Customer",
    action in [DigitalPetStore::Action::"GetOrder"],
    resource
) when {
    principal == resource.owner &&
    context.AccountCodes.contains(111122223333) &&
    context.approvedBy in DigitalPetStore::Role::"Employee" &&
    context.MfaAuthorized == true &&
    context.NetworkInfo.Country like "*United States*" &&
    context.NetworkInfo.IPAddress like "192.0.2.*" &&
    context.NetworkInfo.SSL == true &&
    context.RequestedOrderCount <= 4 &&
    context.UserAgent like "*My UserAgent*"
};
```

これで、注文を取得するリクエストが、リクエストに追加した追加のコンテキスト条件を満たすことが要求されました。

1. ユーザーは MFA でサインインしている必要があります。

1. ユーザーのウェブブラウザには、文字列 が含まれている`User-Agent`必要があります`My UserAgent`。

1. ユーザーは 4 つ以下の注文を表示するようにリクエストしている必要があります。

1. ユーザーのアカウントコードの 1 つは である必要があります`111122223333`。

1. ユーザーの IP アドレスは米国を発信し、暗号化されたセッションにあり、IP アドレスは で始まる必要があります`192.0.2.`。

1. 従業員は注文を承認する必要があります。認可リクエストの `entities`要素で、 のロール`Bob`を持つユーザーを宣言します`Employee`。

------
#### [ Request body ]

適切なスキーマとポリシーを使用してポリシーストアを設定したら、この認可リクエストを Verified Permissions API オペレーション [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html) に提示できます。`entities` セグメントには`Bob`、 というロールを持つユーザーである の定義が含まれていることに注意してください`Employee`。

```
{
  "principal": {
    "entityType": "DigitalPetStore::User",
    "entityId": "Alice"
  },
  "action": {
    "actionType": "DigitalPetStore::Action",
    "actionId": "GetOrder"
  },
  "resource": {
    "entityType": "DigitalPetStore::Order",
    "entityId": "1234"
  },
  "context": {
    "contextMap": {
      "AccountCodes": {
        "set": [
          {"long": 111122223333},
          {"long": 444455556666},
          {"long": 123456789012}
        ]
      },
      "approvedBy": {
        "entityIdentifier": {
          "entityId": "Bob",
          "entityType": "DigitalPetStore::User"
        }
      },
      "MfaAuthorized": {
        "boolean": true
      },
      "NetworkInfo": {
        "record": {
          "Country": {"string": "United States of America"},
          "IPAddress": {"string": "192.0.2.178"},
          "SSL": {"boolean": true}
        }
      },
      "RequestedOrderCount":{
        "long": 4
      },
      "UserAgent": {
        "string": "My UserAgent 1.12"
      }
    }
  },
  "entities": {
    "entityList": [
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Alice"
        },
        "attributes": {
          "memberId": {
            "string": "801b87f2-1a5c-40b3-b580-eacad506d4e6"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Customer"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Bob"
        },
        "attributes": {
          "memberId": {
            "string": "49d9b81e-735d-429c-989d-93bec0bcfd8b"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Employee"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::Order",
          "entityId": "1234"
        },
        "attributes": {
          "owner": {
            "entityIdentifier": {
              "entityType": "DigitalPetStore::User",
              "entityId": "Alice"
            }
          }
        },
        "parents": []
      }
     ]
   },
   "policyStoreId": "PSEXAMPLEabcdefg111111"
}
```

------

# Amazon Verified Permissions テストベンチの使用
<a name="test-bench"></a>

Verified Permissions テストベンチを使用して、[認可リクエスト](terminology.md#term-authorization-request)を実行して Verified Permissions ポリシーをテストおよびトラブルシューティングします。テストベンチでは、指定したパラメータを使用して、ポリシーストア内の Cedar ポリシーがリクエストを認可するかどうかを判断します。認可リクエストのテスト中に、**ビジュアルモード**と **JSON モード**を切り替えることができます。Cedar ポリシーがどのように構成され、評価されるかについての詳細は、Cedar ポリシー言語リファレンスガイドの「[Cedar における基本ポリシー構築](https://docs.cedarpolicy.com/policies/syntax-policy.html)」を参照してください。

**注記**  
Verified Permissions を使用して認可リクエストを行う場合は、**追加のエンティティ**セクションのリクエストの一部としてプリンシパルとリソースのリストを指定できます。ただし、アクションの詳細を含めることはできません。スキーマで指定するか、リクエストから推測する必要があります。**追加のエンティティ**セクションにはアクションを設定できません。

テストベンチの視覚的な概要とデモンストレーションについては、 AWS YouTube チャンネルの[「Amazon Verified Permissions - Policy Creation and Testing (Primer Series \$13)](https://www.youtube.com/watch?v=Gi3joEySMPQ)」を参照してください。

------
#### [ Visual mode ]

**注記**  
テストベンチの**ビジュアルモード**を使用するには、ポリシーストアにスキーマが定義されている必要があります。

**ポリシーをビジュアルモードでテストするには**

1. [Verified Permissions コンソール](https://console.aws.amazon.com/verifiedpermissions/)を開きます。ポリシーストアを選択します。

1. 左側のナビゲーションペインで、**[テストベンチ]** を選択します。

1. **[ビジュアルモード]** を選択します。

1. **[プリンシパル]** セクションで、スキーマのプリンシパルタイプから**[プリンシパルによるアクション]** を選択します。テキストボックスにプリンシパルの識別子を入力します。

1. (オプション) **[親を追加]** を選択して、指定したプリンシパルの親エンティティを追加します。プリンシパルに追加された親を削除するには、親の名前の横にある **[削除]** を選択します。

1. 指定したプリンシパルの各属性の**属性値**を指定します。テストベンチは、シミュレートされた認可リクエストで指定された属性値を使用します。

1. **[リソース]** セクションで、**[プリンシパルがアクションを実行しているリソース]** を選択します。テキストボックスにリソースの識別子を入力します。

1. (オプション) **[親を追加]** を選択して、指定したリソースの親エンティティを追加します。リソースに追加された親を削除するには、親の名前の横にある **[削除]** を選択します。

1. 指定したリソースの各属性に **Attribute 値** を指定します。テストベンチは、シミュレートされた認可リクエストで指定された属性値を使用します。

1. **[アクション]** セクションで、指定したプリンシパルとリソースに対して有効なアクションのリストから、**プリンシパルが実行しているアクション** を選択します。

1. 指定したアクションの各属性の**属性値**を指定します。テストベンチは、シミュレートされた認可リクエストで指定された属性値を使用します。

1. (オプション) **エンティティの追加** セクションで、**エンティティの追加**を選択して、承認決定のために評価するエンティティを追加します。

1. ドロップダウンリストから**[エンティティ識別子]** を選択し、エンティティ識別子を入力します。

1. (オプション) **[親を追加]** を選択して、指定したエンティティの親エンティティを追加します。エンティティに追加された親を削除するには、親の名前の横にある [**削除**] を選択します。

1. 指定したエンティティの各属性に **[属性値]** を指定します。テストベンチは、シミュレートされた認可リクエストで指定された属性値を使用します。

1. **[確認]** を選択して、テストベンチにエンティティを追加します。

1. **認可リクエストの実行**を選択して、ポリシーストアの Cedar ポリシーの認可リクエストをシミュレートします。テストベンチには、リクエストを許可するか拒否するかの決定と、満たされているポリシーまたは評価中に発生したエラーに関する情報が表示されます。

------
#### [ JSON mode ]

**JSON モードでポリシーをテストするには**

1. [Verified Permissions コンソール](https://console.aws.amazon.com/verifiedpermissions/)を開きます。ポリシーストアを選択します。

1. 左側のナビゲーションペインで、**[テストベンチ]** を選択します。

1. **[JSON モード]** を選択します。

1. **[リクエストの詳細]** セクションで、スキーマを定義している場合は、**スキーマのプリンシパルタイプから[プリンシパルによるアクション]** を選択します。テキストボックスにプリンシパルの識別子を入力します。

   スキーマが定義されていない場合は、**[プリンシパルによるアクション]** テキストボックスにプリンシパルを入力します。

1. スキーマが定義されている場合は、スキーマ内のリソースタイプから **[リソース]** を選択します。テキストボックスにリソースの識別子を入力します。

   スキーマが定義されていない場合は、**[リソース]** テキストボックスにリソースを入力します。

1. スキーマが定義されている場合は、指定したプリンシパルとリソースの有効なアクションのリストから **[アクション]** を選択します。

   スキーマが定義されていない場合は、**[アクション]** テキストボックスにアクションを入力します。

1. **コンテキスト**フィールドに、シミュレートするリクエストのコンテキストを入力します。リクエストコンテキストは、認可の決定に使用できる追加情報です。

1. **エンティティ**フィールドに、承認決定について評価されるエンティティとその属性の階層を入力します。

1. **認可リクエストの実行**を選択して、ポリシーストア内の Cedar ポリシーの認可リクエストをシミュレートします。テストベンチには、リクエストを許可するか拒否するかの決定と、満たされているポリシーまたは評価中に発生したエラーに関する情報が表示されます。

------

# Amazon Verified Permissions
<a name="policies-examples"></a>

ここに含まれるポリシーの例の一部は、基本的な Cedar ポリシーの例であり、一部は Verified Permissions 固有です。基本的なものは Cedar ポリシー言語リファレンスガイドにリンクされており、そこに含まれています。Cedar ポリシー構文の詳細については、「Cedar ポリシー言語リファレンスガイド」の「[Cedar における基本的なポリシー構築](https://docs.cedarpolicy.com/policies/syntax-policy.html)」を参照してください。

**ポリシーの例**
+ [個々のエンティティへのアクセスを許可する](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-indivuals)
+ [エンティティのグループへのアクセスを許可する](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-acces-groups)
+ [任意のエンティティへのアクセスを許可する](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-any)
+ [エンティティの属性へのアクセスを許可する (ABAC)](https://docs.cedarpolicy.com/policies/policy-examples.html#allow-abac)
+ [アクセスを拒否する](https://docs.cedarpolicy.com/policies/policy-examples.html#deny-access)
+ [角括弧表記を使用してトークン属性を参照します](#policies-examples-brackets)
+ [ドット表記を使用して属性を参照します](#policies-examples-dot)
+ [Amazon Cognito ID トークン属性を反映](#policies-examples-cognito-id)
+ [OIDC ID トークン属性を反映](#policies-examples-oidc-id)
+ [Amazon Cognito アクセストークン属性を反映](#policies-examples-cognito-access)
+ [OIDC アクセストークン属性を反映](#policies-examples-oidc-access)

## 角括弧表記を使用してトークン属性を参照します
<a name="policies-examples-brackets"></a>

次の例は、角括弧表記を使用してトークン属性を参照するポリシーを作成する方法を示しています。

Verified Permissions のポリシーでトークン属性を使用する方法の詳細については、[「スキーマへの Amazon Cognito トークンのマッピング](cognito-map-token-to-schema.md)」および[「スキーマへの OIDC トークンのマッピング](oidc-map-token-to-schema.md)」を参照してください。

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal has email && principal.email == "alice@example.com" &&
    context["ip-address"] like "192.0.2.*"
};
```

## ドット表記を使用して属性を参照します
<a name="policies-examples-dot"></a>

次の例は、ドット表記を使用して属性を参照するポリシーを作成する方法を示しています。

Verified Permissions のポリシーでトークン属性を使用する方法の詳細については、[「スキーマへの Amazon Cognito トークンのマッピング](cognito-map-token-to-schema.md)」および[「スキーマへの OIDC トークンのマッピング](oidc-map-token-to-schema.md)」を参照してください。

```
permit(principal, action, resource)
when {
    principal.cognito.username == "alice" &&
    principal.custom.employmentStoreCode == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## Amazon Cognito ID トークン属性を反映
<a name="policies-examples-cognito-id"></a>

次の例は、ID トークン属性を参照するポリシーを作成する方法を示しています Amazon Cognito。

Verified Permissions のポリシーでトークン属性を使用する方法の詳細については、[「スキーマへの Amazon Cognito トークンのマッピング](cognito-map-token-to-schema.md)」および[「スキーマへの OIDC トークンのマッピング](oidc-map-token-to-schema.md)」を参照してください。

```
permit (
    principal in MyCorp::UserGroup::"us-west-2_EXAMPLE|MyUserGroup",
    action,
    resource
) when {
    principal["cognito:username"] == "alice" &&
    principal["custom:employmentStoreCode"] == "petstore-dallas" &&
    principal.tenant == "x11app-tenant-1" &&
    principal has email && principal.email == "alice@example.com"
};
```

## OIDC ID トークン属性を反映
<a name="policies-examples-oidc-id"></a>

次の例は、OIDC プロバイダーから ID トークン属性を参照するポリシーを作成する方法を示しています。

Verified Permissions のポリシーでトークン属性を使用する方法の詳細については、[「スキーマへの Amazon Cognito トークンのマッピング](cognito-map-token-to-schema.md)」および[「スキーマへの OIDC トークンのマッピング](oidc-map-token-to-schema.md)」を参照してください。

```
permit (
    principal in MyCorp::UserGroup::"MyOIDCProvider|MyUserGroup",
    action,
    resource
) when {
    principal.email_verified == true && principal.email == "alice@example.com" &&
    principal.phone_number_verified == true && principal.phone_number like "+1206*"
};
```

## Amazon Cognito アクセストークン属性を反映
<a name="policies-examples-cognito-access"></a>

次の例は、アクセストークン属性を参照するポリシーを作成する方法を示しています Amazon Cognito。

Verified Permissions のポリシーでトークン属性を使用する方法の詳細については、[「スキーマへの Amazon Cognito トークンのマッピング](cognito-map-token-to-schema.md)」および[「スキーマへの OIDC トークンのマッピング](oidc-map-token-to-schema.md)」を参照してください。

```
permit(principal, action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"], resource)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI/mydata.write")
};
```

## OIDC アクセストークン属性を反映
<a name="policies-examples-oidc-access"></a>

次の例は、OIDC プロバイダーからアクセストークン属性を参照するポリシーを作成する方法を示しています。

Verified Permissions のポリシーでトークン属性を使用する方法の詳細については、[「スキーマへの Amazon Cognito トークンのマッピング](cognito-map-token-to-schema.md)」および[「スキーマへの OIDC トークンのマッピング](oidc-map-token-to-schema.md)」を参照してください。

```
permit(
    principal, 
    action in [MyApplication::Action::"Read", MyApplication::Action::"GetStoreInventory"],
    resource
)
when { 
    context.token.client_id == "52n97d5afhfiu1c4di1k5m8f60" &&
    context.token.scope.contains("MyAPI-read")
};
```