

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

# AWS IoT Core 与接口 VPC 终端节点一起使用
<a name="IoTCore-VPC"></a>

借助 AWS IoT Core，您可以使用[接口 VPC [终端节点在虚拟私有云 (VPC) 中创建物联网控制平面](https://docs.aws.amazon.com//iot/latest/developerguide/connect-to-iot.html#iot-service-endpoint-intro)[终端节点和物联网数据](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-devices.html)终端节点](https://docs.aws.amazon.com//vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。接口 VPC 终端节点由 AWS PrivateLink一种 AWS 技术提供支持，您可以使用该技术 AWS 通过私有 IP 地址访问在其上运行的服务。有关更多信息，请参阅 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com//AmazonVPC/latest/UserGuide/VPC_Introduction.html)。

要将远程网络（例如公司网络）上的现场设备连接到您的 Amazon VPC，请参阅 V [Network-to-Amazon PC 连接列表中列出的选项](https://docs.aws.amazon.com//whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)。

**Topics**
+ [为 AWS IoT Core 控制平面创建 VPC 终端节点](#Create-VPC-endpoints-CP)
+ [为 AWS IoT Core 数据平面创建 VPC 终端节点](#Create-VPC-endpoints)
+ [为 AWS IoT Core 凭证提供者创建 VPC 终端节点](#Create-VPC-endpoints-credential-provider)
+ [创建 Amazon VPC 接口端点](#Create-VPC-endpoints-core-create-vpc)
+ [配置私有托管区](#connect-iot-core-create-phz-lns)
+ [控制 AWS IoT Core 通过 VPC 终端节点的访问权限](#Control-VPC-access)
+ [限制](#VPC-limitations)
+ [使用扩展 VPC 终端节点 AWS IoT Core](#Scaling-VPC-endpoints)
+ [将自定义域用于 VPC 端点](#VPC-custom-domains)
+ [VPC 终端节点的可用性 AWS IoT Core](#VPC-availability)
+ [对接口 VPC 终端节点使用 AWS IoT Device Management 安全隧道](IoTCore-ST-VPC.md)

## 为 AWS IoT Core 控制平面创建 VPC 终端节点
<a name="Create-VPC-endpoints-CP"></a>

您可以为 AWS IoT Core 控制平面 API 创建 VPC 终端节点，将您的设备连接到 AWS IoT 服务和其他 AWS 服务。要开始使用 VPC 终端节点，请[创建一个接口 VPC 终端节点](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)并选择 AWS IoT Core 作为 AWS 服务。如果您使用的是 CLI，[describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html)请先致电确保您选择 AWS IoT Core 的是您的特定可用区 AWS 区域。例如，在 us-east-1 中，此命令将类似于：

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.api
```

请参阅以下详细说明，为 AWS IoT Core 控制平面[创建 Amazon VPC 接口终端节点](#Create-VPC-endpoints-core-create-vpc)。

## 为 AWS IoT Core 数据平面创建 VPC 终端节点
<a name="Create-VPC-endpoints"></a>

您可以为 AWS IoT Core 数据平面 API 创建 VPC 终端节点，将您的设备连接到 AWS IoT 服务和其他 AWS 服务。要开始使用 VPC 终端节点，请[创建一个接口 VPC 终端节点](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)并选择 AWS IoT Core 作为 AWS 服务。如果您使用的是 CLI，[describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html)请先致电确保您选择 AWS IoT Core 的是您的特定可用区 AWS 区域。例如，在 us-east-1 中，此命令将类似于：

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.data
```

**注意**  
用于自动创建 DNS 记录的 VPC 特征已被禁用。要连接到这些端点，您必须手动创建私有 DNS 记录。有关私有 VPC DNS 记录的更多信息，请参阅 [接口终端节点的私有 DNS](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#vpce-private-dns)。有关 AWS IoT Core VPC 限制的更多信息，请参阅[限制](#VPC-limitations)。

要将 MQTT 客户端连接到 VPC 端点接口，请执行以下操作：
+ 您必须在附加到 VPC 的私有托管区域中手动创建 DNS 记录。要开始使用，请参阅[创建私有托管区域](https://docs.aws.amazon.com//Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)。
+ 在您的私有托管区域中，为 VPC 端点的每个弹性网络接口 IP 创建别名记录。如果您有多个 VPC 终端节点 IPs 的多个网络接口，请为所有加权记录创建权重相等的加权 DNS 记录。按描述字段中的 VPC 终端节点 ID 筛选后，这些 IP 地址可从 [DescribeNetworkInterfaces](https://docs.aws.amazon.com//AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)API 调用中获得。

有关[创建 Amazon VPC 接口终端节点](#Create-VPC-endpoints-core-create-vpc)和为 AWS IoT Core 数据平面[配置私有托管区域](#connect-iot-core-create-phz-lns)，请参阅以下详细说明。

## 为 AWS IoT Core 凭证提供者创建 VPC 终端节点
<a name="Create-VPC-endpoints-credential-provider"></a>

您可以为 AWS IoT Core [凭证提供者](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html)创建 VPC 终端节点，以便使用基于客户端证书的身份验证连接设备并获取[AWS 签名版本](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_aws-signing.html) 4 AWS 格式的临时证书。要开始使用 AWS IoT Core 证书提供者的 VPC 终端节点，请运行 [create-vpc-endpoint](https://docs.aws.amazon.com//cli/latest/reference/ec2/create-vpc-endpoint.html)CLI 命令[创建接口 VPC 终端节点](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)，然后选择 AWS IoT Core 凭证提供者作为服务。 AWS 为确保您选择的可用区与您的特定区域相同 AWS 区域，请先运行该[describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html)命令。 AWS IoT Core 例如，在 us-east-1 中，此命令将类似于：

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.credentials
```

**注意**  
用于自动创建 DNS 记录的 VPC 特征已被禁用。要连接到这些端点，您必须手动创建私有 DNS 记录。有关私有 VPC DNS 记录的更多信息，请参阅 [接口终端节点的私有 DNS](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#vpce-private-dns)。有关 AWS IoT Core VPC 限制的更多信息，请参阅[限制](#VPC-limitations)。

要将 HTTP 客户端连接到 VPC 端点接口，请执行以下操作：
+ 您必须在附加到 VPC 的私有托管区域中手动创建 DNS 记录。要开始使用，请参阅[创建私有托管区域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)。
+ 在您的私有托管区域中，为 VPC 端点的每个弹性网络接口 IP 创建别名记录。如果您有多个 VPC 终端节点 IPs 的多个网络接口，请为所有加权记录创建权重相等的加权 DNS 记录。按描述字段中的 VPC 终端节点 ID 筛选后，这些 IP 地址可从 [DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)API 调用中获得。

有关[创建 Amazon VPC 接口终端节点](#Create-VPC-endpoints-core-create-vpc)和为 AWS IoT Core 凭证提供者[配置私有托管区域的信息](#connect-iot-core-create-phz-lns)，请参阅以下详细说明。

## 创建 Amazon VPC 接口端点
<a name="Create-VPC-endpoints-core-create-vpc"></a>

您可以创建接口 VPC 终端节点以连接到由提供支持的 AWS 服务 AWS PrivateLink。使用以下步骤创建连接到 AWS IoT Core 数据平面或 AWS IoT Core 凭据提供程序的接口 VPC 终端节点。有关更多信息，请参阅[使用接口 VPC 终端节点访问 AWS 服务](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html)。

**注意**  
为 AWS IoT Core 数据平面和 AWS IoT Core 证书提供者创建 Amazon VPC 接口终端节点的过程类似，但您必须对终端节点进行特定更改才能使连接正常运行。

 **通过 [VPC](https://console.aws.amazon.com/vpc/home#/endpoints) **端点**控制台创建接口 VPC 端点** 

1. 导航到 [VPC](https://console.aws.amazon.com/vpc/home#/endpoints) **端点**控制台，在左侧菜单的**虚拟私有云**下，选择**端点**，然后选择**创建端点**。

1. 在**创建端点**页面上，指定以下信息。
   + 为**服务类别**选择 **AWS 服务**。
   + 对于 **Service Name**（服务名称），通过输入关键字 `iot` 进行搜索。在显示的 `iot` 服务列表中，请选择端点。

     如果您为 AWS IoT Core 控制平面创建 VPC 终端节点，请为您的选择 AWS IoT Core 控制平面 API 终端节点 AWS 区域。终端节点的格式为 `com.amazonaws.region.iot.api`。

     如果您为 AWS IoT Core 数据平面创建 VPC 终端节点，请为您的区域选择 AWS IoT Core 数据平面 API 终端节点。终端节点的格式为 `com.amazonaws.region.iot.data`。

     如果您为 AWS IoT Core 凭证提供者创建 VPC 终端节点，请选择您所在地区的 AWS IoT Core 凭证提供商终端节点。终端节点的格式为 `com.amazonaws.region.iot.credentials`。

     如果您为联邦信息处理标准 (FIPS) 区域创建 VPC 终端节点，请为您选择 FIPS API 终端节点。 AWS 区域终端节点的格式为 `com.amazonaws.region.iot-fips.api`。这仅适用于控制平面。
**注意**  
中国地区 AWS IoT Core 数据平面的服务名称将`cn.com.amazonaws.region.iot.data`采用以下格式。中国地区 AWS IoT Core 控制平面的服务名称将`com.amazonaws.region.iot.api`采用以下格式。
   + 对于 **VPC** 和**子网**，选择要在其中创建终端节点的 VPC，以及要在其中创建终端节点网络的可用区 (AZs)。
   + 对于 **“启用 DNS 名称**”，请确保未**为 AWS IoT Core 数据平面和 AWS IoT Core 凭据提供程序选中 “为此端点启**用”。 AWS IoT Core 数据平面和 AWS IoT Core 凭据提供商都不支持私有 DNS 名称。

     对于 AWS IoT Core 控制平面，默认选中 “**启用 DNS 名称**”。这样可以确保向 AWS IoT Core 控制平面公共终端节点发出的任何请求都将通过 VPC 终端节点进行路由。启用此功能后，您无需配置私有托管区域。
   + 对于 **Security group**（安全组），选择要与端点网络接口关联的安全组。
   + 您可以选择添加或删除标签。标签是用于与端点关联的名称-值对。

1. 要创建 VPC 端点，请选择**创建端点**。

创建 AWS PrivateLink 终端节点后，在终端节点的**详细信息**选项卡中，您将看到 DNS 名称列表。您可以使用在本部分中创建的这些 DNS 名称中的一个来[配置私有托管区域](#connect-iot-core-create-phz-lns)。如果您使用的是 AWS IoT Core 控制平面，则无需配置私有托管区域。

## 配置私有托管区
<a name="connect-iot-core-create-phz-lns"></a>

**注意**  
如果您使用的是 AWS IoT Core 控制平面并选择了 “**启用 DNS 名称**”，则无需配置私有托管区域。如果将其禁用，则必须按照以下步骤配置私有托管区域。

您可以使用在上一部分中创建的这些 DNS 名称中的一个来配置私有托管区域。

 **对于 AWS IoT Core 数据平面** 

DNS 名称必须是您的域配置名称或 `IoT:Data-ATS` 端点。DNS 名称的示例，可以是：` xxx-ats.data.iot.region.amazonaws.com`。

 **对于 AWS IoT Core 凭证提供商** 

DNS 名称必须是您的 `iot:CredentialProvider` 端点。DNS 名称的示例，可以是：` xxxx.credentials.iot.region.amazonaws.com`。

 **用于 AWS IoT Core 控制平面** 

DNS 名称必须是您的 AWS IoT Core 控制平面终端节点。 AWS IoT Core 控制平面的 DNS 名称示例如下` xxxx.api.iot.region.amazonaws.com`。

**注意**  
为 AWS IoT Core 数据平面和 AWS IoT Core 凭据提供程序配置私有托管区域的过程类似，但是您必须对端点进行特定更改才能使连接正常运行。

### 创建私有托管区域
<a name="connect-iot-core-create-phz-lns-private-hosted-zone"></a>

 **使用 Route 53 控制台创建私有托管区域** 

1. 导航到 [Route 53](https://console.aws.amazon.com/route53/v2/hostedzones#/) **托管区域**控制台并选择 **Create hosted zone**（创建托管区域）。

1. 在 **Create hosted zone**（创建托管区域）页面上，指定以下信息。
   + 在**域名**中，输入您的 `iot:Data-ATS` 或 `iot:CredentialProvider` 端点的端点地址。以下 AWS CLI 命令显示如何通过公共网络获取端点：`aws iot describe-endpoint --endpoint-type iot:Data-ATS` 或 `aws iot describe-endpoint --endpoint-type iot:CredentialProvider`。
**注意**  
如果您使用的是自定义域，请参阅[将自定义域与 VPC 端点结合使用](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#VPC-custom-domains)。 AWS IoT Core 凭据提供者不支持自定义域名。
   + 对于 **Type**（类型），选择 **Private hosted zone**（私有托管区域）。
   + 或者，您可以添加或删除要与托管区域关联的标签。

1. 要创建您的私有托管区域，请选择 **Create hosted zone**（创建托管区域）。

有关更多信息，请参阅[创建私有托管区域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)。

### 创建记录
<a name="connect-iot-core-create-phz-lns-create-record"></a>

创建私有托管区域后，您可以创建一个记录，告诉 DNS 如何将流量路由到该域。

 **创建记录** 

1. 在显示的托管区域列表中，选择您之前创建的私有托管区域，然后选择 **Create record**（创建记录）。

1. 使用向导提供的方法创建记录。如果控制台为您提供了 **Quick create**（快速创建）的方法，选择 **Switch to wizard**（切换到向导）。

1. 在 **Routing policy**（路由策略）中选择 **Simple Routing**（简单路由），然后选择 **Next**（下一步）。

1. 在 **Configure records**（配置记录）下，选择 **Define simple record**（定义简单记录）。

1. 在 **Define simple record**（定义简单记录）页面:
   + 在**记录名称**中，输入 `iot:Data-ATS` 或 `iot:CredentialProvider` 端点。该名称必须与私有托管区名称相同。
   + 对于 **Record 类型**，如果您只想 IPv4支持，请将该值保留为`A - Routes traffic to an IPv4 address and some AWS resources`。如果您只需要 IPv6支持，请将该值保持为`AAAA - Routes traffic to an IPv6 address and some AWS resources`。如果您想要双栈支持（两者兼 IPv4 有 IPv6），请在托管区域中创建两条记录（`A`并在托管区域`AAAA`中使用相同的**记录名称**和 **Value/Rou** te 流量到）。
   + 对于 **Value/Route traffic to**（值/流量路由至），选择 **Alias to VPC endpoint**（向 VPC 添加别名）。然后选择您的 **Region**（区域），接着从显示的端点列表中选择您之前创建的端点，如 [创建 Amazon VPC 接口端点](#Create-VPC-endpoints-core-create-vpc) 中所述。

1. 选择 **Define simple record**（定义简单记录）以创建您的记录。

## 控制 AWS IoT Core 通过 VPC 终端节点的访问权限
<a name="Control-VPC-access"></a>

您可以使用 VPC [条件上下文密钥 AWS IoT Core](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)将设备访问限制为仅允许通过 VPC 终端节点。 AWS IoT Core 支持以下与 VPC 相关的上下文密钥：
+  [SourceVpc](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpc) 
+  [SourceVpce](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpce) 
+  [VPCSourceIp](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-vpcsourceip) 

**注意**  
AWS IoT Core 不支持 [VPC 终端节点的终端节点策略](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html#vpc-endpoint-policies)。

例如，以下策略授予 AWS IoT Core 使用与事物名称匹配的客户端 ID 进行连接的权限，以及向以事物名称为前缀的任何主题发布内容的权限，条件是设备连接到具有特定 VPC 终端节点 ID 的 VPC 终端节点。此策略将拒绝连接到您的公有物联网数据端点的尝试。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
            }
        }
            
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/*"
            ]
        }
    ]
}
```

## 限制
<a name="VPC-limitations"></a>

[AWS IoT Core 控制平面终端节点、AWS IoT Core 数据端](https://docs.aws.amazon.com//iot/latest/developerguide/connect-to-iot.html#iot-service-endpoint-intro)[点和[AWS IoT Core 凭证提供程序](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.htm)端点](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-devices.html#iot-connect-device-endpoints)目前支持 VPC 终端节点。使用 AWS IoT Core 控制平面时，只有[联邦信息处理标准 (FIPS) 终端节点](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-fips.html)支持 VPC 终端节点。

### 物联网控制平面 VPC 端点的局限性
<a name="VPC-limitations-iot-control"></a>

本节介绍物联网控制平面 VPC 端点的局限性。
+ VPC 端点将仅提供 ATS 证书。
+ 控制平面终端节点不支持自定义域。
+ 有关 FIPS 安全策略的信息，请参阅 [FIPS 安全](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/describe-ssl-policies.html#fips-security-policies)策略。

### IoT 数据 VPC 端点的限制
<a name="VPC-limitations-iot-data"></a>

本部分介绍物联网数据 VPC 端点的限制。
+ MQTT 保持活动状态的时间限制为 230 秒。保持活动状态超过该时段的时间将自动减少到 230 秒。
+ 每个 VPC 端点总共支持 10 万台并发互联设备。如果您需要更多连接，请参阅[使用扩展 VPC 终端节点 AWS IoT Core](#Scaling-VPC-endpoints)。
+ VPC 端点将仅提供 [ATS 证书](https://docs.aws.amazon.com//iot/latest/developerguide/server-authentication.html)，但自定义域除外。
+  不支持 [VPC 端点策略](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html)。
+ 对于为 AWS IoT Core 数据平面创建的 VPC 终端节点， AWS IoT Core 不支持使用地区或区域公有 DNS 记录。

### 凭证提供商端点的限制
<a name="VPC-limitations-credential-provider"></a>

本部分介绍凭证提供商 VPC 端点的限制。
+ VPC 端点将仅提供 [ATS 证书](https://docs.aws.amazon.com//iot/latest/developerguide/server-authentication.html)。
+  不支持 [VPC 端点策略](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html)。
+ 凭证提供商端点不支持自定义域名。
+ 对于为 AWS IoT Core 凭证提供者创建的 VPC 终端节点， AWS IoT Core 不支持使用地区或区域公有 DNS 记录。

## 使用扩展 VPC 终端节点 AWS IoT Core
<a name="Scaling-VPC-endpoints"></a>

AWS IoT Core 接口 VPC 终端节点限制为通过单个接口终端节点连接的 100,000 台设备。如果您的使用案例需要更多到代理的并发连接，那么我们建议您使用多个 VPC 端点并在接口端点之间手动路由您的设备。创建私有 DNS 记录将流量路由到 VPC 端点时，确保创建与 VPC 端点 数量相同的加权记录，以便在多个端点之间 分配流量。

## 将自定义域用于 VPC 端点
<a name="VPC-custom-domains"></a>

如果要将自定义域与 VPC 端点结合使用，必须在私有托管区域中创建自定义域名记录，并在 Route53 中创建路由记录。有关更多信息，请参阅[创建私有托管区域](https://docs.aws.amazon.com//Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)。

**注意**  
仅 AWS IoT Core 数据端点支持自定义域名。

## VPC 终端节点的可用性 AWS IoT Core
<a name="VPC-availability"></a>

AWS IoT Core 所有[AWS IoT Core 支持的区域](https://aws.amazon.com//about-aws/global-infrastructure/regional-product-services/)均提供接口 VPC 终端节点。 AWS IoT Core 中国地区不支持 AWS IoT Core 凭证提供商的接口 VPC 终端节点，以及。 AWS GovCloud (US) Regions