对虚拟网络的 Azure IoT 中心设备预配服务 (DPS) 支持
本文介绍了通过使用 DPS 的 IoT 中心进行 IoT 设备预配时,所适用的虚拟网络 (VNET) 连接模式。 此模式在客户拥有的 Azure VNET 内的设备、DPS 和 IoT 中心之间提供专用连接。
在大多数情况下,使用 VNET 配置了 DPS 后,还将在同一 VNET 中配置 IoT 中心。 有关对 IoT 中心的 VNET 支持和配置的更多特定信息,请参阅 IoT 中心虚拟网络支持。
默认情况下,DPS 主机名会映射到一个公共终结点,该终结点具有可通过 Internet 以公开方式路由的 IP 地址。 此公共终结点对所有客户都可见。 广域网和本地网络上的 IoT 设备可以尝试访问公共终结点。
出于多种原因,客户可能想要限制与 DPS 等 Azure 资源的连接。 其原因包括:
防止通过公共 Internet 的连接曝光。 可以通过网络级隔离为 IoT 中心和 DPS 资源引入更多安全层,从而降低曝光度
提供来自本地网络资产的专用连接体验,确保数据和流量直接传输到 Azure 主干网络。
阻止来自敏感的本地网络的渗透攻击。
采用 Azure 范围内常见的专用终结点连接模式。
限制连接的常见方法包括 DPS IP 筛选器规则和具有专用终结点的虚拟网络 (VNET)。 本文的重点介绍对象是使用专用终结点的 DPS 的 VNET 方法。
在本地网络中运行的设备可以使用虚拟专用网络 (VPN) 或 ExpressRoute 专用对等互连来连接到 Azure 中的 VNET,并通过专用终结点访问 DPS 资源。
专用终结点是在客户拥有的 VNET 内部分配的专用 IP 地址,可通过该地址访问 Azure 资源。 当 DPS 资源有了专用终结点时,流量无需经过公共终结点,在 VNET 中运行的设备就能请求 DPS 资源进行预配。 每个 DPS 资源均可支持多个专用终结点,每个终结点可能位于不同区域的 VNET 中。
在继续操作之前,请确保满足以下先决条件:
DPS 资源已创建并链接到 IoT 中心。 有关如何设置新 DPS 资源的指南,请参阅使用 Azure 门户设置 IoT 中心设备预配服务
已预配一个 Azure VNET,其中配置了要创建专用终结点的子网。 有关详细信息,请参阅使用 Azure CLI 创建虚拟网络。
对于在本地网络中运行的设备,请在 Azure VNET 中设置虚拟专用网络 (VPN) 或 ExpressRoute 专用对等互连。
使用专用终结点时,请注意以下对 DPS 的当前限制:
*当 DPS 资源和链接的 IoT 中心位于不同的云中时,专用终结点不起作用。 。
DPS 中的专用终结点使用仅在公共区域中受支持的 Azure 专用链接。 有关详细信息,请参阅 Azure 专用链接可用性。
目前,当 Azure 函数锁定到 VNET 和专用终结点时,针对 DPS 的、使用 Azure Functions 的自定义分配策略将不起作用。
当前的 DPS VNET 支持仅适用于进入 DPS 的数据流入。 数据流出(从 DPS 到 IoT 中心的流量)使用内部服务到服务机制,而不是专用 VNET。 当前不支持在 DPS 和 IoT 中心之间进行完全的基于 VNET 的流出锁定。
使用最短延迟分配策略,将设备分配到具有最低延迟的 IoT 中心。 此分配策略在虚拟网络环境中不可靠。
启用一个或多个专用终结点通常涉及禁用对 DPS 实例的公共访问权限。 禁用公共访问后,将无法再使用 Azure 门户管理注册。 可转为使用 Azure CLI、PowerShell 或服务 API,通过 DPS 实例上配置的 VNET/专用终结点内的计算机管理注册。
使用专用终结点时,我们建议在支持可用性区域的区域之一中部署 DPS。 否则,启用了专用终结点的 DPS 实例可能会在中断时降低可用性。
备注
数据驻留注意事项:
DPS 提供全局设备终结点 (global.azure-devices-provisioning.net
)。 但是,使用全局终结点时,数据可能会重定向到最初创建 DPS 实例的区域之外。 若要确保数据驻留在初始 DPS 区域,请使用专用终结点。
若要设置专用终结点,请执行以下步骤:
在 Azure 门户中,打开 DPS 资源,然后选择“网络”选项卡。选择“Private endpoint connections(专用终结点连接)”和“+ 专用终结点”。
在“创建专用终结点”的“基本信息”页上,输入下表中所述的信息。
字段 值 订阅 选择要包含专用终结点的所需 Azure 订阅。 资源组 选择或创建一个要包含专用终结点的资源组 名称 输入专用终结点的名称 区域 选择的区域必须与包含 VNET 的区域相同,但不一定要与 DPS 资源相同。 选择“下一步: 资源”,以配置专用终结点将指向的资源。
在“创建专用终结点”的“资源”页上,输入下表中所述的信息。
字段 值 订阅 选择包含了专用终结点将指向的 DPS 资源的 Azure 订阅。 资源类型 选择 Microsoft.Devices/ProvisioningServices。 资源 选择专用终结点将映射到的 DPS 资源。 目标子资源 选择 iotDps。 提示
有关“按资源 ID 或别名连接到 Azure 资源”设置的信息,请参阅本文中的请求专用终结点部分。
选择“下一步: 配置”,为专用终结点配置 VNET。
在“创建专用终结点”的“配置”页上,选择要在其中创建专用终结点的虚拟网络和子网。
选择“下一步:标记”,为资源提供标记(可选)。
依次选择“查看 + 创建”和“创建”,以创建专用终结点资源。
若要将专用终结点与设备预配代码一起使用,预配代码必须使用 DPS 实例的特定服务终结点,如 Azure 门户中 DPS 实例的概述页所示。 服务终结点具有以下形式。
<Your DPS Tenant Name>.azure-devices-provisioning.net
文档和 SDK 中演示的大多数示例代码使用全局设备终结点 (global.azure-devices-provisioning.net
) 和 ID 范围来解析特定的 DPS 实例。 使用专用终结点连接到 DPS 实例来预配设备时,使用服务终结点来代替全局设备终结点。
例如,Azure IoT C SDK 中的预配设备客户端示例 (pro_dev_client_sample) 旨在使用全局设备终结点作为 prov_dev_client_sample.c 中的全局预配 URI (global_prov_uri
)
MU_DEFINE_ENUM_STRINGS_WITHOUT_INVALID(PROV_DEVICE_RESULT, PROV_DEVICE_RESULT_VALUE);
MU_DEFINE_ENUM_STRINGS_WITHOUT_INVALID(PROV_DEVICE_REG_STATUS, PROV_DEVICE_REG_STATUS_VALUES);
static const char* global_prov_uri = "global.azure-devices-provisioning.net";
static const char* id_scope = "[ID Scope]";
``
```C
PROV_DEVICE_RESULT prov_device_result = PROV_DEVICE_RESULT_ERROR;
PROV_DEVICE_HANDLE prov_device_handle;
if ((prov_device_handle = Prov_Device_Create(global_prov_uri, id_scope, prov_transport)) == NULL)
{
(void)printf("failed calling Prov_Device_Create\r\n");
}
若要将示例与专用终结点一起使用,上述突出显示的代码将更改为使用 DPS 资源的服务终结点。 例如,如果服务终结点为 mydps.azure-devices-provisioning.net
,则代码将如下所示。
static const char* global_prov_uri = "global.azure-devices-provisioning.net";
static const char* service_uri = "mydps.azure-devices-provisioning.net";
static const char* id_scope = "[ID Scope]";
PROV_DEVICE_RESULT prov_device_result = PROV_DEVICE_RESULT_ERROR;
PROV_DEVICE_HANDLE prov_device_handle;
if ((prov_device_handle = Prov_Device_Create(service_uri, id_scope, prov_transport)) == NULL)
{
(void)printf("failed calling Prov_Device_Create\r\n");
}
可以按资源 ID 向 DPS 实例请求专用终结点。 若要提出此请求,需要资源所有者提供资源 ID。
资源 ID 显示在 DPS 资源的属性选项卡上,如下所示。
注意
请注意,资源 ID 中包含订阅 ID。
获得资源 ID 后,请按照上文设置专用终结点中的步骤到创建专用终结点“资源” 页中的步骤 3 进行操作。 选择“按资源 ID 或别名连接到 Azure 资源”,并输入下表中的信息。
字段 值 资源 ID 或别名 输入 DPS 资源的资源 ID。 目标子资源 输入 iotDps 请求消息 输入面向 DPS 资源所有者的请求消息。
例如:Please approve this new private endpoint
for IoT devices in site 23 to access this DPS instance
选择“下一步: 配置”,为专用终结点配置 VNET。
在“创建专用终结点”的“配置”页上,选择要在其中创建专用终结点的虚拟网络和子网。
选择“下一步:标记”,为资源提供标记(可选)。
依次选择“查看 + 创建”和“创建”,以创建专用终结点请求。
DPS 所有者将在 DPS 网络选项卡上的“专用终结点连接”列表中看到专用终结点请求。在此页面上,所有者可以“批准”或“拒绝”专用终结点请求。
有关定价详细信息,请参阅 Azure 专用链接定价。
使用以下链接详细了解 DPS 安全功能: