

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

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

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

Amazon ECR 终端节点由超出 IPv4仅限终端节点或双栈终端节点支持的属性指定。这些属性可以包括：
+ **区域** - 每个端点都特定于一个区域。
+ **类型** — 端点的选择取决于你使用的是软件开发工具包还是兼容 OCI 和 AWS Docker 命令行接口。
+ **安全** - 在部分地区，Amazon ECR 提供符合 FIPS 标准的端点。有关符合 FIPS 的 Amazon ECR 端点列表的更多信息，请参阅[《美国联邦信息处理标准 (FIPS) 第 140-3 版》](https://aws.amazon.com/compliance/fips/)。

[有关处理来 IPv4自 CLI 的 Amazon ECR API 调用的双栈客户端、Docker 和 OC AWS I 客户端支持的服务终端节点的更多信息， AWS SDKs 请参阅服务终端节点。](https://docs.aws.amazon.com//general/latest/gr/ecr.html#ecr_region)

## 开始提出请求 IPv6
<a name="ipv6-access-getting-started"></a>

要向 Amazon ECR 注册表发出请求 IPv6，您需要使用双堆栈终端节点。在访问 Amazon ECR 注册表之前 IPv6，请验证以下要求：
+ 您的客户端和网络必须支持 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格式化的 IP 地址。
**注意**  
如果您遇到与日志文件中存在 IPv6 地址有关的问题，请与联系[AWS 支持](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
```
您获得的信息如下例所示。如果您通过连接的 IP 地址 IPv6 进行连接，则该地址将是一个 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，则可以测试是否 IPv6 可以通过 IPv4 或使用`ping`命令访问双栈终端节点，如下例所示。

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

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

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

使用 AWS Command Line Interface (AWS CLI) 和时 AWS SDKs，您可以通过使用参数或标志来启用 IPv6 以切换到双堆栈终端节点，或者直接在配置文件中指定双堆栈终端节点以覆盖默认 Amazon ECR 终端节点。您也可以使用命令进行配置更改，在默认配置文件中将 `use_dualstack_endpoint` 设置为 true。有关 `use_dualstack_endpoint` 的更多信息，请参阅[双堆栈和 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 推送和 docker 拉取命令。

**Example 使用端点推送 docker 镜像 IPv4**  <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 使用端点提取 docker 镜像 IPv4**  <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 地址范围。如果 IP 地址筛选策略未更新以处理 IPv6 地址，则客户端在开始使用注册表时可能会错误地丢失注册表或获得对注册表的访问权限 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 元素，如以下示例所示。您可以使用此 `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/)。