对虚拟网络的 Azure IoT 中心设备预配服务 (DPS) 支持

本文介绍使用 DPS 通过 IoT 中心预配 IoT 设备的虚拟网络连接模式。 此模式在客户拥有的 Azure 虚拟网络中的设备、DPS 和 IoT 中心之间提供专用连接。

在大多数使用虚拟网络配置 DPS 的情况下,IoT 中心也会在同一虚拟网络中配置。 有关 IoT 中心的虚拟网络支持和配置的详细信息,请参阅 使用 Azure 专用链接对虚拟网络的 IoT 中心支持

简介

默认情况下,DPS 主机名会映射到一个公共终结点,该终结点具有可通过 Internet 以公开方式路由的 IP 地址。 此公共终结点对所有客户都可见。 广域网和本地网络上的 IoT 设备可以尝试访问公共终结点。

出于多种原因,客户可能希望限制与 Azure 资源(如 DPS)的连接。 其原因包括:

  • 防止通过公共 Internet 的连接曝光。 可以通过网络级隔离为 IoT 中心和 DPS 资源引入更多安全层,从而降低曝光度

  • 从本地网络资产启用专用连接体验,确保数据和流量直接传输到 Microsoft Azure 主干网络。

  • 阻止来自敏感的本地网络的渗透攻击。

  • 采用 Azure 范围内常见的专用终结点连接模式。

限制连接的常见方法包括 DPS IP 筛选器规则专用终结点的虚拟网络。 本文旨在介绍使用专用终结点的 DPS 的虚拟网络方法。

在本地网络中运行的设备可以使用 虚拟专用网络(VPN)ExpressRoute 专用对等互连连接到 Azure 中的虚拟网络,并通过专用终结点访问 DPS 资源。

专用终结点是在客户拥有的虚拟网络中分配的专用 IP 地址,可通过该地址访问 Azure 资源。 通过拥有 DPS 资源的专用终结点,可以允许在虚拟网络中运行的设备请求 DPS 资源预配,而无需允许流量流向公共终结点。 每个 DPS 资源都可以支持多个专用终结点,每个终结点可能位于不同区域中的虚拟网络中。

先决条件

在继续操作之前,请确保满足以下先决条件:

专用终结点限制

使用专用终结点时,请注意以下对 DPS 的当前限制:

  • 当 DPS 资源和链接的 IoT 中心位于不同的云中时,专用终结点不起作用。

  • DPS 中的专用终结点使用仅在公共区域中受支持的 Azure 专用链接。 有关详细信息,请参阅 Azure 专用链接可用性

  • 目前,Azure Functions for DPS 的 自定义分配策略 在 Azure 函数锁定到虚拟网络和专用终结点时不起作用。

  • 当前的 DPS 虚拟网络支持仅适用于数据流入 DPS。 DPS 的数据出口,即从 DPS 到 IoT 中心的流量,使用的是内部的服务间机制,而不是专用的虚拟网络。 目前不支持 DPS 和 IoT 中心之间完全基于虚拟网络的出口锁定。

  • 使用最短延迟分配策略,将设备分配到具有最低延迟的 IoT 中心。 此分配策略在虚拟网络环境中不可靠。

  • 启用一个或多个专用终结点通常涉及禁用对 DPS 实例的公共访问权限。 禁用公共访问后,将无法再使用 Azure 门户管理注册。 可以使用 Azure CLI、PowerShell 或服务 API 管理一个或多个配置在 DPS 实例上的虚拟网络/专用终结点内计算机的注册。

  • 使用专用终结点时,我们建议在支持可用性区域的区域之一中部署 DPS。 否则,启用了专用终结点的 DPS 实例可能会在中断期间看到可用性降低。

设置专用终结点

若要设置专用终结点,请执行以下步骤:

  1. Azure 门户中,导航到 DPS 资源。

  2. 在服务菜单中的 “设置”下,选择“ 网络 ”选项卡。

  3. 在工作窗格中,选择 “专用访问 ”选项卡,然后选择“ + 创建专用终结点”。

    显示在 Azure 门户中为 DPS 实例添加新专用终结点的屏幕截图。

  4. “创建专用终结点”页的“基本信息”选项卡上,输入下表中提到的信息。

    显示“创建专用终结点”页的“基本信息”选项卡的屏幕截图。

    字段
    订阅 选择要包含专用终结点的所需 Azure 订阅。
    资源组 选择或创建资源组以包含专用终结点。
    名称 输入专用终结点的名称
    网络接口名称 如果需要,请输入专用终结点网络接口的名称。
    区域 选择专用终结点的区域。 所选区域必须与包含虚拟网络的区域相同,但不必与 DPS 资源相同。

    选择“下一步: 资源”,以配置专用终结点将指向的资源。

  5. 在“创建专用终结点”页的“资源”选项卡上,输入下表中提到的信息。

    显示“创建专用终结点”页的“资源”选项卡的屏幕截图。

    字段
    订阅 如果尚未选择,请选择包含您的私有终结点指向的 DPS 资源的 Azure 订阅。
    资源类型 如果尚未选择,请选择 Microsoft.Devices/ProvisioningServices
    资源 如果尚未选择,请选择该专用终结点映射到的 DPS 资源。
    目标子资源 选择 iotDps

    提示

    有关“按资源 ID 或别名连接到 Azure 资源”设置的信息,请参阅本文中的请求专用终结点部分。

    选择 “下一步:虚拟网络 ”,为专用终结点配置虚拟网络。

  6. 在“创建专用终结点”页的“虚拟网络”选项卡上,选择要在其中创建专用终结点的虚拟网络和子网。

    显示“创建专用终结点”页的“虚拟网络”选项卡的屏幕截图。

    选择 “下一步:DNS ”,选择专用终结点所需的任何专用 DNS 集成选项。

  7. “创建专用终结点”页的“DNS”选项卡上,选择专用终结点所需的任何专用 DNS 集成选项。

    显示“创建专用终结点”页的“DNS”选项卡的屏幕截图。

    选择“下一步:标记”,为资源提供标记(可选)。

  8. 选择“ 下一步:查看 + 创建”,然后选择“ 创建 ”以创建专用终结点资源。

对设备使用专用终结点

若要将专用终结点与设备预配代码一起使用,预配代码必须使用 DPS 实例的特定服务终结点,如 Azure 门户中 DPS 实例的概述页所示。 服务终结点具有以下形式。

<Your DPS Tenant Name>.azure-devices-provisioning.net

文档和 SDK 中演示的大多数示例代码使用全局设备终结点 () 和 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。

  1. 资源 ID 在 Azure 门户中 DPS 资源的“属性”页上提供,如以下屏幕截图所示。

    显示 Azure 门户中 DPS 实例的“属性”页的屏幕截图,其中突出显示了 DPS 实例的资源 ID。

    注意

    资源 ID 中包含订阅 ID。

  2. 获得资源 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

    选择 “下一步:虚拟网络 ”,为专用终结点配置虚拟网络。

  3. 在“创建专用终结点”页的“虚拟网络”选项卡上,选择要在其中创建专用终结点的虚拟网络和子网。

    显示“创建专用终结点”页的“虚拟网络”选项卡的屏幕截图。

    选择 “下一步:DNS ”,选择专用终结点请求所需的任何专用 DNS 集成选项。

  4. 在“创建专用终结点”页的“DNS”选项卡上,选择专用终结点请求所需的任何专用 DNS 集成选项。

    显示“创建专用终结点”页的“DNS”选项卡的屏幕截图。

    选择“下一步:标记”,为资源提供标记(可选)。

  5. 选择 “下一步:查看 + 创建”,然后选择“ 创建 ”以创建专用终结点请求。

  6. DPS 所有者在 Azure 门户中 DPS 实例的网络页上的“专用终结点连接”列表中看到专用终结点请求。 在该页上,所有者可以 批准拒绝 专用终结点请求。

    显示 Azure 门户中 DPS 实例的网络页的屏幕截图,其中突出显示了专用终结点请求。

专用终结点定价

有关定价详细信息,请参阅 Azure 专用链接定价