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

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

亚马逊ECR接口VPC终端节点 (Amazon PrivateLink)

您可以VPC通过将 Amazon 配置为使用接口VPC终端节点ECR来改善您的安全状况。VPC终端节点由一项技术提供支持 Amazon PrivateLink,该技术使您能够ECRAPIs通过私有 IP 地址私密访问 Amazon。 Amazon PrivateLink 将您VPC和亚马逊之间的所有网络流量限制ECR到亚马逊网络。您不需要互联网网关、NAT设备或虚拟专用网关。

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

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

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

  • 要允许托管在亚马逊EC2实例上的亚马逊ECS任务从亚马逊提取私有镜像ECR,请为亚马逊创建接口VPC终端节点ECS。有关更多信息,请参阅《亚马逊弹性容器服务开发者指南》中的接口VPC终端节点 (Amazon PrivateLink)

  • 托管在 Fargate 上且从 Amazon 提取容器映像的 Amazon ECS 任务ECR可以通过向任务的任务执行IAM角色添加条件密钥来限制访问VPC其任务使用的特定内容和服务使用的VPC终端节点。有关更多信息,请参阅《亚马逊弹性容器服务开发者指南》中的 Fargate 任务通过接口终端节点拉取亚马逊ECR图像的可选IAM权限

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

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

  • VPC终端节点目前不支持 Amazon ECR 公共存储库。考虑使用拉取缓存规则将公共镜像托管在与VPC终端节点位于同一区域的私有存储库中。有关更多信息,请参阅 将上游注册表与 Amazon ECR 私有注册表同步

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

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

  • 首次使用拉取缓存规则拉取图像时,如果您已将 Amazon ECR 配置为使用接口VPC终端节点,则需要在同VPC一个子网中创建一个带有网NAT关的公有子网,然后将所有从其私有子网到互联网的出站流量路由到网NAT关,才能使拉取生效。 Amazon PrivateLink 后续的镜像提取不需要此操作。有关更多信息,请参阅 Amazon Virtual Private Cloud 用户指南中的场景:从私有子网访问互联网

Windows 镜像注意事项

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

在将 Windows 映像推送到亚马逊时,可以使用 Docker 守护程序中的--allow-nondistributable-artifacts标志ECR来覆盖此行为。启用后,此标志会将许可层推送到亚马逊ECR,这样就可以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 镜像的基础层很庞大。图层大小将导致这些图片的推送时间更长,并会产生额外的亚马逊ECR存储成本。出于这些原因,我们建议仅在严格要求此选项以减少构建时间和持续存储成本时使用此选项。例如,在 Amazon 中压缩后,mcr.microsoft.com/windows/servercore图片的大小约为 1.7 GiB。ECR

为 Amazon 创建VPC终端节点 ECR

要为亚马逊ECR服务创建VPC终端节点,请使用亚马逊VPC用户指南中的创建接口终端节点程序。

托管在亚马逊EC2实例上的亚马逊ECS任务需要亚马逊ECR终端节点和 Amazon S3 网关终端节点。

使用平台版本1.4.0或更高版本在 Fargate 上托管的亚马逊ECS任务需要亚马逊ECRVPC终端节点和 Amazon S3 网关终端节点。

在 Fargate 上托管的使用平台版本1.3.0或更早版本的亚马逊ECS任务只需要使用 cn.com.amazonaw s.cn-northwest-1.ecr.dkr 亚马逊终端节点和亚马逊 S3 网关终端节点。ECR VPC

注意

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

cn.com.amazonaws.cn-northwest-1.ecr.dkr

此端点用于 Docker 注册表APIs。诸如 pushpull 这样的 Docker 客户端命令使用此终端节点。

创建此端点时,必须启用私有DNS主机名。为此,请确保在创建VPC终端节点时在 Amazon VPC 控制台中选择 “启用私有DNS名称” 选项。

cn.com.amazonaws.cn-northwest-1.ecr.api

此终端节点用于调用 Amazon ECR API。API诸如DescribeImagesCreateRepository转到此端点之类的操作。

创建此端点后,您可以选择启用私有DNS主机名。创建VPC终端节点时,在VPC控制台中选择启用私有DNS名称,即可启用此设置。如果您为VPC终端节点启用私有DNS主机名,请将您的SDK或更新 Amazon CLI 到最新版本,这样就无需URL在使用SDK或 Amazon CLI 时指定终端节点。

如果您启用私有DNS主机名并且使用的是 2019 年 1 月 24 日之前发布的SDK或 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 网关端点

要ECS执行从亚马逊提取私有映像的亚马逊任务ECR,您必须为 Amazon S3 创建网关终端节点。网关终端节点是必需的,因为亚马逊ECR使用 Amazon S3 来存储您的图像层。当您的容器从亚马逊下载图像时ECR,它们必须访问亚马逊ECR以获取图像清单,然后访问 Amazon S3 才能下载实际的图像层。以下是 Amazon S3 存储桶的亚马逊资源名称 (ARN),其中包含每个 Docker 镜像的图层。

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

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

com.amazonaws。region.s3

Amazon S3 网关终端节点使用IAM策略文档来限制对服务的访问。之所以可以使用 “完全访问权限” 策略,是因为您在任务IAM角色或其他IAM用户策略中设置的任何限制仍然适用于此策略。如果您想将 Amazon S3 存储桶的访问权限限制为使用亚马逊所需的最低权限ECR,请参阅亚马逊的最低亚马逊 S3 存储桶权限 ECR

亚马逊的最低亚马逊 S3 存储桶权限 ECR

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

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

权限 描述

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

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

提供对包含每个 Docker 镜像层的 Amazon S3 存储桶的访问权限。表示 Amazon ECR 支持的 Amazon 区域(例如us-east-2美国东部(俄亥俄州)地区的区域标识符。

示例

以下示例说明如何提供对亚马逊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 日志端点

使用 Fargate 启动类型的亚马逊ECS任务需要您创建 com.amazonaws,这些任务使用VPC不带互联网网关的,也使用awslogs CloudWatch 日志驱动程序向日志发送日志信息。region日志的.logs 接口VPC端点。 CloudWatch 有关更多信息,请参阅 Amazon Logs 用户指南中的将 CloudWatch CloudWatch 日志与接口VPC终端节点配合使用

为您的 Amazon 终端节点创建ECRVPC终端节点策略

VPC终端节点策略是您在创建或修改终端节点时附加到终端节点的IAM资源策略。如果您在创建终端节点时未附加策略, Amazon 则会为您附加允许完全访问服务的默认策略。端点策略不会覆盖或替换用户策略或服务特定的策略。这是一个单独的策略,用于控制从端点中对指定服务进行的访问。端点策略必须以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", "ecr:GetAuthorizationToken" ], "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", "ecr:GetAuthorizationToken" ], "Resource": "*" } ] }
修改 Amazon 的VPC终端节点政策 ECR
  1. 打开 Amazon VPC 控制台,网址为https://console.aws.amazon.com/vpc/

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

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

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

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

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

共享子网

您无法在与您共享的子网中创建、描述、修改或删除VPC终端节点。但是,您可以在与您共享的子网中使用VPC终端节点。