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

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

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

您可以将 Amazon ECR 配置为使用接口 VPC 终端节点以改善 VPC 的安全状况。VPC端点由 AWS PrivatElink,可帮助您进行私人访问的技术 Amazon ECR API通过专用IP地址。 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 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 可以通过向任务执行添加条件密钥来限制访问其任务使用的特定VPC的访问以及服务使用的VPC端点 IAM 任务角色。有关详细信息,请参阅 针对接口端点上拉AmazonECR图像的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 转发。有关详细信息,请参阅 DHCP选项集Amazon VPC 用户指南.

  • 如果您的容器已经有现有的连接 Amazon S3,在您添加 Amazon S3 网关端点。如果您想避免这种中断,请创建一个使用 Amazon S3 网关端点,然后迁移您的 Amazon ECS 集群及其容器进入新的VPC。

Windows图像的注意事项

基于Windows操作系统的图像包括被分配的许可证限制的伪影。默认情况下,当您将Windows图像推送到 Amazon ECR 存储库,包括这些伪影的层不会被推送 外层. Microsoft提供伪影时,从MicrosoftAzure基础架构检索异物。因此,为了使容器能够从Azure上拉出这些异物,需要在创建VPC端点之外来执行其他步骤。

在将Windows图像推至 Amazon ECR 使用 --allow-nondistributable-artifacts Docker守护程序中的标志。启用后,此标志将会将许可层推送到 Amazon ECR 这些图像可以从 Amazon ECR 通过VPC端点,无需额外访问Azure。

重要

使用 --allow-nondistributable-artifacts 标志不会排除您遵守Windows容器基础图像许可证的条款;您不能发布Windows内容为公共或第三方再分发。允许在您自己的环境中使用此功能。

要启用docker安装的此标志,必须修改dockerdaemon配置文件,这取决于靠泊装置安装,通常可以在“设置”或“首选项”菜单下的“设置”或“首选项”菜单中配置 Docker引擎 或通过编辑 C:\ProgramData\docker\config\daemon.json 直接文件。

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

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

修改DockerDaemon配置文件后,必须先重新启动docker守护程序,然后才能尝试推送图像。通过验证基础层是否被推送到存储库,确认推送工作。

注意

Windows图像的基本层是大的。层大小将导致推送和额外存储成本的更长时间 Amazon ECR 对于这些图像。出于这些原因,我们建议只在需要减少构建时间和持续存储成本时使用此选项。例如, mcr.microsoft.com/windows/servercore 图像大小约为1.7GiB,压缩时大小 Amazon ECR.

为 创建 VPC 终端节点Amazon ECR

要为 Amazon ECR 服务,使用 创建接口端点 程序中的 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 Registry API。Docker客户端命令,例如 pushpull 使用此端点。

当您创建 COM.AmazonAWS。region.ECR.DKR 端点,您必须启用专用DNS主机名。为此,请确保 启用专用DNS名称 创建VPC端点时,VPC控制台中选择选项。

com.amazonaws.region.ECR.API
注意

指定 region 代表区域标识符 AWS 区域支持者 Amazon ECR,例如 us-east-2 对于 美国东部(俄亥俄)区域.

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

COM.AmazonAWS。region.ECR.API 端点已创建,您可以选择启用专用DNS主机名。通过选择 启用专用DNS名称 在VPC控制台中创建VPC端点。如果启用vpc端点的专用DNS主机名,请更新您的SDK或 AWS CLI 在最新版本中,使用SDK或 AWS CLI 不必要。

如果启用专用DNS主机名,并且正在使用SDK或 AWS CLI 在2019年1月24日之前发布的版本,您必须使用 --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

TheThethe Amazon S3 GatewayEndpoint使用 IAM 策略文件以限制对服务的访问。TheThethe 全面访问 政策可以使用,因为您已经在任务中进行了任何限制 IAM 角色或其他 IAM 用户策略仍然适用于本政策的顶部。如果您想限制 Amazon S3 存储桶访问最低要求的使用权限 Amazon ECR,参见 的最低 Amazon S3 存储桶权限Amazon ECR.

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

TheThethe Amazon S3 GatewayEndpoint使用 IAM 策略文件以限制对服务的访问。仅允许最小值 Amazon S3 存储区权限 Amazon ECR,限制访问 Amazon S3 桶 Amazon ECR 当您创建 IAM 端点的策略文档。

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

许可 Description
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 启动类型,使用VPC而不是互联网网关也使用 awslogs 日志驱动程序将日志信息发送到 CloudWatch Logs 要求您创建 COM.AmazonAWS。region.日志 接口VPC端点 CloudWatch Logs. 有关详细信息,请参阅 创建网关端点Amazon CloudWatch Logs User Guide.

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

VPC 终端节点策略是一种 IAM 资源策略,该策略在您创建或修改终端节点时可附加到该终端节点。如果您在创建终端节点时未附加策略,AWS 会为您附加一个默认策略,该策略允许对服务的完全访问。终端节点策略不会覆盖或替换 IAM 用户策略或服务特定的策略。这是一个单独的策略,用于控制从终端节点中对指定服务进行的访问。终端节点策略必须采用 JSON 格式编写。有关详细信息,请参阅 控制对VPC端点服务的访问Amazon 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端点,然后选择 政策 屏幕下半部分。

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

  6. 选择 保存 保存策略。