

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

# Amazon ECR 中的私有映像复制
<a name="replication"></a>

您可以配置 Amazon ECR 私有注册表以支持存储库的复制。Amazon ECR 同时适用于跨区域和跨账户复制。要进行跨账户复制，目标账户必须配置注册表权限策略，以允许从源注册表进行复制。有关更多信息，请参阅 [Amazon ECR 中的私有注册表权限](registry-permissions.md)。

**Topics**
+ [跨账户复制策略要求](#replication-policy-clarification)
+ [私有镜像复制的注意事项](#replication-considerations)
+ [Amazon ECR 的私有映像复制示例](registry-settings-examples.md)
+ [在 Amazon ECR 中配置私有映像复制](registry-settings-configure.md)
+ [移除 Amazon ECR 中的私有映像复制设置](registry-settings-remove.md)

## 跨账户复制策略要求
<a name="replication-policy-clarification"></a>

要使跨账户 ECR 复制正常运行，您必须了解哪个账户需要配置哪些策略。本部分阐明了源账户和目标账户的策略要求。

### 策略配置概述
<a name="replication-policy-overview"></a>

跨账户 ECR 复制仅需要在**目标账户**上配置策略。源账户不需要任何特殊的存储库或注册表策略。
+ **源账户**：在注册表设置中配置复制规则。无需为源存储库设置其他策略。
+ **目标账户**：配置注册表权限策略以允许源账户复制映像。

### 目标注册表策略要求
<a name="destination-registry-policy-requirements"></a>

目标账户必须配置注册表权限策略，以授予源账户执行以下操作的权限：
+ `ecr:ReplicateImage` - 允许源账户将映像复制到目标注册表中
+ `ecr:CreateRepository` - 允许 ECR 在目标注册表中自动创建存储库（如果这些存储库尚不存在）

**重要**  
如果您不授予 `ecr:CreateRepository` 权限，则必须在目标账户中手动创建同名的存储库，然后才能成功复制。

目标注册表策略示例：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCrossAccountReplication",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "ecr:ReplicateImage",
                "ecr:CreateRepository"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### 源账户要求
<a name="source-account-requirements"></a>

源账户只需：
+ 在注册表设置中配置复制规则以指定目标账户和区域
+ 确保配置复制的 IAM 主体拥有必要的 ECR 权限

**源存储库不需要其他策略。**源存储库不需要授予复制权限的存储库策略。

### 常见误解
<a name="common-misconceptions"></a>

以下是关于 ECR 跨账户复制策略的常见误解：
+ **误解**：源存储库需要一个允许目标账户复制映像的策略。

  **现实**：源存储库不需要任何特殊的复制策略。
+ **误解**：源账户和目标账户都需要注册表策略。

  **现实**：只有目标账户需要注册表权限策略。
+ **误解**：存储库策略和注册表策略是一回事。

  **现实**：存储库策略控制对单个存储库的访问，而注册表策略控制注册表级别的操作，例如复制。

### 对复制失败进行问题排查
<a name="replication-troubleshooting"></a>

如果跨账户复制失败，请检查以下内容：
+ 验证目标账户是否配置了注册表权限策略
+ 确保注册表策略同时包含 `ecr:ReplicateImage` 和 `ecr:CreateRepository` 操作
+ 确认在目标注册表策略中正确指定了源帐户 ID
+ 检查目标存储库是否存在（如果未授予 `ecr:CreateRepository`）
+ 查看失败`CreateRepository`或 `ReplicateImage` API 调用的 CloudTrail 日志

## 私有镜像复制的注意事项
<a name="replication-considerations"></a>

使用私有镜像复制时应注意以下事项。
+ 只有在配置复制后推送或还原到存储库的存储库内容才会被复制。存储库中任何先前存在的内容都不会复制。如果在开启复制功能后恢复映像，则会对其进行复制。如果在开启复制功能之前将其恢复，则不会对其进行复制。
+ 复制完成后，跨区域和账户的存储库名称将保持不变。Amazon ECR 不支持在复制过程中更改存储库名称。
+ 首次配置私有注册表以进行复制时，Amazon ECR 会代表您创建服务相关 IAM 角色。服务相关 IAM 角色授予 Amazon ECR 复制服务在注册表中创建存储库和复制镜像所需的权限。有关更多信息，请参阅 [对 Amazon ECR 使用服务相关角色](using-service-linked-roles.md)。
+ 要进行跨账户复制，私有注册表目标必须授予允许源注册表复制其镜像的权限。通过设置私有注册表权限策略来完成此授权。有关更多信息，请参阅 [Amazon ECR 中的私有注册表权限](registry-permissions.md)。
+ 如果更改私有注册表的权限策略以删除权限，则以前授予权限的任何进行中复制都可能完成。
+ 要进行跨区域复制，在该区域内或向该区域进行任何复制操作之前，源账户和目标账户都必须选择加入该区域。有关更多信息，请参阅《Amazon Web Services 一般参考》**中的[管理 AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。
+ 不支持在 AWS 分区之间进行跨区域复制。例如，`us-west-2` 中的存储库无法复制到 ` cn-north-1`。有关 AWS 分区的更多信息，请参阅《*AWS 一般*参考》中的 [ARN 格式](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax)。
+ 私有注册表的复制配置最多可以包含 25 个跨所有规则的唯一目标，最多共有 10 个规则。每个规则最多可包含 100 个筛选条件。这允许为包含用于生产和测试的镜像的存储库指定单独的规则。
+ 复制配置支持通过指定存储库前缀来筛选私有注册表中复制的存储库。有关示例，请参阅 [示例：使用存储库筛选条件配置跨区域复制](registry-settings-examples.md#registry-settings-examples-crr-filter)。
+ 每次推送映像或恢复映像时，复制操作仅发生一次。例如，如果您配置了从 `us-west-2` 到 ` us-east-1` 以及从 `us-east-1` 到 `us-east-2` 的跨区域复制，则推送到 `us-west-2` 的镜像仅复制到 `us-east-1`，它不会再复制到 `us-east-2`。此行为同时适用于跨区域和跨账户复制。
+ 大多数映像会在不到 30 分钟的时间内复制，但在极少数情况下，复制可能需要更长的时间。
+ 注册表复制不执行任何删除操作或存档操作。复制的映像和存储库在不再使用时可以将其删除或存档。
+ 如果要复制的图像已存档到目标，则将在目标中恢复。
+ 在源区域存档图像时，不会将其存档到复制配置指定的目标区域。
+ 存储库策略 (包括 IAM policy) 和生命周期策略不会被复制，而且除了对为其定义的存储库之外，不会产生任何影响。
+ 默认情况下不会复制存储库设置，您可以使用存储库创建模板来复制存储库设置。这些设置包括标签可变性、加密、存储库权限和生命周期策略。有关存储库创建模板的更多信息，请参阅 [用于控制在缓存拉取、推送时创建或复制操作期间创建的存储库的模板](repository-creation-templates.md)。
+ 如果在存储库上启用了标签不变性，并且复制了与现有镜像使用相同标签的镜像，则该镜像将被复制，但不包含重复的标签。这可能会形成未标记的镜像。
+ 复制映像时，如果已配置 blob 挂载，ECR 将进行检查以确保目标注册表中已存在源存储库中的所有层。如果目标注册表中已存在任何层，ECR 将装载这些层。

**注意**  
如果源注册表与其目标注册表不同，则需要为两个注册表启用 blob 挂载，ECR 才能挂载复制的层。