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

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

Amazon ECR 接口 VPC 终端节点 (AWS PrivateLink)

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

有关 AWS PrivateLink 和 VPC 终端节点的更多信息,请参阅 中的 VPC Amazon VPC 用户指南 终端节点。

关于 Amazon ECR VPC 终端节点的注意事项

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

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

    重要

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

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

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

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

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

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

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

  • VPC 终端节点仅通过 支持 Amazon 提供的 DNS。Amazon Route 53. 如果您希望使用自己的 DNS,可以使用条件 DNS 转发。有关更多信息,请参阅https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html中的 Amazon VPC 用户指南DHCP 选项集.

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

Windows 映像的注意事项

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

在 Docker 守护程序中使用 Amazon ECR --allow-nondistributable-artifacts 标志将 Windows 映像推送到 时,可以覆盖此行为。启用后,此标记将推送许可层Amazon ECR,允许Amazon ECR通过 VPC 终端节点从 中拉取这些映像,而无需对 Azure 进行额外访问。

重要

使用 --allow-nondistributable-artifacts 标志并不妨碍您遵守 Windows 容器基本映像许可证的条款;您无法发布 Windows 内容以进行公开或第三方重新分配。您自己的环境中允许使用 。

要启用此标志用于 Docker 安装,您必须修改 Docker 守护程序配置文件,该文件通常根据 Docker 安装在 Docker Engine 部分下的设置或首选项菜单中进行配置,或者通过直接编辑 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,图像GiB在压缩时的大小大约为 Amazon ECR1.7。

为 创建 VPC 终端节点Amazon ECR

要为服务创建 VPC 终端节点Amazon ECR,请使用 中的https://docs.amazonaws.cn/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint创建接口终端节点过程Amazon VPC 用户指南

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

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

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

注意

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

com.amazonaws.region.ecr.dkr

此终端节点用于 Docker 注册表 APIs。 Docker 客户端命令(如 pushpull )使用此终端节点。

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

com.amazonaws.region.ecr.api
注意

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

此终端节点用于对 Amazon ECR API 执行的调用。API 操作(如 DescribeImages 和 CreateRepositories)转到此终端节点。

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

如果您启用私有 DNS 主机名并使用 2019 年 1 月 24 日版之前发布的开发工具包或 AWS 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 ECS 拉取私有映像的 Amazon ECR 任务,您必须为 Amazon S3. 创建网关终端节点。必须创建网关终端节点,因为 Amazon ECR 使用 Amazon S3 来存储您的映像层。当容器从 Amazon ECR 下载映像时,它们必须访问 Amazon ECR 才能获取映像清单,然后 Amazon S3 才能下载实际映像层。以下是包含每个 Docker 映像层的 Amazon S3 存储桶的 Amazon 资源名称 (ARN):

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

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

com.amazonaws.regionS3.

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

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

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

下表描述了 Amazon S3 所需的 Amazon ECR. 存储桶策略权限。

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

Example

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

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

创建 CloudWatch Logs 终端节点

Amazon ECS 使用 Fargate 启动类型的 任务,这些任务在没有 Internet 网关的情况下使用 VPC,还使用 awslogs 日志驱动程序发送日志信息以CloudWatch Logs要求您创建 com.amazonaws。region的 .logs 接口 VPC 终端节点CloudWatch Logs。有关更多信息,请参阅 中的https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html创建网关终端节点Amazon CloudWatch Logs User Guide

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

VPC 终端节点策略是一种 IAM 资源策略,该策略在您创建或修改终端节点时可附加到该终端节点。如果您在创建终端节点时未附加策略,AWS 会为您附加一个默认策略,该策略允许对服务的完全访问。终端节点策略不会覆盖或替换 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": "*" } ] }

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

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

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

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

  4. 选择要向其中添加策略的 Amazon ECR VPC 终端节点,然后在屏幕下半部分中选择 Policy 选项卡。

  5. 选择 Edit Policy (编辑策略),然后对策略进行更改。

  6. 选择 Save (保存) 以保存策略。