

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

# 向 Amazon ECR 注册表提出请求
<a name="ecr-requests"></a>

您可以使用 IPv4-only 终端节点或双堆栈（IPv4 和 IPv6）终端节点推送、提取、删除、查看和管理 Amazon ECR 私有注册表中的 OCI 映像、Docker 映像和 OCI-compatible项目。要从 IPv4 网络发出请求，您可以使用双堆栈或 IPv4 端点。要从 IPv6 网络发出请求，您可以使用双堆栈端点。有关使用 IPv4 和双堆栈端点向 Amazon ECR 公共注册表发出请求的更多信息，请参阅[向 Amazon ECR 公共注册表发出请求](https://docs.aws.amazon.com/AmazonECR/latest/public/public-ecr-requests.html)。通过 IPv6 访问 Amazon ECR 不额外收费。有关定价的更多信息，请参阅 [Amazon Elastic Container Registry 定价](https://aws.amazon.com/ecr/pricing/)。

Amazon ECR 终端节点由终端 IPv4-only 节点或双栈终端节点支持的属性指定。这些属性可以包括：
+ **区域** - 每个端点都特定于一个区域。
+ **类型** — 端点的选择取决于您使用的是 AWS SDK 还是 OCI-compatible 和 Docker 命令行接口。
+ **安全** — Amazon ECR 在部分地区提供 FIPS-compliant 终端节点。有关 FIPS-compliant Amazon ECR 终端节点列表的更多信息，请参阅[联邦信息处理标准 (FIPS)](https://aws.amazon.com/compliance/fips/) 140-3。

[有关 IPv4、双堆栈、Docker 和 OCI 客户端支持的服务终端节点的更多信息，这些客户端处理来自 CL AWS I 和 AWS 软件开发工具包的 Amazon ECR API 调用，请参阅服务终端节点。](https://docs.aws.amazon.com//general/latest/gr/ecr.html#ecr_region)

## 通过 IPv6 发出请求入门
<a name="ipv6-access-getting-started"></a>

要通过 IPv6 向 Amazon ECR 注册表发出请求，您需要使用双堆栈端点。在通过 IPv6 访问 Amazon ECR 注册表之前，请验证以下要求：
+ 您的客户端和网络必须支持 IPv6。
+ Amazon ECR 通过 IPv6 支持以下请求类型：
  + OCI 和 Docker 客户端请求：

     `{{<registry-id>}}.dkr-ecr.{{<aws-region>}}.on.aws` 
  + AWS API 请求：

     `ecr.{{<aws-region>}}.api.aws` 
+ 您必须更新使用源 IP 地址筛选的任何 AWS Identity and Access Management (IAM) 或注册表策略，以包括 IPv6 地址范围。有关更多信息，请参阅 [在 IAM 策略中使用 IPv6 地址](#ecr-request-ipv6-access-iam)。
+ 当您使用 IPv6 时，服务器访问日志以 IPv6 格式显示 `Remote IP` 地址。更新现有工具、脚本和软件以解析这些 IPv6-formatted IP 地址。
**注意**  
如果在日志文件中遇到与 IPv6 地址相关的问题，请联系 [AWS Support](https://aws.amazon.com/premiumsupport/)。

## 测试 IP 地址兼容性
<a name="ipv6-access-test-compatabilty"></a>

如果您使用的是 use Linux/Unix 或 Mac OS X，则可以使用以下示例所示的`curl`命令测试是否可以通过 IPv6 访问双栈端点：

**Example**  

```
curl --verbose https://ecr.us-west-2.api.aws
```
您获得的信息如下例所示。如果通过 IPv6 连接，则连接的 IP 地址将会是 IPv6 地址。  

```
* About to connect() to ecr.us-west-2.api.aws port 443 (#0)
* Trying IPv6 address... connected
* Connected to ecr.us-west-2.api.aws (IPv6 address) port 443 (#0)
> Host: ecr.us-west-2.api.aws
* Request completely sent off
```

如果使用 Microsoft Windows 7 或 Windows 10，则通过使用下例所示的 `ping` 命令，可以测试您能否通过 IPv4 或 IPv6 访问双堆栈端点。

```
ping ecr.us-west-2.api.aws
```

## 使用双堆栈端点通过 IPv6 发出请求
<a name="ecr-access-api"></a>

您可以使用双堆栈端点通过 IPv6 进行 Amazon ECR API 调用。无论您使用 IPv4 还是 IPv6，Amazon ECR API 操作的功能和性能都保持一致。

使用 AWS Command Line Interface (AWS CLI) 和 AWS 软件开发工具包时，您可以启用 IPv6，方法是使用参数或标志切换到双堆栈终端节点，或者直接在配置文件中指定双堆栈终端节点以覆盖默认 Amazon ECR 终端节点。您也可以使用命令进行配置更改，在默认配置文件中将 `use_dualstack_endpoint` 设置为 true。有关更多信息`use_dualstack_endpoint`，请参阅[Dual-stack 和 FIPS 端点](https://docs.aws.amazon.com//sdkref/latest/guide/feature-endpoints.html)。

**Example 使用命令更改配置**  <a name="ecr-private-config-changes"></a>
 `aws configure set default.ecr.use_dualstack_endpoint true` 

**Example 使用通过 IPv6 发出请求 AWS CLI**  <a name="ecr-private-make-requests-cli"></a>
 ` aws ecr describe-repositories --region us-west-2 --endpoint-url https://ecr.us-west-2.api.aws` 

## 从 docker CLI 使用 Amazon ECR 端点
<a name="ecr-requests-from-docker-cli"></a>

 登录您的 Amazon ECR 存储库并标记映像后，您可以向 Amazon ECR 注册表推送和从其拉取 OCI 映像和 Docker 映像。以下示例演示了使用两个双堆栈端点的 docker push 和 Docker 拉取命令。

**Example 使用 IPv4 端点推送 docker 映像**  <a name="ecr-private-ecr-push-docker-ipv4"></a>
`docker push {{<registry-id>}}.dkr.ecr.us-west-1.amazonaws.com/my-repository:tag`

**Example 使用双堆栈端点推送 docker 映像**  <a name="ecr-private-ecr-push-docker-dual-stack"></a>
`docker push {{<registry-id>}}.dkr-ecr.us-west-1.on.aws/my-repository:tag`

**Example 使用 IPv4 端点拉取 docker 映像**  <a name="ecr-private-ecr-pull-docker-ipv4"></a>
`docker pull {{<registry-id>}}.dkr.ecr.us-west-1.amazonaws.com/my-repository:tag`

**Example 使用双堆栈端点拉取 docker 映像**  <a name="ecr-private-ecr-pull-docker-dual-stack"></a>
`docker pull {{<registry-id>}}.dkr-ecr.us-west-1.on.aws/my-repository:tag`

## 在 IAM 策略中使用 IPv6 地址
<a name="ecr-request-ipv6-access-iam"></a>

在使用 IPv6 访问注册表之前，请确保使用 IP 地址筛选的 IAM 用户和 Amazon ECR 注册策略包含 IPv6 地址范围。如果未更新为处理 IPv6 地址的 IP 地址筛选策略，则客户端在开始使用 IPv6 时，可能会错误地丢失或获得注册表访问权限。有关使用 IAM 管理访问权限的更多信息，请参阅 [适用于 Amazon Elastic Container Registry 的 Identity and Access Management](security-iam.md)。

筛选 IP 地址的 IAM 策略使用 [IP 地址条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_IPAddress)。下面的注册表策略示例说明如何通过使用 IP 地址条件运算符确定允许的 IPv4 地址范围 `54.240.143.*`。此范围之外的所有 IP 地址对注册表 (`exampleregistry`) 的访问都会被拒绝。由于所有 IPv6 地址都在允许范围之外，此策略会阻止 IPv6 地址访问 `exampleregistry`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "ecr:*",
      "Resource": "arn:aws:ecr:*:*:repository/{{exampleregistry}}/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      } 
    } 
  ]
}
```

------

要同时允许 IPv4 (`54.240.143.0/24`) 和 IPv6 (`2001:DB8:1234:5678::/64`) 地址范围，请按以下示例所示修改注册表策略的条件元素。您可以使用此 `Condition` 块格式来更新 IAM 用户和注册表策略。

```
1.        "Condition": {
2.          "IpAddress": {
3.             "aws:SourceIp": [
4.               "54.240.143.0/24",
5.                "2001:DB8:1234:5678::/64"
6.              ]
7.           }
8.         }
```

**重要**  
在使用 IPv6 之前，必须对使用 IP 地址筛选的所有相关 IAM 用户和注册表策略进行更新。我们建议不要在注册表策略中使用 IP 地址筛选。

您可以使用 IAM 控制台查看您的 IAM 用户政策，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。有关 IAM 的更多信息，请参阅《IAM 用户指南》[https://docs.aws.amazon.com/IAM/latest/UserGuide/](https://docs.aws.amazon.com/IAM/latest/UserGuide/)。