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

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

使用缓存提取规则

通过缓存提取规则,您可以将上游注册表的内容与 Amazon ECR 私有注册表同步。Amazon ECR 目前支持为以下上游注册表创建缓存提取规则。

  • Docker Hub、微软 Azure 容器注册表和 GitHub 容器注册表(需要身份验证)

  • Amazon ECR Public、Kubernetes 容器映像注册表和 Quay(不需要身份验证)

对于需要身份验证的上游注册表,您必须将凭据存储在 Amazon Secrets Manager 密钥中。通过 Amazon ECR 控制台,您可以轻松地为每个经过身份验证的上游注册表创建 Secrets Manager 密钥。有关使用 Secrets Manager 控制台创建 Secrets Manager 密钥的更多信息,请参阅将您的上游存储库凭证存储在 Amazon Secrets Manager 密钥中

为上游注册表创建缓存提取规则后,只需使用 Amazon ECR 私有注册表 URI 从该上游注册表中提取映像即可。然后,Amazon ECR 会创建一个存储库,在私有注册表中缓存该映像。在您随后对带有给定标签的缓存图像的拉取请求中,Amazon ECR 会检查上游注册表,以查看是否有带有该特定标签的镜像的新版本,并尝试至少每 24 小时更新一次私有注册表中的镜像。

Amazon ECR 已支持存储库创建模板(目前处于预览阶段)。这样的话,在为 Amazon ECR 使用缓存提取规则代表您创建的新存储库指定初始配置时,您有控制权。每个模板都包含存储库命名空间前缀,用于将新存储库与特定模板匹配。模板可以指定所有存储库设置的配置,包括基于资源的访问策略、标签不变性、加密和生命周期策略。存储库创建模板中的设置仅在存储库创建期间应用,对现有存储库或使用任何其他方法创建的存储库没有任何影响。有关更多信息,请参阅 管理存储库创建模板

使用缓存提取的注意事项

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

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

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

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

    • Amazon GovCloud (美国东部)(us-gov-east-1)

    • Amazon GovCloud (美国西部)(us-gov-west-1)

  • Amazon Lambda 不支持使用拉取缓存规则从 Amazon ECR 提取容器映像。

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

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

  • 当通过 Amazon ECR 私有注册表 URI 提取缓存的映像时,Amazon ECR 至少每 24 小时检查一次上游存储库,以验证缓存的映像是否为最新版本。如果上游注册表中有较新的映像,Amazon ECR 会尝试更新缓存的映像。此计时器基于缓存镜像的最后一次提取。

  • 如果 Amazon ECR 出于任何原因无法从上游注册表更新映像,并且映像已提取,则系统仍会提取最后缓存的映像。

  • 在创建包含上游注册表凭证的 Secrets Manager 密钥时,密钥名称必须使用 ecr-pullthroughcache/ 前缀。密钥还必须与缓存提取规则位于相同的账户和区域。

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

  • Amazon ECR 使用服务相关的 IAM 角色,为 Amazon ECR 提供所需的权限,以创建存储库、检索用于身份验证的 Secrets Manager 密钥,以及代表您推送缓存映像。服务相关 IAM 角色在创建缓存提取规则时自动创建。有关更多信息,请参阅 用于缓存提取的 Amazon ECR 服务相关角色

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

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

  • 当 Amazon ECR 使用提取缓存操作代表您创建新存储库时,除非存在匹配的存储库创建模板,否则以下默认设置将应用于存储库。您可以使用存储库创建模板,定义 Amazon ECR 代表您创建的存储库所应用的设置。有关更多信息,请参阅 管理存储库创建模板

    • 标签不变性 – 已关闭,标签可变、可被覆盖。

    • 加密 – 使用默认 AES256 加密。

    • 存储库权限 – 已忽略,不应用任何存储库权限策略。

    • 生命周期策略 – 已忽略,不应用任何生命周期策略。

    • 资源标签 – 已忽略,不应用任何资源标签。

  • 使用缓存提取规则为存储库启用映像标签不变性,这将阻止 Amazon ECR 使用相同的标签更新映像。

  • 首次使用直通缓存规则拉取图像时,可能需要通往互联网的路由。在某些情况下,需要一条通往互联网的路由,因此最好设置一条路由,以免出现任何故障。因此,如果您已将 Amazon ECR 配置为使用接口 VPC 终端节点, Amazon PrivateLink 则需要确保第一次拉取具有通往互联网的路由。一种方法是在同一 VPC 中创建一个带有 Internet 网关的公有子网,然后将所有出站流量从私有子网路由到公有子网。后续使用拉取缓存规则拉取图像不需要这样做。有关更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的示例路由选项

所需的 IAM 权限

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

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

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

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

  • ecr:TagResource – 授权将元数据标签添加到 Amazon RDS 资源。仅当以下情况时需要此权限:您提取的映像采用缓存提取规则,该规则具有关联的存储库创建模板,而该模板配置为向存储库添加资源标签。此权限必须通过基于身份的 IAM policy 授予。

使用注册表权限

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

  1. 打开 Amazon ECR 控制台:https://console.aws.amazon.com/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 实体),指定要包含在策略中的用户、组或角色。

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

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

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

  1. 创建名为 ptc-registry-policy.json 的本地文件,其中包含注册表策略的内容。以下示例授予创建存储库并从 Amazon ECR Public 中拉取镜像的 ecr-pull-through-cache-user 权限,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 在缓存提取操作期间代表您创建的新存储库定义设置时,您能拥有控制权。有关更多信息,请参阅 管理存储库创建模板

  • 了解如何使用缓存提取规则。有关更多信息,请参阅 使用缓存提取规则