

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

# 将上游注册表与 Amazon ECR 私有注册表同步
<a name="pull-through-cache"></a>

使用缓存提取规则，您可以将上游注册表的内容与 Amazon ECR 私有注册表同步。

Amazon ECR 目前支持为以下上游注册表创建提取缓存规则。
+ Amazon ECR Public、Kubernetes 容器映像注册表和 Quay（不需要身份验证）
+ Docker Hub、Microsoft Azure 容器注册表、 GitHub 容器注册表、 GitLab 容器注册表和 Chainguard 注册表（需要使用密钥进行身份验证） Amazon Secrets Manager 
+ Amazon ECR（需要使用 Amazon IAM 角色进行身份验证）

对于 GitLab 容器注册表，Amazon ECR 仅支持通过软件即服务 (SaaS) 产品提取缓存。 GitLab有关使用 GitLab的 SaaS 产品的更多信息，请参阅 [GitLab.com](https://docs.gitlab.com/17.5/subscriptions/choosing_subscription/)。

对于需要使用密钥进行身份验证的上游注册表（例如 Docker Hub），您必须将凭据存储在密钥中。 Amazon Secrets Manager 您可以使用 Amazon ECR 控制台为每个经过身份验证的上游注册表创建 Secrets Manager 密钥。有关使用 Secrets Manager 控制台创建 Secrets Manager 密钥的更多信息，请参阅[将您的上游存储库凭证存储在 Amazon Secrets Manager 密钥中](pull-through-cache-creating-secret.md)。

对于 Amazon ECR，如果上游和下游 Amazon ECR 注册表属于不同的账户，则必须创建一个 IAM 角色。 Amazon 有关创建 IAM 角色的更多信息，请参阅[跨账户 ECR 到 ECR 提取缓存所需的 IAM 策略](pull-through-cache-private.md#pull-through-cache-private-permissions)。

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

## 存储库创建模板
<a name="pull-through-cache-respository-creation-template"></a>

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

## 使用缓存提取规则的注意事项
<a name="pull-through-cache-considerations"></a>

使用 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 ECR 私有注册表 URI 提取图像时，映像拉取将由 Amazon IP 地址启动。
+ 当客户通过 Amazon ECR 私有注册表 URI 提取缓存的图像时，Amazon ECR 会检查它是否在过去 24 小时内根据上游注册表验证了该映像。如果 24 小时窗口已过期，Amazon ECR 会向上游发送请求以检查是否有更新的版本，并更新缓存（如果存在）。如果窗口尚未过期，Amazon ECR 将提供缓存的图像，而无需联系上游。
+ 向已创建的拉取缓存存储库调用 `ListImageReferrers` API 会将符合 OCI 的反向链接工件返回到私有缓存。
+ Amazon ECR 会检查反向链接构件是否在过去 6 小时内进行了更新。如果 6 小时窗口已过期，Amazon ECR 会向上游发送请求以检查是否有较新的版本，并更新缓存（如果存在）。
+ 如果 Amazon ECR 出于任何原因无法从上游注册表更新映像，并且映像已提取，则系统仍会提取最后缓存的映像。
+ 在创建包含上游注册表凭证的 Secrets Manager 密钥时，密钥名称必须使用 `ecr-pullthroughcache/` 前缀。密钥还必须与缓存提取规则位于相同的账户和区域。
+ 当使用缓存提取规则提取多架构镜像时，清单列表和清单列表中引用的每个镜像都会被提取到 Amazon ECR 存储库中。如果您只想提取特定架构，则可以使用与架构关联的镜像摘要或标签，而不是与清单列表关联的标签来提取镜像。
+ Amazon ECR 使用服务相关的 IAM 角色，为 Amazon ECR 提供所需的权限，以创建存储库、检索用于身份验证的 Secrets Manager 密钥，以及代表您推送缓存映像。服务相关 IAM 角色在创建缓存提取规则时自动创建。有关更多信息，请参阅 [用于缓存提取的 Amazon ECR 服务相关角色](slr-pullthroughcache.md)。
+ 默认情况下，提取缓存映像的 IAM 主体具有通过其 IAM policy 授予的权限。您可以使用 Amazon ECR 私有注册表权限策略进一步限定 IAM 实体的权限范围。有关更多信息，请参阅 [使用注册表权限](pull-through-cache-iam.md#pull-through-cache-registry-permissions)。
+ 使用缓存提取工作流创建的 Amazon ECR 存储库与任何其他 Amazon ECR 存储库受到同等对待。支持所有存储库功能，例如复制和镜像扫描。
+ 当 Amazon ECR 使用提取缓存操作代表您创建新存储库时，除非存在匹配的存储库创建模板，否则以下默认设置将应用于存储库。您可以使用存储库创建模板，定义 Amazon ECR 代表您创建的存储库所应用的设置。有关更多信息，请参阅 [用于控制在缓存拉取、推送时创建或复制操作期间创建的存储库的模板](repository-creation-templates.md)。
  + 标签不可变性 - 标签不可变性指定是否可以覆盖映像标签。默认情况下，映像标签是可变的（可以覆盖）。您可以修改标签行为，方法是在**可变**已选定时在**可变标签排除项**文本框中，或在**不可变**已选定时在**不可变标签排除项**文本框中配置标签排除项筛选条件。
  + 加密 – 使用默认 `AES256` 加密。
  + 存储库权限 – 已忽略，不应用任何存储库权限策略。
  + 生命周期策略 – 已忽略，不应用任何生命周期策略。
  + 资源标签 – 已忽略，不应用任何资源标签。
+ 使用缓存提取规则为存储库启用映像标签不变性，这将阻止 Amazon ECR 使用相同的标签更新映像。
+ 首次使用缓存提取规则提取映像时，可能需要通往互联网的路由。在某些情况下，需要通往互联网的路由，因此最好设置一条这样的路由，以免出现任何故障。因此，如果您已将 Amazon ECR 配置为使用接口 VPC 终端节点， Amazon PrivateLink 则需要确保第一次拉取具有通往互联网的路由。一种方法是在同个 VPC 中创建带有互联网网关的公有子网，然后将流至互联网的所有出站流量从私有子网路由到公有子网。使用缓存提取规则进行的后续映像提取不需要此操作。有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[示例路由选项](https://docs.amazonaws.cn/vpc/latest/userguide/route-table-options.html)。**