

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

# 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
```

例如，下列政策範本為使用政策範本的委託人和資源提供 `Edit`、 和 `Read``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>

您可以使用 AWS CLI、 AWS 管理主控台或 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 SDKs，建立以政策範本為基礎的範本連結政策 AWS 管理主控台 AWS CLI或政策。範本連結政策會與其政策範本保持連結。如果您變更政策範本中的政策陳述式，則任何連結至該範本的政策都會針對從該時刻開始的所有授權決策，自動使用新的陳述式。

如需範本連結政策範例，請參閱 [Amazon Verified Permissions 範本連結政策範例](policy-templates-example-policies.md)。

------
#### [ AWS 管理主控台 ]

**透過執行個體化政策範本來建立範本連結政策**

1. 開啟 [Verified Permissions 主控台](https://console.aws.amazon.com/verifiedpermissions/)。選擇您的政策存放區。

1. 在左側的導覽窗格中，選擇 **Policies (政策)**。

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>

您可以使用 、 或 AWS SDKs 在已驗證許可中編輯 AWS 管理主控台 AWS CLI或更新政策範本。編輯政策範本會自動更新連結至或根據範本的政策，因此編輯政策範本時請務必小心，並確保不會意外引入會中斷應用程式的變更。

您可以變更政策範本的下列元素：
+ 政策範本`action`參考的
+ 條件子句，例如 `when`和 `unless`

您無法變更政策範本的下列元素。若要變更任何這些元素，您需要刪除並重新建立政策範本。
+ 來自 `permit`或 的政策範本效果 `forbid`
+ 政策範本`principal`參考的
+ 政策範本`resource`參考的

------
#### [ AWS 管理主控台 ]

**編輯您的政策範本**

1. 開啟 [Verified Permissions 主控台](https://console.aws.amazon.com/verifiedpermissions/)。選擇您的政策存放區。

1. 在左側導覽窗格中，選擇**政策範本**。主控台會顯示您在目前政策存放區中建立的所有政策範本。

1. 選擇政策範本旁的選項按鈕，以顯示政策範本的詳細資訊，例如建立、更新和政策範本內容的時間。

1. 選擇**編輯**以編輯您的政策範本。視需要更新**政策描述**和**政策內文**，然後選擇**更新政策範本**。

1. 您可以選擇政策範本旁的選項按鈕，然後選擇**刪除**，以刪除政策範本。選擇**確定**以確認刪除政策範本。

------
#### [ 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"
);
```