

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

# Amazon Verified Permissions ポリシーテンプレートとテンプレートにリンクされたポリシー
<a name="policy-templates"></a>

Verified Permissions では、ポリシーテンプレートは、`principal`、、`resource`またはその両方のプレースホルダーを持つポリシーです。ポリシーテンプレートのみを使用して認可リクエストを処理することはできません。認可リクエストを処理するには、*ポリシーテンプレートに基づいてテンプレートにリンク*されたポリシーを作成する必要があります。ポリシーテンプレートを使用すると、ポリシーを一度定義してから、複数のプリンシパルとリソースで使用できます。ポリシーテンプレートの更新は、テンプレートを使用するすべてのポリシーに反映されます。詳細については、Cedar ポリシー言語リファレンスガイドの「[Cedar ポリシーテンプレート](https://docs.cedarpolicy.com/policies/templates.html)」を参照してください。

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

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

たとえば、次のポリシーテンプレートは`Read`、ポリシーテンプレートを使用するプリンシパルとリソースに `Edit`、、および アクセス`Comment`許可を提供します。

```
permit(
  principal == ?principal,
  action in [Action::"Read", Action::"Edit", Action::"Comment"],
  resource == ?resource
);
```

このテンプレート`Editor`に基づいて という名前のポリシーを作成する場合、プリンシパルが特定のリソースのエディタとして指定されていると、アプリケーションはプリンシパルがリソースに対して読み取り、編集、コメントするためのアクセス許可を提供するポリシーを作成します。

静的ポリシーとは異なり、テンプレートにリンクされたポリシーは動的です。前の例で、ポリシーテンプレートから`Comment`アクションを削除すると、そのテンプレートにリンクまたは基づいているポリシーはそれに応じて更新され、ポリシーで指定されたプリンシパルは対応するリソースにコメントできなくなります。

テンプレートにリンクされたポリシーの例については、「」を参照してください[Amazon Verified Permissions テンプレートにリンクされたポリシーの例](policy-templates-example-policies.md)。

# Amazon Verified Permissions ポリシーテンプレートの作成
<a name="policy-templates-create"></a>

Verified Permissions でポリシーテンプレートを作成するには AWS マネジメントコンソール、、 AWS CLI、または AWS SDKs を使用します。ポリシーテンプレートを使用すると、ポリシーを一度定義してから、複数のプリンシパルとリソースで使用できます。ポリシーテンプレートを作成したら、テンプレートにリンクされたポリシーを作成して、特定のプリンシパルとリソースでポリシーテンプレートを使用できます。詳細については、「[Amazon Verified Permissions テンプレートリンクポリシーの作成](policy-templates-create-policy.md)」を参照してください。

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

**ポリシーテンプレートを作成するには**

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

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

1. **[ポリシーテンプレートを作成]** を選択します。

1. **[詳細]** セクションに**ポリシーテンプレートの説明**を入力します。

1. **[ポリシーテンプレート本文]** セクションでは、プレースホルダー`?principal` および`?resource` を使用して、このテンプレートに基づいて作成されたポリシーが、付与する権限をカスタマイズできるようにします。**[フォーマット]** を選択すると、ポリシーテンプレートの構文を推奨される間隔とインデントでフォーマットできます。

1. **[ポリシーテンプレートを作成]** を選択します。

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

**ポリシーテンプレートを作成するには**  
[CreatePolicyTemplate](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreatePolicyTemplate.html) オペレーションを使用して、ポリシーテンプレートを作成できます。次の例では、プリンシパルのプレースホルダーを含むポリシーテンプレートを作成します。

ファイル `template1.txt` には次のものが含まれています。

```
"VacationAccess"
permit(
    principal in ?principal,
    action == Action::"view",
    resource == Photo::"VacationPhoto94.jpg"
);
```

```
$ aws verifiedpermissions create-policy-template \
    --description "Template for vacation picture access" 
    --statement file://template1.txt 
    --policy-store-id PSEXAMPLEabcdefg111111
{
    "createdDate": "2023-05-18T21:17:47.284268+00:00",
    "lastUpdatedDate": "2023-05-18T21:17:47.284268+00:00",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyTemplateId": "PTEXAMPLEabcdefg111111"
}
```

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

```
$ aws verifiedpermissions create-policy-template \
    --description "Template for vacation picture access" \
    --statement file://template1.txt \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --name name/example-policy-template
{
    "createdDate": "2023-06-12T20:47:42.804511+00:00",
    "lastUpdatedDate": "2023-06-12T20:47:42.804511+00:00",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyTemplateId": "PTEXAMPLEabcdefg111111"
}
```

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

------

# Amazon Verified Permissions テンプレートリンクポリシーの作成
<a name="policy-templates-create-policy"></a>

テンプレートにリンクされたポリシー、またはポリシーテンプレートに基づくポリシーは、、 AWS CLI、または AWS SDKs AWS マネジメントコンソールを使用して作成できます。テンプレートにリンクされたポリシーは、ポリシーテンプレートにリンクされたままになります。ポリシーテンプレートでポリシーステートメントを変更すると、そのテンプレートにリンクされたポリシーは、その時点から行われたすべての承認決定に対して新しいステートメントを自動的に使用します。

テンプレートにリンクされたポリシーの例については、「」を参照してください[Amazon Verified Permissions テンプレートにリンクされたポリシーの例](policy-templates-example-policies.md)。

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

**ポリシーテンプレートをインスタンス化してテンプレートにリンクされたポリシーを作成するには**

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

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

1. [**ポリシーを作成**] を選択し、[**テンプレートにリンクされたポリシーを作成**] を選択します。

1. 使用するポリシーテンプレートの横にあるラジオボタンを選択して、**[次へ]** を選択します。

1. テンプレートにリンクされたポリシーのこの特定のインスタンスに使用する**プリンシパル**と**リソース**を入力します。指定した値は **[ポリシーステートメントのプレビュー]** フィールドに表示されます。
**注記**  
**プリンシパル**と**リソース**の値は、静的ポリシーと同じ形式にする必要があります。例えば、プリンシパルの `AdminUsers` グループを指定するには、`Group::"AdminUsers"` と入力します。`AdminUsers` を入力すると、検証エラーが表示されます。

1. [**テンプレートにリンクされたポリシーを作成**] を選択します。

   **テンプレートにリンクされた新しいポリシーが [ポリシー] の下に表示されます。**

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

**ポリシーテンプレートをインスタンス化してテンプレートにリンクされたポリシーを作成するには**  
既存のポリシーテンプレートを参照し、テンプレートで使用されるすべてのプレースホルダの値を指定するテンプレートリンクポリシーを作成できます。

次の例では、次のステートメントがあるテンプレートを使用する、テンプレートにリンクされるポリシーを作成しています。

```
permit(
    principal in ?principal,
    action == PhotoFlash::Action::"view",
    resource == PhotoFlash::Photo::"VacationPhoto94.jpg"
);
```

また、次の `definition.txt` ファイルを使用して `definition` パラメータの値を指定します。

```
{
    "templateLinked": {
        "policyTemplateId": "PTEXAMPLEabcdefg111111",
        "principal": {
            "entityType": "PhotoFlash::User",
            "entityId": "alice"
        }
    }
}
```

出力には、テンプレートから取得したリソースと、定義パラメータから取得したプリンシパルの両方が表示されます。

```
$ aws verifiedpermissions create-policy \
    --definition file://definition.txt
    --policy-store-id PSEXAMPLEabcdefg111111
{
    "createdDate": "2023-05-22T18:57:53.298278+00:00",
    "lastUpdatedDate": "2023-05-22T18:57:53.298278+00:00",
    "policyId": "TPEXAMPLEabcdefg111111",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyType": "TEMPLATELINKED",
    "principal": {
        "entityId": "alice",
        "entityType": "PhotoFlash::User"
    },
    "resource": {
        "entityId": "VacationPhoto94.jpg",
        "entityType": "PhotoFlash::Photo"
    }
}
```

------

# Amazon Verified Permissions ポリシーテンプレートの編集
<a name="policy-templates-edit"></a>

Verified Permissions のポリシーテンプレートを編集または更新するには、 AWS マネジメントコンソール、 AWS CLI、または AWS SDKs を使用します。ポリシーテンプレートを編集すると、テンプレートにリンクされているか、テンプレートに基づいているポリシーが自動的に更新されます。そのため、ポリシーテンプレートを編集するときは注意し、アプリケーションを壊す変更を誤って導入しないようにしてください。

ポリシーテンプレートの次の要素を変更できます。
+ ポリシーテンプレートによって`action`参照される
+ `when` や などの条件`unless`句

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

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

**ポリシーテンプレートを編集するには**

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

1. 左側のナビゲーションペインで、**[ポリシーテンプレート]** を選択します。コンソールには、現在のポリシーストアで作成したすべてのポリシーテンプレートが表示されます。

1. ポリシーテンプレートの横にあるラジオボタンを選択すると、ポリシーテンプレートの作成と更新のタイミングやポリシーテンプレートの内容など、ポリシーテンプレートに関する詳細が表示されます。

1. **[編集]** を選択してポリシーテンプレートを編集します。必要に応じて **[ポリシーの説明]** と **[ポリシー本文]** を更新し、**[ポリシーテンプレートを更新]** を選択します。

1. ポリシーテンプレートの横にあるラジオボタンを選択して **[削除]** を選択すると、ポリシーテンプレートを削除できます。**[OK]** を選択して、ポリシーテンプレートの削除を確定します。

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

**ポリシーテンプレートを編集するには**  
[UpdatePolicy](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdatePolicy.html) オペレーションを使用して、静的ポリシーを作成できます。次の例では、ファイルに定義されている新しいポリシーにポリシー本文を置き換えることにより、指定されたポリシーテンプレートを更新します。

`template1.txt` ファイルの内容。

```
permit(
    principal in ?principal,
    action == Action::"view",
    resource in ?resource)
when {
    principal has department && principal.department == "research"
};
```

```
$ aws verifiedpermissions update-policy-template \
    --policy-template-id PTEXAMPLEabcdefg111111 \
    --description "My updated template description" \
    --statement file://template1.txt \ 
    --policy-store-id PSEXAMPLEabcdefg111111
{
    "createdDate": "2023-05-17T18:58:48.795411+00:00",
    "lastUpdatedDate": "2023-05-17T19:18:48.870209+00:00",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyTemplateId": "PTEXAMPLEabcdefg111111"
}
```

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

```
$ aws verifiedpermissions update-policy-template \
    --policy-template-id PTEXAMPLEabcdefg111111 \
    --statement file://template1.txt \
    --policy-store-id PSEXAMPLEabcdefg111111 \
    --name name/example-policy-template
{
    "createdDate": "2023-05-17T18:58:48.795411+00:00",
    "lastUpdatedDate": "2023-05-17T19:18:48.870209+00:00",
    "policyStoreId": "PSEXAMPLEabcdefg111111",
    "policyTemplateId": "PTEXAMPLEabcdefg111111"
}
```

------

# Amazon Verified Permissions テンプレートにリンクされたポリシーの例
<a name="policy-templates-example-policies"></a>

**サンプルポリシーストア**方法を使用して Verified Permissions でポリシーストアを作成すると、選択したサンプルプロジェクトの事前定義ポリシー、ポリシーテンプレート、およびスキーマを使用してポリシーストアが作成されます。以下の Verified Permissions テンプレートにリンクされたポリシー例は、サンプルポリシーストアとそれぞれのポリシー、ポリシーテンプレート、およびスキーマで使用できます。

## PhotoFlash の例
<a name="policy-templates-example-policies-photoflash"></a>

次の例は、ポリシーテンプレートを使用するテンプレートにリンクされたポリシーを作成する方法を示しています。個々のユーザーと**写真を持つ非プライベート共有写真への制限付きアクセスを付与**します。

**注記**  
Cedar のポリシー言語では、エンティティを`in`自体とみなします。したがって、`principal in User::"Alice"`は`principal == User::"Alice"`と同等です。

```
permit (
 principal in PhotoFlash::User::"Alice",
 action in PhotoFlash::Action::"SharePhotoLimitedAccess",
 resource in PhotoFlash::Photo::"VacationPhoto94.jpg"
 );
```

次の例は、ポリシーテンプレートを使用するテンプレートにリンクされたポリシーを作成する方法を示しています。個々のユーザーとアルバムを持つ**非プライベート共有写真への制限付きアクセスを付与**します。

```
permit (
 principal in PhotoFlash::User::"Alice",
 action in PhotoFlash::Action::"SharePhotoLimitedAccess",
 resource in PhotoFlash::Album::"Italy2023"
 );
```

次の例は、ポリシーテンプレートを使用するテンプレートにリンクされたポリシーを作成する方法を示しています。友人グループと個々の**写真を持つ非プライベート共有写真への制限付きアクセスを付与**します。

```
permit (
 principal in PhotoFlash::FriendGroup::"Jane::MySchoolFriends",
 action in PhotoFlash::Action::"SharePhotoLimitedAccess",
 resource in PhotoFlash::Photo::"VacationPhoto94.jpg"
 );
```

次の例は、ポリシーテンプレートを使用するテンプレートにリンクされたポリシーを作成する方法を示しています。友人グループとアルバムを持つ**非プライベート共有写真への制限付きアクセスを付与**します。

```
permit (
 principal in PhotoFlash::FriendGroup::"Jane::MySchoolFriends",
 action in PhotoFlash::Action::"SharePhotoLimitedAccess",
 resource in PhotoFlash::Album::"Italy2023"
 );
```

次の例は、ポリシーテンプレートを使用するテンプレートにリンクされたポリシーを作成する方法を示しています。友人グループと個々の**写真を使用して、非プライベート共有写真へのフルアクセスを付与**します。

```
permit (
 principal in PhotoFlash::UserGroup::"Jane::MySchoolFriends",
 action in PhotoFlash::Action::"SharePhotoFullAccess",
 resource in PhotoFlash::Photo::"VacationPhoto94.jpg"
 );
```

次の例は、 **アカウントからポリシーテンプレートブロックユーザー**を使用するテンプレートにリンクされたポリシーを作成する方法を示しています。

```
forbid(
 principal == PhotoFlash::User::"Bob",
 action,
 resource in PhotoFlash::Account::"Alice-account"
 );
```

## DigitalPetStore の例
<a name="policy-templates-example-policies-digitalpetstore"></a>

DigitalPetStore サンプルポリシーストアにはポリシーテンプレートは一切含まれていません。**DigitalPetStore** サンプルポリシーストアを作成した後、左側のナビゲーションペインで [**ポリシー**] を選択すると、ポリシーストアに含まれるポリシーを表示できます。

## TinyToDo の例
<a name="policy-templates-example-policies-tinytodo"></a>

次の例は、個々のユーザーとタスクリストに対するビューワーアクセスを許可するポリシーテンプレートを使用するテンプレートにリンクされたポリシーを作成する方法を示しています。

```
permit (
    principal == TinyTodo::User::"https://cognito-idp.us-east-1.amazonaws.com/us-east-1_h2aKCU1ts|5ae0c4b1-6de8-4dff-b52e-158188686f31|bob",
    action in [TinyTodo::Action::"ReadList", TinyTodo::Action::"ListTasks"],
    resource == TinyTodo::List::"1"
);
```

次の例は、個々のユーザーとタスクリストに対するエディタアクセスを許可するポリシーテンプレートを使用するテンプレートにリンクされたポリシーを作成する方法を示しています。

```
permit (
    principal == TinyTodo::User::"https://cognito-idp.us-east-1.amazonaws.com/us-east-1_h2aKCU1ts|5ae0c4b1-6de8-4dff-b52e-158188686f31|bob",
    action in [
        TinyTodo::Action::"ReadList",
        TinyTodo::Action::"UpdateList",
        TinyTodo::Action::"ListTasks",
        TinyTodo::Action::"CreateTask",
        TinyTodo::Action::"UpdateTask",
        TinyTodo::Action::"DeleteTask"
    ],
    resource == TinyTodo::List::"1"
);
```