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

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

本文介绍了通过 DPS(设备预配服务)利用 IoT 中心进行 IoT 设备预配时,所适用的虚拟网络连接模式。 此模式在客户拥有的 Azure 虚拟网络中的设备、DPS 和 IoT 中心之间提供专用连接。

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

介绍

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

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

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

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

  • 防止来自敏感本地网络的外泄攻击。

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

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

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

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

先决条件

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

专用端点限制

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

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

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

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

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

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

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

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

注释

数据驻留注意事项:

DPS 提供全局设备端点global.azure-devices-provisioning.net)。 但是,使用全局终结点时,数据可能会重定向到最初创建 DPS 实例的区域之外。 若要确保初始 DPS 区域中的数据驻留,请使用专用终结点。

设置专用终结点

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

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

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

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

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

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

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

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

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

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

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

    字段 价值
    Subscription 如果尚未选择,请选择包含您的专用终结点所指向的 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 中演示的大多数示例代码都使用 全局设备终结点global.azure-devices-provisioning.net) 和 ID 范围 解析特定的 DPS 实例。 使用专用终结点连接到 DPS 实例来预配设备时,使用服务终结点来代替全局设备终结点。

例如,Azure IoT C SDK 中的预配设备客户端示例(pro_dev_client_sample)旨在将全局设备终结点用作 global_prov_uri 中的全局预配 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 在 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 专用链接定价

后续步骤

详细了解 DPS 安全功能: