在 Amazon 中创建存储库创建模板 ECR - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Amazon 中创建存储库创建模板 ECR

您可以创建存储库创建模板来定义设置,以供亚马逊在提取缓存或复制操作期间ECR代表您创建的存储库使用。创建存储库创建模板后,所有新建的存储库都将应用这些设置。这不会对之前创建的存储库产生任何影响。

使用模板设置存储库时,您可以选择指定KMS密钥和资源标签。如果您打算在一个或多个模板中使用KMS密钥、资源标签或两者的组合,则需要:

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

IAM创建仓库创建模板的权限

IAM委托人需要以下权限才能管理存储库创建模板。必须使用基于身份IAM的策略授予这些权限。

  • ecr:CreateRepositoryCreationTemplate – 授权创建存储库创建模板。

  • ecr:UpdateRepositoryCreationTemplate— 授予更新仓库创建模板的权限。

  • ecr:DescribeRepositoryCreationTemplates— 授予在注册表中列出存储库创建模板的权限。

  • ecr:DeleteRepositoryCreationTemplate – 授权删除存储库创建模板。

  • ecr:CreateRepository— 授予创建 Amazon ECR 存储库的权限。

  • ecr:PutLifecyclePolicy – 授权创建生命周期策略并将其应用于存储库。仅当存储库创建模板包含生命周期策略时,才需要此权限。

  • ecr:SetRepositoryPolicy – 授权创建存储库的权限策略。仅当存储库创建模板包含存储库策略时,才需要此权限。

  • iam:PassRole— 授予权限以允许实体将角色传递给服务或应用程序。对于需要扮演角色才能代表您执行操作的服务和应用程序,此权限是必需的。

创建仓库创建模板

完成模板的必要先决条件后,就可以继续创建存储库创建模板了。

Amazon Web Services Management Console
创建存储库创建模板(Amazon Web Services Management Console)
  1. 打开亚马逊ECR控制台,网址为https://console.aws.amazon.com/ecr/

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

  3. 在导航窗格中,依次选择私有注册表存储库创建模板

  4. 存储库创建模板页面上,选择创建模板

  5. 在 “步骤 1:定义模板” 页面上,在 “模板详情” 中,选择特定前缀将模板应用于特定的存储库命名空间前缀,或者选择ECR注册表中的任何前缀将模板应用于与该区域中任何其他模板都不匹配的所有存储库。

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

    2. 如果您在ECR注册表中选择 “任何前缀”,则前缀将设置为ROOT

  6. 在 “申请对象” 中,指定此模板将应用于哪些 Amazon ECR 工作流程。选项为 PULL_THROUGH_CACHEREPLICATION

  7. 模板描述中,为模板指定可选描述,然后选择下一步

  8. 步骤 2:添加存储库创建配置页面上,指定使用模板创建的存储库要应用的存储库设置配置。

    1. 映像标签可变性中,选择要使用的标签可变性设置。有关更多信息,请参阅 防止图片标签在 Amazon 中被覆盖 ECR

      选择可变后,映像标签可以被覆盖。对于通过复制操作创建的存储库所使用的模板,建议使用此设置。这样ECR可以确保当标签相同时,Amazon 可以更新缓存的图片。

      选择不可变后,将防止映像标签被覆盖。为存储库配置了不可变标签后,如果尝试推送某个映像但其标签在存储库中已存在,系统将返回 ImageTagAlreadyExistsException 错误。当存储库开启标签不可变性时,这会影响所有标签,您不能将某些标签配置为不可变,而将其他标签配置为可变。

    2. 加密配置中,选择要使用的加密设置。有关更多信息,请参阅 静态加密

      选择 AES-256 时,Amazon ECR 使用服务器端加密和亚马逊简单存储服务托管的加密密钥,该密钥使用行业标准AES的 -256 加密算法对您的静态数据进行加密。此服务不会产生额外费用。

      选中后 Amazon KMS,Amazon 将ECR使用服务器端加密,密钥存储在 Amazon Key Management Service (Amazon KMS) 中。当您使用 Amazon KMS 加密数据时,您可以使用默认的 Amazon 托管密钥(由 Amazon 管理)ECR,也可以指定自己的 Amazon KMS 密钥(称为客户托管密钥)。

      注意

      存储库创建之后,存储库的加密设置无法更改。

    3. 存储库权限中,请指定使用此模板创建的存储库要应用的存储库权限策略。您可以选择使用下拉列表为最常见的用例选择一个JSON示例。有关更多信息,请参阅 Amazon ECR 中的私有存储库政策

    4. 存储库生命周期策略中,指定使用此模板创建的存储库要应用的存储库生命周期策略。您可以选择使用下拉列表为最常见的用例选择一个JSON示例。有关更多信息,请参阅 使用 Amazon 中的生命周期策略自动清理图片 ECR

    5. 对于存储库 Amazon 标签,以键值对的形式指定要与使用此模板创建的存储库关联的元数据,然后选择下一步。有关更多信息,请参阅 在 Amazon 中为私有仓库添加标签 ECR

    6. 对于存储库创建角色,请从下拉菜单中选择一个自定义IAM角色,以便在使用存储库标签时或KMS在模板中用于存储库创建模板(详情请参阅为仓库创建模板创建IAM角色)。然后选择下一步

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

Amazon CLI

create-repository-creation-template Amazon CLI 命令用于为您的私有注册表创建存储库模板。

创建存储库创建模板(Amazon CLI)
  1. 使用 Amazon CLI 为create-repository-creation-template命令生成框架。

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

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

    { "appliedFor":[""], // string array, but valid are PULL_THROUGH_CACHE and REPLICATION "prefix": "string", "description": "string", "imageTagMutability": "MUTABLE"|"IMMUTABLE", "repositoryPolicy": "string", "lifecyclePolicy": "string" "encryptionConfiguration": { "encryptionType": "AES256"|"KMS", "kmsKey": "string" }, "resourceTags": [ { "Key": "string", "Value": "string" } ], "customRoleArn": "string", // must be a valid IAM Role ARN }
  2. 使用上一步repository-creation-template.json的输出创建一个名为的文件。此模板为prod/*使用存储库策略创建的任何存储库设置KMS加密密钥,该策略用于将图像ALLOWs推送和拉取到未来的存储库,设置生命周期策略,使超过两周的图像过期,并设置允许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","REPLICATION"], "encryptionConfiguration": { "encryptionType": "KMS", "kmsKey": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-example11111" }, "resourceTags": [ { "Key": "examplekey", "Value": "examplevalue" } ], "imageTagMutability": "MUTABLE", "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" }
  3. 使用以下命令创建存储库创建模板。请务必指定在上一步中创建的配置文件的名称来代替以下示例repository-creation-template.json中的。

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