

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon ECR 中创建存储库创建模板
<a name="repository-creation-templates-create"></a>

您可以创建存储库创建模板来定义在 Amazon ECR 在拉取缓存、推送时创建或复制操作期间代表您创建的存储库的设置。创建存储库创建模板后，所有新建的存储库都将应用这些设置。这不会对之前创建的存储库产生任何影响。

在使用模板设置存储库时，您可以选择指定 KMS 密钥和资源标签。如果您打算同时在一个或多个模板中使用 KMS 密钥、资源标签或两者的组合，则需要：
+ [为存储库创建模板创建自定义策略](repository-creation-templates-custom.md).
+ [为存储库创建模板创建 IAM 角色](repository-creation-templates-create-iam.md).

配置完成后，您可以将自定义角色附加到注册表中的特定模板。



## 创建存储库创建模板的 IAM 权限
<a name="repository-creation-templates-iam"></a>

IAM 主体需要具有以下权限，才能管理存储库创建模板。此这些权限必须通过基于身份的 IAM policy 授予。
+ `ecr:CreateRepositoryCreationTemplate` – 授权创建存储库创建模板。
+ `ecr:UpdateRepositoryCreationTemplate`：授予更新存储库创建模板的权限。
+ `ecr:DescribeRepositoryCreationTemplates`：授予在注册表中列出存储库创建模板的权限。
+ `ecr:DeleteRepositoryCreationTemplate` – 授权删除存储库创建模板。
+ `ecr:CreateRepository`：授予创建 Amazon ECR 存储库的权限。
+ `ecr:PutLifecyclePolicy` – 授权创建生命周期策略并将其应用于存储库。仅当存储库创建模板包含生命周期策略时，才需要此权限。
+ `ecr:SetRepositoryPolicy` – 授权创建存储库的权限策略。仅当存储库创建模板包含存储库策略时，才需要此权限。
+ `iam:PassRole`：授予允许实体将角色传递给服务或应用程序的权限。此权限对于需要代入角色以代表您执行操作的服务和应用程序是必需的。

## 创建存储库创建模板
<a name="repository-creation-templates-creating"></a>

完成模板的必要先决条件后，即可继续创建存储库创建模板。

------
#### [ Amazon Web Services 管理控制台 ]

**创建存储库创建模板（Amazon Web Services 管理控制台）**

1. 打开 Amazon ECR 控制台，网址为[https://console.aws.amazon.com/ecr/](https://console.amazonaws.cn/ecr/)。

1. 在导航栏中，选择存储库创建模板的创建区域。

1. 在导航窗格中，依次选择**私有注册表**、**存储库创建模板**。

1. 在**存储库创建模板**页面上，选择**创建模板**。

1. 在**步骤 1：定义模板**页面上，对于**模板详细信息**，选择**特定前缀**，将模板应用于特定的存储库命名空间前缀，或者选择 **ECR 注册表中的任意前缀**，将模板应用于与该区域中任何其他模板都不匹配的所有存储库。

   1. 如果选择**特定前缀**，则在**前缀**中指定要应用模板的存储库命名空间前缀。前缀末尾始终应用假定的 `/`。例如，前缀 `prod` 将应用于以 `prod/` 开头的所有存储库。同理，前缀 `prod/team` 将应用于以 `prod/team/` 开头的所有存储库。

   1. 如果选择 **ECR 注册表中的任意前缀**，则**前缀**将设置为 `ROOT`。

1. 在**应用对象**中，指定此模板将应用于哪些 Amazon ECR 工作流。选项为 `PULL_THROUGH_CACHE`、`CREATE_ON_PUSH` 和 `REPLICATION`。

1. 在**模板描述**中，为模板指定可选描述，然后选择**下一步**。

1. 在**步骤 2：添加存储库创建配置**页面上，指定使用模板创建的存储库要应用的存储库设置配置。

   1. 在**映像标签可变性**中，选择要使用的标签可变性设置。有关更多信息，请参阅 [防止映像标签在 Amazon ECR 中被覆盖](image-tag-mutability.md)。
      + **可变**：如果您想覆盖映像标签，请选择此选项。建议用于使用提取缓存操作的存储库，以确保 Amazon ECR 可以更新缓存的映像。此外，要禁用一些可变标签的标签更新，请在**可变标签排除项**文本框中输入标签名称或使用通配符 (\*) 来匹配多个相似的标签。
      + **不可变**：如果您想阻止覆盖映像标签，则选择此选项，在推送带有现有标签的映像时，它适用于存储库中的所有标签和排除项。如果您尝试推送带有现有标签的映像，Amazon ECR 将返回 `ImageTagAlreadyExistsException`。此外，要为一些不可变的标签启用标签更新，请在**不可变标签排除项**文本框中输入标签名称或使用通配符 (\*) 来匹配多个相似的标签。

   1. 在**加密配置**中，选择要使用的加密设置。有关更多信息，请参阅 [静态加密](encryption-at-rest.md)。

      选择 **AES-256** 时，Amazon ECR 使用具有 Amazon Simple Storage Service 托管加密密钥的服务器端加密，从而使用 AES-256 加密算法对静态数据进行加密。此服务不会产生额外费用。

      选择 **Amazon KMS** 时，Amazon ECR 使用具有 Amazon Key Management Service （Amazon KMS）中存储的密钥的服务器端加密。当您使用 Amazon KMS 加密数据时，您可以使用由 Amazon ECR Amazon 管理的默认托管密钥，也可以指定自己的 Amazon KMS 密钥（称为*客户托管密钥*）。
**注意**  
存储库创建之后，存储库的加密设置无法更改。

   1. 在**存储库权限**中，请指定使用此模板创建的存储库要应用的存储库权限策略。您可以选择使用下拉菜单，为最常见的使用案例选择一个 JSON 示例。有关更多信息，请参阅 [Amazon ECR 中的私有存储库策略](repository-policies.md)。

   1. 在**存储库生命周期策略**中，指定使用此模板创建的存储库要应用的存储库生命周期策略。您可以选择使用下拉菜单，为最常见的使用案例选择一个 JSON 示例。有关更多信息，请参阅 [在 Amazon ECR 中使用生命周期策略自动清理映像](LifecyclePolicies.md)。

   1. **对于**存储库 Amazon 标签**，以键值对的形式指定要与使用此模板创建的存储库关联的元数据，然后选择下一步。**有关更多信息，请参阅 [在 Amazon ECR 中标记私有存储库](ecr-using-tags.md)。

   1. 对于**存储库创建角色**，请从下拉菜单中选择自定义 IAM 角色，以便在模板中使用存储库标签或 KMS 时用于存储库创建模板（详情请参阅[为存储库创建模板创建 IAM 角色](repository-creation-templates-create-iam.md)）。然后选择**下一步**。

1. 在**步骤 3：审核并创建**页面上，审核您为存储库创建模板指定的设置。选择**编辑**选项以进行更改。完成后，选择**创建**。

------
#### [ Amazon CLI ]

该[create-repository-creation-template](https://docs.amazonaws.cn/cli/latest/reference/ecr/create-repository-creation-template.html) Amazon CLI 命令用于为您的私有注册表创建存储库模板。

**创建存储库创建模板（Amazon CLI）**

1.  Amazon CLI 使用生成[create-repository-creation-template](https://docs.amazonaws.cn/cli/latest/reference/ecr/create-repository-creation-template.html)命令的骨架。

   ```
   aws ecr create-repository-creation-template \
       --generate-cli-skeleton
   ```

   该命令的输出显示了存储库创建模板的完整语法。

   ```
   {
   "appliedFor":[""], // string array, but valid are PULL_THROUGH_CACHE, CREATE_ON_PUSH, and REPLICATION
   "prefix": "string",
       "description": "string",
       "imageTagMutability": "MUTABLE"|"IMMUTABLE"|"IMMUTABLE_WITH_EXCLUSION"|"MUTABLE_WITH_EXCLUSION",
       "imageTagMutabilityExclusionFilters": [
           "filterType": "WILDCARD",
           "filter": "string"
       ],
       "repositoryPolicy": "string",
       "lifecyclePolicy": "string"
   "encryptionConfiguration": {
   "encryptionType": "AES256"|"KMS",
           "kmsKey": "string"
       },
       "resourceTags": [
           {
   "Key": "string",
               "Value": "string"
           }
       ],
       "customRoleArn": "string", // must be a valid IAM Role ARN
   }
   ```

1. 使用上一步中的输出创建名为 `repository-creation-template.json` 的文件。此模板为使用存储库策略在 `prod/*` 下创建的任何存储库设置 KMS 加密密钥，该策略允许将映像推送和提取到未来的存储库，设置生命周期策略，使超过两周的映像过期，并设置允许 ECR 访问 KMS 密钥并将资源标签 `examplekey` 分配给未来存储库的自定义角色。

   ```
   {
   "prefix": "prod",
       "description": "For repositories cached from my PTC rule and in my replication configuration that start with 'prod/'",
       "appliedFor": ["PULL_THROUGH_CACHE", "CREATE_ON_PUSH", "REPLICATION"],
       "encryptionConfiguration": {
   "encryptionType": "KMS",
           "kmsKey": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-example11111"
       },
       "resourceTags": [
           {
   "Key": "examplekey",
               "Value": "examplevalue"
           }
       ],
       "imageTagMutability": "IMMUTABLE_WITH_EXCLUSION",
       "imageTagMutabilityExclusionFilters": [
         {
         "filterType": "WILDCARD",
         "filter": "latest"
         },
         {
         "filterType": "WILDCARD",
         "filter": "beta*"
         }
       ]
       "repositoryPolicy": "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Sid\":\"AllowPushPullIAMRole\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:user\/IAMusername\"},\"Action\":[\"ecr:BatchGetImage\",\"ecr:BatchCheckLayerAvailability\",\"ecr:CompleteLayerUpload\",\"ecr:GetDownloadUrlForLayer\",\"ecr:InitiateLayerUpload\",\"ecr:PutImage\",\"ecr:UploadLayerPart\"]}]}", 
       "lifecyclePolicy": "{\"rules\":[{\"rulePriority\":1,\"description\":\"Expire images older than 14 days\",\"selection\":{\"tagStatus\":\"any\",\"countType\":\"sinceImagePushed\",\"countUnit\":\"days\",\"countNumber\":14},\"action\":{\"type\":\"expire\"}}]}",
       "customRoleArn": "arn:aws:iam::111122223333:role/myRole"
   }
   ```

1. 使用以下命令来创建存储库创建模板。请务必指定在上一步中创建的配置文件的名称来代替以下示例中的 `repository-creation-template.json`。

   ```
   aws ecr create-repository-creation-template \
       --cli-input-json file://{{repository-creation-template.json}}
   ```

------