Amazon ECR 接口 VPC 终端节点 (AmazonPrivateLink) - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon ECR 接口 VPC 终端节点 (AmazonPrivateLink)

您可以将 Amazon ECR 配置为使用接口 VPC 终端节点以改善 VPC 的安全状况。VPC 终端节点由以下公司提供支持AmazonPrivateLink 是一种技术,该技术使您能够通过私有 IP 地址私下访问 Amazon ECR API。AmazonPrivateLink 将 VPC 和 Amazon ECR 之间的所有网络流量限制在 Amazon 网络以内。您无需互联网网关、NAT 设备或虚拟私有网关。

有关 的更多信息AmazonPrivateLink 和 VPC 终端节点,请参阅VPC 终端节点中的Amazon VPC User Guide.

亚马逊 ECR VPC 终端节点的注意事项

在为 Amazon ECR 配置 VPC 终端节点之前,请注意以下事项:

  • 要允许使用 EC2 启动类型的 Amazon ECR 任务从 Amazon ECR 拉取私有镜像,请确保也为 Amazon ECR 创建接口 VPC 终端节点。有关更多信息,请参阅 。接口 VPC 终端节点 (AmazonPrivateLink)中的Amazon Elastic Container Service 开发者指南.

    重要

    使用 Fargate 启动类型的 Amazon ECS 任务不需要 Amazon ECS 接口 VPC 终端节点。

  • 使用 Fargate 启动类型和平台版本 1.3.0 或更早版本的 Amazon ECS 任务只需要com.amazonaws.区域.ecr.dkrAmazon ECR VPC 终端节点和 Amazon S3 网关终端节点以利用此功能。

  • 使用 Fargate 启动类型和平台版本 1.4.0 或更高版本的 Amazon ECS 任务需要com.amazonaws.区域.ecr.dkrcom.amazonaws.区域.ecr.apiAmazon ECR VPC 终端节点和 Amazon S3 网关终端节点以利用此功能。

  • 使用 Fargate 启动类型的 Amazon ECR 任务可以通过向其任务的任务执行 IAM 角色添加条件键,限制对其任务使用的特定 VPC 和服务使用的 VPC 终端节点的访问。有关更多信息,请参阅 。用于通过接口终端节点提取 Amazon ECR 映像的 Fargate 任务的可选 IAM 权限中的Amazon Elastic Container Service 开发者指南.

  • Amazon ECR 任务使用 Fargate 启动类型的 Amazon ECR 任务(从 Amazon ECR 拉取容器映像,同时使用awslogs日志驱动程序将日志信息发送到 CloudWatch Logs 需要 CloudWatch Logs VPC 终端节点。有关更多信息,请参阅 创建 CloudWatch Logs 终端节点

  • 附加到 VPC 终端节点的安全组必须允许端口 443 上来自 VPC 的私有子网的传入连接。

  • VPC 终端节点当前不支持跨区域请求。确保在计划向 Amazon ECR 发出 API 调用的同一区域中创建 VPC 终端节点。

  • VPC 终端节点仅通过 Amazon Route 53 支持 Amazon 提供的 DNS。如果您希望使用自己的 DNS,可以使用条件 DNS 转发。有关更多信息,请参阅 。DHCP 选项集中的Amazon VPC User Guide.

  • 如果您的容器具有与 Amazon S3 的现有连接,则在添加 Amazon S3 网关终端节点时,其连接可能会短暂中断。如果要避免此中断,请创建一个使用 Amazon S3 网关终端节点的新 VPC,然后将 Amazon ECS 集群及其容器迁移到该新 VPC。

Windows 映像的注意事项

基于 Windows 操作系统的映像包括受许可证限制的对象,无法分发。默认情况下,当您将 Windows 映像推送到 Amazon ECR 存储库时,包含这些对象的图层不会被推送,因为它们被视为外部层. 当工件由微软提供时,将从 Microsoft Azure 基础结构中检索外部图层。因此,要使容器能够从 Azure 中提取这些外部图层,除了创建 VPC 终端节点之外,还需要执行其他步骤。

当将 Windows 映像推送到 Amazon ECR 时,可以使用--allow-nondistributable-artifacts标志。启用后,此标志会将许可图层推送到 Amazon ECR,从而使这些映像可以通过 VPC 终端节点从 Amazon ECR 提取,而无需额外访问 Azure。

重要

使用--allow-nondistributable-artifacts标志不排除遵守 Windows 容器基础映像许可证条款的义务;您不能发布 Windows 内容以供公共或第三方重新分发。允许在您自己的环境中使用。

要在 Docker 安装中启用此标志,您必须修改 Docker 守护进程配置文件,根据您的 Docker 安装,该配置文件通常可以在Docker 引擎部分或通过编辑C:\ProgramData\docker\config\daemon.json文件直接。

下面是所需配置的示例。将值替换为您将图像推送到的存储库 URI。

{ "allow-nondistributable-artifacts": [ "111122223333.dkr.ecr.us-west-2.amazonaws.com" ] }

修改 Docker 守护进程配置文件后,您必须在尝试推送映像之前重新启动 Docker 守护进程。通过验证基层是否推送到您的存储库,确认推送工作。

注意

Windows 映像的基础图层很大。图层大小将导致延长推送时间,并在 Amazon ECR 中增加这些图像的存储成本。出于这些原因,我们建议仅在严格要求此选项以减少构建时间和持续存储成本时使用此选项。例如,mcr.microsoft.com/windows/servercore在亚马逊 ECR 中压缩时,图像的大小约为 1.7 GiB。

为 Amazon ECR 创建 VPC 终端节点

要为 Amazon ECR 服务创建 VPC 终端节点,请使用创建接口终端节点过程Amazon VPC User Guide.

使用 EC2 启动类型的 Amazon ECS 任务需要 Amazon ECR 终端节点和 Amazon S3 网关终端节点。

使用 Fargate 启动类型和平台版本 1.3.0 或更早版本的 Amazon ECS 任务只需要com.amazonaws.区域.ecr.dkrAmazon ECR VPC 终端节点和 Amazon S3 网关终端节点。

使用 Fargate 启动类型和平台版本 1.4.0 或更高版本的 Amazon ECS 任务需要com.amazonaws.区域.ecr.dkrcom.amazonaws.区域.ecr.apiAmazon ECR VPC 终端节点和 Amazon S3 网关终端节点。

注意

创建终端节点的顺序无关紧要。

com.amazonaws.区域.ecr.dkr

此终端节点用于 Docker Registry API。诸如 pushpull 这样的 Docker 客户端命令使用此终端节点。

创建 com.amazonaws.region.ecr.dkr 终端节点时,必须启用私有 DNS 主机名。为此,请确保在创建 VPC 终端节点时,在 VPC 控制台中选择 Enable Private DNS Name (启用私有 DNS 名称) 选项。

com.amazonaws.区域.ecr.api
注意

指定的区域表示区域标识符Amazon亚马逊 ECR 支持的地区,例如us-east-2,请指定美国东部(俄亥俄)区域。

此终端节点用于对 Amazon ECR API 执行的调用。诸如 DescribeImages 和 CreateRepositories 这样的 API 操作会转至此终端节点。

创建 com.amazonaws.region.ecr.api 终端节点后,您可以选择启用私有 DNS 主机名。在创建 VPC 终端节点时,通过在 VPC 控制台中选择 Enable Private DNS Name (启用私有 DNS 名称),可启用此设置。如果您为 VPC 终端节点启用私有 DNS 主机名,请将开发工具包或 Amazon CLI 更新到最新版本,以便在使用开发工具包或 Amazon CLI 时无需指定终端节点 URL。

如果您启用私有 DNS 主机名并使用 2019 年 1 月 24 日版之前发布的开发工具包或 Amazon CLI 版本,则必须使用 --endpoint-url 参数指定接口终端节点。以下示例显示了终端节点 URL 的格式。

aws ecr create-repository --repository-name name --endpoint-url https://api.ecr.region.amazonaws.com

如果您不为 VPC 终端节点启用私有 DNS 主机名,则必须使用 --endpoint-url 参数并指定接口终端节点的 VPC 终端节点 ID。以下示例显示了终端节点 URL 的格式。

aws ecr create-repository --repository-name name --endpoint-url https://VPC_endpoint_ID.api.ecr.region.vpce.amazonaws.com

创建 Amazon S3 网关终端节点

对于从 Amazon ECR 拉取私有映像的 Amazon ECR 任务,您必须为 Amazon S3 创建网关终端节点。网关终端节点是必需的,因为 Amazon ECR 使用 Amazon S3 存储您的映像层。当容器从 Amazon ECR 下载映像时,它们必须访问 Amazon ECR 以获取映像清单,然后才能访问 Amazon S3 才能下载实际映像层。以下是 Amazon S3 存储桶的 Amazon 资源名称 (ARN):包含每个 Docker 映像的层。

arn:aws:s3:::prod-region-starport-layer-bucket/*

使用创建网关终端节点过程Amazon VPC User Guide为 Amazon ECR 创建以下 Amazon S3 网关终端节点。在创建终端节点时,请务必为您的 VPC 选择路由表。

com.amazonaws.区域.s3

Amazon S3 网关终端节点使用 IAM 策略文档来限制对服务的访问。这些区域有:完全访问权限策略,因为您在任务 IAM 角色或其他 IAM 用户策略中设置的任何限制仍然适用于此策略。如果要将 Amazon S3 存储桶访问权限制为使用 Amazon ECR 所需的最低权限,请参阅Amazon ECR 的最低 Amazon S3 存储桶权限.

Amazon ECR 的最低 Amazon S3 存储桶权限

Amazon S3 网关终端节点使用 IAM 策略文档来限制对服务的访问。要仅允许 Amazon ECR 的最低 Amazon S3 存储桶权限,请在为终端节点创建 IAM 策略文档时,限制对 Amazon ECR 使用的 Amazon S3 存储桶的访问。

下表列出 Amazon ECR 所需的 Amazon S3 存储桶策略权限。

许可 说明
arn:aws:s3:::prod-region-starport-layer-bucket/* 提供对包含每个 Docker 映像层的 Amazon S3 存储桶的访问权限。表示区域标识符Amazon亚马逊 ECR 支持的地区,例如us-east-2,请指定美国东部(俄亥俄)区域。

Example

以下示例说明如何提供对 Amazon ECR 操作所需的 Amazon S3 存储桶的访问权限。

{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::prod-region-starport-layer-bucket/*"] } ] }

创建 CloudWatch Logs 终端节点

使用 Fargate 启动类型的 Amazon 云服务器任务,这些任务使用没有互联网网关的 VPC,同时使用awslogs日志驱动程序将日志信息发送到 CloudWatch Logs 需要您创建com.amazonaws.区域.log接口 VPC 终 CloudWatch Logs。有关更多信息,请参阅 。将 CloudWatch 日志与接口 VPC 终端节点一起使用中的Amazon CloudWatch Logs 用户指南.

为 Amazon ECR VPC 终端节点创建终端节点策略

VPC 终端节点策略是一种 IAM 资源策略,您在创建或修改终端节点时可将它附加到终端节点。如果您在创建终端节点时未附加策略,Amazon 会为您附加一个默认策略,该策略允许对服务的完全访问。终端节点策略不会覆盖或替换 IAM 用户策略或服务特定的策略。这是一个单独的策略,用于控制从终端节点中对指定服务进行的访问。终端节点策略必须采用 JSON 格式编写。有关更多信息,请参阅 Amazon VPC 用户指南中的使用 VPC 终端节点控制对服务的访问

我们建议您创建一个 IAM 资源策略,并将该策略附加到两个 Amazon ECR VPC 终端节点。

下面是用于 Amazon ECR 的终端节点策略示例。此策略允许特定的 IAM 角色从 Amazon ECR 中拉取映像。

{ "Statement": [{ "Sid": "AllowPull", "Principal": { "AWS": "arn:aws:iam::1234567890:role/role_name" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Effect": "Allow", "Resource": "*" }] }

下面的终端节点策略示例阻止删除指定的存储库。

{ "Statement": [{ "Sid": "AllowAll", "Principal": "*", "Action": "*", "Effect": "Allow", "Resource": "*" }, { "Sid": "PreventDelete", "Principal": "*", "Action": "ecr:DeleteRepository", "Effect": "Deny", "Resource": "arn:aws:ecr:region:1234567890:repository/repository_name" } ] }

下面的终端节点策略示例将前面的两个示例组合到一个策略中。

{ "Statement": [{ "Sid": "AllowAll", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" }, { "Sid": "PreventDelete", "Effect": "Deny", "Principal": "*", "Action": "ecr:DeleteRepository", "Resource": "arn:aws:ecr:region:1234567890:repository/repository_name" }, { "Sid": "AllowPull", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1234567890:role/role_name" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": "*" } ] }

修改 Amazon ECR 的 VPC 终端节点策略

  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择终端节点

  3. 如果您尚未为 Amazon ECR 创建 VPC 终端节点,请参阅为 Amazon ECR 创建 VPC 终端节点.

  4. 选择要将策略添加到的 Amazon ECR VPC 终端节点,然后选择策略选项卡中的下半部分。

  5. 选择编辑策略并对策略进行更改。

  6. 选择保存以保存策略。