让 SageMaker AI 托管的终端节点访问您的 Amazon VPC 中的资源 - 亚马逊 SageMaker AI

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

让 SageMaker AI 托管的终端节点访问您的 Amazon VPC 中的资源

配置模型以进行 Amazon VPC 访问

要在您的私有 VPC 中指定子网和安全组,请使用 CreateModelAPI 的VpcConfig请求参数,或者在 SageMaker AI 控制台中创建模型时提供此信息。 SageMaker AI 使用这些信息来创建网络接口并将其连接到您的模型容器。网络接口在未连接到互联网的 VPC 中为您的模型容器提供网络连接。它们还允许您的模型连接到私有 VPC 中的资源。

注意

您必须在私有 VPC 的不同可用区中至少创建两个子网 (即使只有一个托管实例)。

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

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

为 SageMaker AI 托管配置您的私有 VPC

为您的 SageMaker AI 模型配置私有 VPC 时,请遵循以下指南。有关设置 VPC 的信息,请参阅 Amazon VPC 用户指南中的使用 VPCs 和子网

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

不使用 Elastic Fabric Adapter (EFA) 的训练实例应至少有 2 个私有 IP 地址。使用 EFA 的训练实例应至少有 5 个私有 IP 地址。有关更多信息,请参阅 Amazon EC2 用户指南中的多个 IP 地址

创建 Amazon S3 VPC 端点

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

要创建 Amazon S3 VPC 端点,请执行以下操作:
  1. 打开位于 https://console.aws.amazon.com/vpc/ 的 Amazon VPC 控制台。

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

  3. 对于服务名称,请选择 com.amazonaws。 region.s3,其中region是您的 VPC 所在 AWS 区域的名称。

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

  5. 对于配置路由表,请选择端点要使用的路由表。VPC 服务自动将一个路由添加到您选择的每个路由表中,它将 Amazon S3 流量指向新的端点。

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

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

默认端点策略允许您的 VPC 中的任何用户或服务完全访问 Amazon Simple Storage Service (Amazon S3)。要进一步限制访问 Amazon 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/*" ] } ] }

将端点对 VPC 中运行的容器的访问权限添加到自定义 IAM 策略

SageMakerFullAccess 托管策略包含相应的权限,您需要具有这些权限才能使用为通过端点访问 Amazon VPC 而配置的模型。这些权限允许 SageMaker AI 创建弹性网络接口并将其附加到 VPC 中运行的模型容器上。如果您使用自己的 IAM 策略,则必须将以下权限添加到该策略,以使用为进行 VPC 访问配置的模型。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVpcEndpoints", "ec2:DescribeDhcpOptions", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:CreateNetworkInterface" ], "Resource": "*" } ] }

有关 SageMakerFullAccess 托管策略的更多信息,请参阅 AWS 托管策略: AmazonSageMakerFullAccess

配置路由表

使用终端节点路由表的默认 DNS 设置,以便标准的 Amazon S3 URLs (例如http://s3-aws-region.amazonaws.com/amzn-s3-demo-bucket)可以解析。如果您不使用默认 DNS 设置,请确保通过配置终端节点路由表来解析模型中用于指定数据位置的。 URLs 有关 VPC 端点路由表的信息,请参阅《Amazon VPC 用户指南》中的网关端点路由

连接到 VPC 之外的资源

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

  • 如果您的模型需要访问支持接口 VPC 终端节点的 AWS 服务,请创建一个终端节点来连接到该服务。有关支持接口端点的服务的列表,请参阅《Amazon VPC 用户指南》中的 VPC 端点。有关创建接口 VPC 终端节点的信息,请参阅 Amazon VPC 用户指南中的接口 VPC 终端节点 (AWS PrivateLink)

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