你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

对虚拟网络的 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 的当前限制:

  • 当 DPS 资源和链接的 IoT 中心位于不同的云中时,专用终结点不起作用。 例如 Azure 政府和全球 Azure

  • 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 区域,请使用专用终结点。

设置专用终结点

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

  1. Azure 门户中,打开 DPS 资源,然后选择“网络”选项卡。选择“Private endpoint connections(专用终结点连接)”和“+ 专用终结点”。

    Screenshot that shows adding a new private endpoint for DPS.

  2. 在“创建专用终结点”的“基本信息”页上,输入下表中所述的信息。

    Screenshot that shows the private endpoints basics page.

    字段
    订阅 选择要包含专用终结点的所需 Azure 订阅。
    资源组 选择或创建一个要包含专用终结点的资源组
    名称 输入专用终结点的名称
    区域 选择的区域必须与包含 VNET 的区域相同,但不一定要与 DPS 资源相同。

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

  3. 在“创建专用终结点”的“资源”页上,输入下表中所述的信息。

    Screenshot that shows the private endpoint resource page.

    字段
    订阅 选择包含了专用终结点将指向的 DPS 资源的 Azure 订阅。
    资源类型 选择 Microsoft.Devices/ProvisioningServices
    资源 选择专用终结点将映射到的 DPS 资源。
    目标子资源 选择 iotDps

    提示

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

    选择“下一步: 配置”,为专用终结点配置 VNET。

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

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

    Screenshot that shows the private endpoint configuration page.

  5. 依次选择“查看 + 创建”和“创建”,以创建专用终结点资源。

对设备使用专用终结点

若要将专用终结点与设备预配代码一起使用,预配代码必须使用 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]";
}

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 显示在 DPS 资源的属性选项卡上,如下所示。

    Screenshot that shows the DPS Properties tab.

    注意

    请注意,资源 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

    选择“下一步: 配置”,为专用终结点配置 VNET。

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

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

  4. 依次选择“查看 + 创建”和“创建”,以创建专用终结点请求。

  5. DPS 所有者将在 DPS 网络选项卡上的“专用终结点连接”列表中看到专用终结点请求。在此页面上,所有者可以“批准”或“拒绝”专用终结点请求。

    Screenshot that shows the private endpoint request approval.

专用终结点定价

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

后续步骤

使用以下链接详细了解 DPS 安全功能: