为SageMaker训练任务提供访问您的亚马逊 VPC 中的资源的权限 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

为SageMaker训练任务提供访问您的亚马逊 VPC 中的资源的权限

注意

对于训练作业,您只能为子网配置默认租赁 VPC,其中您的实例在共享硬件上运行。有关 VPC 租赁属性的更多信息,请参阅专用实例

为亚马逊 VPC 访问配置训练作业

要在私有 VPC 中指定子网和安全组,请使用 VpcConfig API 的 CreateTrainingJob 请求参数,或者当在 SageMaker 控制台中创建训练任务时提供此信息。SageMaker使用此信息创建网络接口并将其连接到您的训练容器。网络接口在您的 VPC 内为您的训练容器提供未连接到互联网的网络连接。它们还可将您的训练作业连接到私有 VPC 中的资源。

以下是您在调用 CreateTrainingJob 时将包含的 VpcConfig 参数的示例:

VpcConfig: { "Subnets": [ "subnet-0123456789abcdef0", "subnet-0123456789abcdef1", "subnet-0123456789abcdef2" ], "SecurityGroupIds": [ "sg-0123456789abcdef0" ] }

配置私有 VPC 以进行 SageMaker 训练

为 SageMaker 训练作业配置私有 VPC 时,请使用以下准则。有关设置 VPC 的信息,请参阅 Amazon VPC 用户指南中的使用 VPC 和子网

确保子网拥有足够的 IP 地址

不使用弹性结构适配器 (EFA) 的训练实例应至少有 2 个私有 IP 地址。使用 EFA 的训练实例应至少有 5 个私有 IP 地址。有关更多信息,请参阅 Amazon EC2 用户指南中的多个 IP 地址

对于训练作业中的每个实例,您的 VPC 子网应至少拥有两个私有 IP 地址。有关更多信息,请参阅《亚马逊 VPC 用户指南》中的 VPC 和 IPv4 子网大小

创建亚马逊 S3 VPC 终端节点

如果您将 VPC 配置为使训练容器无法访问互联网,则除非您创建允许访问的 VPC 终端节点,否则它们无法连接到包含您的训练数据的 Amazon S3 存储桶。通过创建 VPC 终端节点,您允许训练容器访问用于存储数据和模型构件的存储桶。我们还建议您创建自定义策略,只允许来自私有 VPC 的请求访问您的 S3 存储桶。有关更多信息,请参阅用于 Simple Storage Service(Amazon S3)的端点

要创建 S3 VPC 终端节点,请执行以下操作:
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Endpoints (终端节点),然后选择 Create Endpoint (创建终端节点)

  3. 要查看服务名称,请搜索 com.amazonaws。 region .s3,其中区域是您的 VPC 所在区域的名称。

  4. 选择网类型。

  5. 对于 VPC,请选择要用于该终端节点的 VPC。

  6. 对于 Configure route tables,选择终端节点要使用的路由表。VPC 服务自动将一个路由添加到您选择的每个路由表中,它将任何 S3 流量传送到新的终端节点。

  7. 对于 Policy (策略),请选择 Full Access (完全访问) 以允许 VPC 中的任何用户或服务完全访问 S3 服务。选择 Custom (自定义) 以进一步限制访问。有关信息,请参阅 使用自定义终端节点策略限制 S3 访问

使用自定义终端节点策略限制 S3 访问

默认终端节点策略允许您的 VPC 中的任何用户或服务完全访问 S3。要进一步限制 S3 访问,请创建一个自定义终端节点策略。有关更多信息,请参阅使用适用于 Amazon S3 的终端节点策略。您还可以使用存储桶策略将对 S3 存储桶的访问权限限制为仅限来自您的 Amazon VPC 的流量。有关信息,请参阅使用 Amazon S3 存储桶策略

限制在训练容器上安装包

默认终端节点策略允许用户在训练容器中安装来自 Amazon Linux 和 Amazon Linux 2 存储库的包。如果您不希望用户安装来自该存储库的包,则创建一个自定义终端节点策略,明确拒绝访问 Amazon Linux 和 Amazon Linux 2 存储库。以下是拒绝访问这些存储库的策略示例:

{ "Statement": [ { "Sid": "AmazonLinuxAMIRepositoryAccess", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Deny", "Resource": [ "arn:aws:s3:::packages.*.amazonaws.com/*", "arn:aws:s3:::repo.*.amazonaws.com/*" ] } ] } { "Statement": [ { "Sid": "AmazonLinux2AMIRepositoryAccess", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Deny", "Resource": [ "arn:aws:s3:::amazonlinux.*.amazonaws.com/*" ] } ] }

配置路由表

为您的终端节点路由表使用默认 DNS 设置,以便标准 Amazon S3 网址(例如http://s3-aws-region.amazonaws.com/MyBucket)解析。如果您不使用默认 DNS 设置,则确保通过配置终端节点路由表来解析用于指定训练作业中数据位置的 URL。有关 VPC 终端节点路由表的信息,请参阅 Amazon VPC 用户指南中的网关终端节点路由。

配置 VPC 安全组

在分布式训练中,您必须允许同一训练作业中的不同容器之间进行通信。为此,请为您的安全组配置规则,以允许同一安全组的成员之间实现入站连接。对于启用 EFA 的实例,请确保入站和出站连接都允许来自同一个安全组的所有流量。有关信息,请参阅 Amazon 虚拟私有云用户指南中的安全组规则

连接到 VPC 之外的资源

如果您将 VPC 配置为不具有 Internet 访问权限,则使用该 VPC 的训练作业无权访问 VPC 之外的资源。如果您的训练作业需要访问您的 VPC 外部的资源,请使用以下选项之一提供访问权限:

  • 如果您的训练作业需要访问支持接口 VPC 终端节点的 Amazon 服务,请创建连接到该服务的终端节点。有关支持接口终端节点的服务列表,请参阅 Amazon 虚拟私有云用户指南中的 VPC 终端节点。有关创建接口 VPC 终端节点的信息,请参阅 Amazon 虚拟私有云用户指南中的接口 VPC 终端节点 (AmazonPrivateLink)

  • 如果您的训练作业需要访问不支持接口 VPC 终端节点的 Amazon 服务,或需要访问 Amazon 之外的资源,请创建一个 NAT 网关,并将安全组配置为允许出站连接。有关为 VPC 设置 NAT 网关的信息,请参阅 Amazon Virtual Private Cloud 用户指南中的场景 2:带有公有子网和私有子网 (NAT) 的 VPC