使用缓存提取规则 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用缓存提取规则

Amazon ECR 支持私有 Amazon ECR 注册表中的远程公有注册表中的缓存存储库。Amazon ECR 目前支持为 Amazon ECR Public 和 Quay 创建缓存提取规则。为外部公有注册表创建了缓存提取后,只需使用 Amazon ECR 私有注册表 URI 从该外部公有注册表中提取镜像,然后 Amazon ECR 将会创建存储库并缓存该镜像。当使用 Amazon ECR 私有注册表 URI 提取缓存镜像时,Amazon ECR 会检查远程注册表以查看是否有新版本的镜像,并且会最多每 24 小时更新一次您的私有注册表。

使用缓存提取的注意事项

使用 Amazon ECR 缓存提取时,应考虑以下内容。

  • 以下区域不支持创建缓存提取规则:

    • 中国(北京) (cn-north-1)

    • 中国(宁夏) (cn-northwest-1)

    • AmazonGovCloud (US-East)us-gov-east-1

    • AmazonGovCloud (US-West)us-gov-west-1

  • 如果使用提取缓存提取镜像,首次提取镜像时不支持 Amazon ECR FIPS 服务终端节点。但是,使用 Amazon ECR FIPS 服务终端节点可以处理后续提取。

  • 您最多可以为私有注册表创建 10 个缓存提取规则。

  • 当缓存的镜像通过 Amazon ECR 私有注册表 URI 提取时,镜像提取将由 Amazon IP 地址启动。这可以确保镜像提取不被计入公有注册表所具有的任何提取率配额。

  • 当缓存的镜像通过 Amazon ECR 私有注册表 URI 提取时,Amazon ECR 最多每 24 小时检查一次远程存储库,以验证缓存的镜像是否为最新版本。此计时器基于缓存镜像的最后一次提取。

  • 当使用缓存提取规则提取多架构镜像时,清单列表和清单列表中引用的每个镜像都会被提取到 Amazon ECR 存储库中。如果您只想提取特定架构,则可以使用与架构关联的镜像摘要或标签,而不是与清单列表关联的标签来提取镜像。

  • Amazon ECR 使用服务相关的 IAM 角色,该角色为 Amazon ECR 提供了为您创建存储库和推送缓存镜像所需的权限。服务相关 IAM 角色在创建缓存提取规则时自动创建。有关更多信息,请参阅 用于缓存提取的 Amazon ECR 服务相关角色

  • 默认情况下,提取缓存镜像的 IAM 用户、组或角色具有通过其 IAM 策略授予他们的权限。您可以使用 Amazon ECR 私有注册表权限策略进一步限定 IAM 实体的权限范围。有关更多信息,请参阅 使用注册表权限

  • 使用缓存提取工作流创建的 Amazon ECR 存储库与任何其他 Amazon ECR 存储库受到同等对待。支持所有存储库功能,例如复制和镜像扫描。

  • 当使用缓存提取规则创建新存储库时,标签不变性默认被禁用。如果您手动启用存储库标签不变性,Amazon ECR 可能无法更新缓存的镜像。

  • 当使用缓存提取规则创建新存储库时,Amazon KMS 加密默认被禁用。如果您想使用 Amazon KMS 加密,您可以在首次提取镜像之前手动创建存储库。

  • 首次使用缓存提取规则提取镜像时,如果您已将 Amazon ECR 配置为通过 Amazon PrivateLink 使用接口 VPC 终端节点,您需要在同一个 VPC 中创建一个带有 NAT 网关的公有子网,然后将从私有子网路由到互联网的所有出站流量引至 NAT 网关,才能使提取操作正常工作。后续的镜像提取不需要此操作。有关更多信息,请参阅 Amazon Virtual Private Cloud 用户指南中的场景:从私有子网访问互联网

所需的 IAM 权限

除了对私有注册表进行身份验证和推送及拉取镜像所需的 Amazon ECR API 权限之外,还需要以下其他权限才能使用拉取缓存规则。

  • ecr:CreatePullThroughCacheRule – 授予创建拉取缓存规则的权限。此权限必须通过基于身份的 IAM 策略授予。

  • ecr:BatchImportUpstreamImage – 授权检索外部镜像并将其导入到您的私有注册表。可以通过使用私有注册表权限策略、基于身份的 IAM 策略或通过使用基于资源的存储库权限策略授予此权限。有关使用存储库权限的更多信息,请参阅 私有存储库策略

  • ecr:CreateRepository – 授予在私有注册表中创建存储库的权限。如果存储缓存图像的存储库不存在,则需要此权限。可以通过基于身份的 IAM 策略或私有注册表权限策略授予此权限。

使用注册表权限

Amazon ECR 私有注册表权限可用于限定各个 IAM 实体使用缓存提取的权限范围。如果 IAM 策略授予 IAM 实体的权限多于注册表权限策略授予的权限,则 IAM 策略优先。例如,如果 IAM 用户已授予 ecr:* 权限,则无需额外的注册表级别权限。但是,如果只有 IAM 用户

  1. 打开位于 https://console.aws.amazon.com/ecr/ 的 Amazon ECR 控制台。

  2. 从导航栏中,选择您在其中配置私有注册表权限语句的区域。

  3. 在导航窗格中,选择 Private registry(私有注册表)、Registry permissions(注册表权限)。

  4. Registry permissions(注册表权限)页面上,选择 Generate statement(生成语句)。

  5. 对于要创建的每个缓存提取权限策略语句,请执行以下操作。

    1. 对于 Policy type(策略类型),请选择 Pull through cache policy(推送缓存策略)。

    2. 对于 Statement id(语句 ID),为推送缓存语句策略提供名称。

    3. 对于 IAM entities(IAM 实体),指定要包含在策略中的 IAM 用户、组或角色。

    4. 对于 Repository namespace(存储库命名空间),选择要与策略关联的推送缓存规则。

    5. 对于 Repository names(存储库名称),指定要应用规则的存储库基本名称。例如,如果您想在 Amazon ECR Public 上指定 Amazon Linux 存储库,存储库名称将为 amazonlinux

使用以下命令 Amazon CLI 命令来通过 Amazon CLI 指定私有注册表权限。

  1. 创建名为 ptc-registry-policy.json 的本地文件,其中包含注册表策略的内容。以下示例授予 ecr-pull-through-cache-user IAM 用户创建存储库并从 Amazon ECR Public 中拉取镜像的权限,Amazon ECR Public 是与之前创建的拉取缓存规则相关联的上游源。

    { "Sid": "PullThroughCacheFromReadOnlyRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ecr-pull-through-cache-user" }, "Action": [ "ecr:CreateRepository", "ecr:BatchImportUpstreamImage" ], "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/ecr-public/*" }
    重要

    仅当存储缓存镜像的存储库不存在时才需要 ecr-CreateRepository 权限。例如,如果存储库创建操作和镜像拉取操作是由单独的 IAM 主体(例如管理员和开发人员)完成。

  2. 使用 put-registry-policy 命令设置注册表策略。

    aws ecr put-registry-policy \ --policy-text file://ptc-registry.policy.json

创建缓存提取规则

您可以为包含您要在 Amazon ECR 私有注册表中缓存的镜像的每个外部公有注册表创建一个缓存提取规则。

要创建缓存提取规则 (Amazon Web Services Management Console)

  1. 打开位于 https://console.aws.amazon.com/ecr/ 的 Amazon ECR 控制台。

  2. 从导航栏中,选择要配置私有注册表设置的区域。

  3. 在导航窗格中,选择 Private registry(私有注册表)、Pull through cache(缓存提取)。

  4. Pull through cache configuration(缓存提取配置)页面上,选择 Add rule(添加规则)。

  5. Create pull through cache rule(创建缓存提取规则)页面上,执行以下操作。

    1. 对于 Public registry(公有注册表),选择其中一个预配置的公有注册表。

    2. 对于 Amazon ECR repository namespace(Amazon ECR 存储库命名空间),指定缓存从源公有注册表中提取镜像时要使用的存储库命名空间。默认情况下,已填充命名空间,但也可以指定自定义命名空间。

    3. 选择 Save(保存)以将缓存提取规则保存到注册表设置中。

  6. 对要创建的每个缓存提取重复上一步骤。单独为每个区域创建了缓存提取规则。

使用以下 Amazon CLI 命令通过 Amazon CLI 为私有注册表创建缓存提取规则。

  • create-pull-through-cache-rule (Amazon CLI)

    以下示例为 Amazon ECR 公有注册表创建一个缓存提取规则。它指定了存储库前缀 ecr-public,这导致使用缓存提取规则创建的每个存储库都具有 ecr-public/upstream-repository-name 命名方案。

    aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix ecr-public \ --upstream-registry-url public.ecr.aws \ --region us-east-2

    以下示例为 Quay 公有注册表创建了一个缓存提取规则。它指定了存储库前缀 quay,这导致使用推送缓存规则创建的每个存储库都具有命名方案 quay/upstream-repository-name

    aws ecr create-pull-through-cache-rule \ --ecr-repository-prefix quay \ --upstream-registry-url quay.io \ --region us-east-2

使用缓存提取镜像

为外部公有注册表创建缓存提取规则后,只需使用 Amazon ECR 存储库 URI 提取远程镜像,然后镜像将在本地缓存。下面是支持的公有注册表的格式。如果您在使用拉取缓存规则拉取上游镜像时收到错误,请参阅 使用拉取缓存规则进行拉取时出错,以查看最常见的错误以及如何解决这些错误。

注意

以下示例使用 Amazon Web Services Management Console 所用的默认 Amazon ECR 存储库命名空间值。确保您使用已配置的 Amazon ECR 私有存储库 URI。

Amazon ECR Public

docker pull aws_account_id.dkr.ecr.region.amazonaws.com/ecr-public/repository_name/image_name:tag

Quay

docker pull aws_account_id.dkr.ecr.region.amazonaws.com/quay/repository_name/image_name:tag

删除缓存提取规则

您可以删除缓存提取规则以停止缓存行为。删除缓存提取规则不会对缓存的存储库或镜像产生任何影响,它只会阻止将来的缓存行为。

要删除缓存提取规则 (Amazon Web Services Management Console)

  1. 打开位于 https://console.aws.amazon.com/ecr/ 的 Amazon ECR 控制台。

  2. 从导航栏中,选择要配置私有注册表设置的区域。

  3. 在导航窗格中,选择 Private registry(私有注册表)、Pull through cache(缓存提取)。

  4. Pull through cache configuration(缓存提取配置)页面上,选择要删除的缓存提取规则,然后选择 Delete rule(删除规则)。

  5. 在导航窗格中,选择 Private registry(私有注册表)、Registry permissions(注册表权限)。

  6. (可选)在 Registry permissions(注册表权限)页面中,查看现有的注册表权限策略语句。您可以删除任何与已删除的缓存提取规则的存储库命名空间关联的注册表权限策略语句。

使用以下 Amazon CLI 命令通过 Amazon CLI 删除缓存提取规则。

  • delete-pull-through-cache-rule (Amazon CLI)

    以下示例删除了使用 ecr-public 存储库前缀的缓存提取规则。

    aws ecr delete-pull-through-cache-rule \ --ecr-repository-prefix ecr-public \ --region us-east-2