

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

# 让 SageMaker AI 托管的终端节点访问您的 Amazon VPC 中的资源
<a name="host-vpc"></a>

## 配置模型以进行 Amazon VPC 访问
<a name="host-vpc-configure"></a>

要在您的私有 VPC 中指定子网和安全组，请使用 [https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateModel.html)API 的`VpcConfig`请求参数，或者在 SageMaker AI 控制台中创建模型时提供此信息。 SageMaker AI 使用这些信息来创建网络接口并将其连接到您的模型容器。网络接口在未连接到互联网的 VPC 中为您的模型容器提供网络连接。它们还允许您的模型连接到私有 VPC 中的资源。

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

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

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

## 为 SageMaker AI 托管配置您的私有 VPC
<a name="host-vpc-vpc"></a>

为您的 SageMaker AI 模型配置私有 VPC 时，请遵循以下指南。有关设置 VPC 的信息，请参阅 *Amazon VPC 用户指南*中的[使用 VPCs 和子网](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/working-with-vpcs.html)。

**Topics**
+ [确保子网拥有足够的 IP 地址](#host-vpc-ip)
+ [创建 Amazon S3 VPC 端点](#host-vpc-s3)
+ [使用自定义端点策略限制访问 Amazon S3](#host-vpc-policy)
+ [将端点对 VPC 中运行的容器的访问权限添加到自定义 IAM 策略](#host-vpc-endpoints)
+ [配置路由表](#host-vpc-route-table)
+ [连接到 VPC 之外的资源](#model-vpc-nat)

### 确保子网拥有足够的 IP 地址
<a name="host-vpc-ip"></a>

不使用 Elastic Fabric Adapter (EFA) 的训练实例应至少有 2 个私有 IP 地址。使用 EFA 的训练实例应至少有 5 个私有 IP 地址。有关更多信息，请参阅《Amazon EC2 用户指南》中的[多个 IP 地址](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/MultipleIP.html)。

### 创建 Amazon S3 VPC 端点
<a name="host-vpc-s3"></a>

如果您将 VPC 配置为使模型容器不具有互联网访问权限，则这些容器无法连接到包含数据的 Amazon S3 存储桶，除非您创建一个允许访问的 VPC 端点。通过创建 VPC 终端节点，您允许模型容器访问用于存储数据和模型构件的存储桶。我们还建议您创建自定义策略，只允许来自私有 VPC 的请求访问您的 S3 存储桶。有关更多信息，请参阅[用于 Amazon S3的端点](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpc-endpoints-s3.html)。

**要创建 Amazon S3 VPC 端点，请执行以下操作：**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Endpoints (终端节点)**，然后选择 **Create Endpoint (创建终端节点)**。

1. 对于**服务名称**，请选择 **com.amazonaws。 *region*.s3**，其中*region*是您的 VPC 所在 Amazon 区域的名称。

1. 对于 **VPC**，请选择要用于该终端节点的 VPC。

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

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

### 使用自定义端点策略限制访问 Amazon S3
<a name="host-vpc-policy"></a>

默认端点策略允许您的 VPC 中的任何用户或服务完全访问 Amazon Simple Storage Service (Amazon S3)。要进一步限制访问 Amazon S3，请创建一个自定义端点策略。有关更多信息，请参阅[对 Amazon S3 使用端点策略](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-policies-s3)。

您也可以使用存储桶策略将 S3 存储桶访问限制为仅来自您的 Amazon VPC 的流量。有关信息，请参阅[使用 Amazon S3 存储桶策略](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-s3-bucket-policies)。

#### 使用自定义终端节点策略限制在模型容器上安装包
<a name="host-vpc-policy-repos"></a>

默认终端节点策略允许用户在模型容器中安装来自 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 策略
<a name="host-vpc-endpoints"></a>

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

------
#### [ JSON ]

****  

```
{
    "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` 托管策略的更多信息，请参阅 [Amazon 托管策略： AmazonSageMakerFullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSageMakerFullAccess)。

### 配置路由表
<a name="host-vpc-route-table"></a>

使用终端节点路由表的默认 DNS 设置，以便标准的 Amazon S3 URLs （例如`http://s3-aws-region.amazonaws.com/amzn-s3-demo-bucket`）可以解析。如果您不使用默认 DNS 设置，请确保通过配置终端节点路由表来解析模型中用于指定数据位置的。 URLs 有关 VPC 端点路由表的信息，请参阅《Amazon VPC 用户指南》**中的[网关端点路由](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpce-gateway.html#vpc-endpoints-routing)。

### 连接到 VPC 之外的资源
<a name="model-vpc-nat"></a>

如果您将 VPC 配置为不具有 Internet 访问权限，则使用该 VPC 的模型无权访问 VPC 之外的资源。如果您的模型需要访问您的 VPC 外部的资源，请使用以下选项之一提供访问权限：
+ 如果您的模型需要访问支持接口 VPC 终端节点的 Amazon 服务，请创建一个终端节点来连接到该服务。有关支持接口端点的服务的列表，请参阅《Amazon VPC 用户指南》**中的 [VPC 端点](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpc-endpoints.html)。有关创建接口 VPC 终端节点的信息，请参阅 *Amazon VPC 用户指南中的接口 VPC* [终端节点 (Amazon PrivateLink)](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpce-interface.html)。
+ 如果您的模型需要访问不支持接口 VPC 终端节点的 Amazon 服务或外部的资源 Amazon，请创建 NAT 网关并将您的安全组配置为允许出站连接。有关为 VPC 设置 NAT 网关的信息，请参阅 [Amazon Virtual Private Cloud 用户指南](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Scenario2.html)中的*场景 2：带有公有子网和私有子网 (NAT) 的 VPC*。