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

IoT 中心对托管标识的支持

托管标识在 Microsoft Entra ID 中以安全的方式为 Azure 服务提供自动托管标识。 此功能无需开发人员通过提供标识来管理凭据。 有两种类型的托管标识:系统分配的托管标识和用户分配的托管标识。 IoT 中心支持上述这两者。

在 IoT 中心,托管标识可用于将 IoT 中心连接到其他 Azure 服务,提供消息路由文件上传批量设备导入/导出等功能。 本文介绍了如何在 IoT 中心将系统分配的托管标识和用户分配的托管标识用于不同的功能。

Prerequisites

系统分配的托管标识

可以在 Azure 门户中启用或禁用系统分配的托管标识

  1. 登录 Azure 门户并导航到 IoT 中心。

  2. 在导航菜单的“安全设置”部分中选择“标识”

  3. 选择“系统分配”选项卡

  4. 将系统分配的托管标识“状态”设为“开”或“关”,然后选择“保存”

    注意

    在使用系统分配的托管标识时,无法将其关闭。 在禁用该功能之前,请确保没有自定义终结点在使用系统分配的托管标识身份验证。

    显示在何处为 IoT 中心启用系统分配的托管标识的屏幕截图。

用户分配的托管标识

本部分介绍如何使用 Azure 门户在 VM 中添加和删除用户分配的托管标识。

  1. 首先,需要将用户分配的托管标识创建为独立资源。 为此,可按照管理用户分配的托管标识中的说明操作。

  2. 转到 IoT 中心,然后从 Azure 门户中的服务菜单中选择“安全设置”下的“标识”。

  3. 在“ 用户分配 ”选项卡下,选择“ 关联用户分配的托管标识”。 选择要添加到中心的用户分配的托管标识,然后选择“添加”

    显示如何为 IoT 中心添加用户分配的托管标识的屏幕截图。

  4. 可以从 IoT 中心中删除用户分配的标识。 选择要删除的用户分配标识,然后选择“ 删除”。 仅从你的 IoT 中心中删除它,此操作不会删除作为资源的用户分配标识。 要将用户分配的标识作为资源删除,请按照管理用户分配的托管标识中的说明操作。

从 IoT 中心到其他 Azure 资源的出口连接

托管标识可用于从 IoT 中心到其他 Azure 服务的出口连接。 针对与客户拥有的终结点(包括存储帐户、事件中心和服务总线终结点)的每个 IoT 中心出口连接,你可以选择使用哪个托管标识。

注意

只有系统分配的托管标识才允许 IoT 中心访问专用资源。 如果要使用用户分配的托管标识,需要启用这些专用资源的公共访问权限才会允许连接。

使用托管标识配置消息路由

在本部分中,我们以消息路由到事件中心自定义终结点为例。 该示例还适用于其他路由自定义终结点。

  1. 在 Azure 门户中转到事件中心,以便向托管标识分配正确的访问权限。

  2. 选择“访问控制 (IAM)”

  3. 选择“添加”>“添加角色分配”

    显示访问控制(标识和访问管理)页面的屏幕截图,其中打开了“添加角色分配”菜单。

  4. 在“角色”选项卡上,选择“Azure 事件中心数据发送方”

    注意

    对于“存储帐户”,请选择“存储 Blob 数据参与者”(非参与者或存储帐户参与者)作为角色。 对于服务总线,选择“Azure 服务总线数据发送者”。

  5. 在“成员”选项卡上,选择“托管标识”,然后选择“选择成员”

  6. 对于用户分配的托管标识,请选择你的订阅,选择“用户分配的托管标识”,然后选择你的用户分配的托管标识

  7. 对于系统分配的托管标识,请选择你的订阅,选择“所有系统分配的托管标识”,然后选择你的 IoT 中心的资源名称

  8. 在“查看 + 分配”选项卡上,选择“查看 + 分配”,以分配角色

    若要详细了解角色分配,请参阅使用 Azure 门户分配 Azure 角色

  9. 如果需要通过虚拟网络限制到自定义终结点的连接,则需要启用受信任的Microsoft第一方例外,以授予 IoT 中心对特定终结点的访问权限。 例如,如果要添加事件中心自定义终结点,请导航到事件中心中的“防火墙和虚拟网络”选项卡,并启用“允许从所选网络进行访问”选项。 在 “例外 ”列表中,选中“ 允许受信任的Microsoft服务访问事件中心”框,然后选择“ 保存”。 此要求也适用于存储帐户和服务总线。 详细了解 使用 Azure 专用链接对虚拟网络的 IoT 中心支持

    注意

    在将事件中心作为自定义终结点添加到 IoT 中心之前,需要完成上述步骤以向托管标识分配适当的访问权限。 稍等几分钟,让系统完成角色分配的传播。

  10. 接下来,转到 IoT 中心。 在中心,导航到“消息路由”,然后选择“添加”

  11. 在“终结点”选项卡上,通过提供以下信息为事件中心创建终结点

    参数
    终结点类型 选择“事件中心”
    端点名称 为新终结点提供独一无二的名称,或选择“选择现有”以选择现有的事件中心终结点。
    事件中心命名空间 使用下拉菜单选择订阅中的现有事件中心命名空间。
    事件中心实例 使用下拉菜单选择命名空间中的现有事件中心。
    身份验证类型 选择“用户分配”,然后使用下拉菜单选择在事件中心中创建的“用户分配标识”

    显示使用用户分配的身份验证的事件中心终结点的屏幕截图。

  12. 选择“创建 + 下一步”。 可以继续按照向导进行操作,创建指向此终结点的路由,也可以关闭向导。

可以更改现有自定义终结点的身份验证类型。 使用以下步骤修改终结点:

  1. 在 IoT 中心的左侧导航窗格中选择“消息路由”,然后选择“自定义终结点”。

  2. 选中要修改的自定义终结点的复选框,然后选择“更改身份验证类型”

  3. 选择此终结点的新身份验证类型,然后选择“保存”

使用托管标识配置文件上传

IoT 中心的文件上传功能允许设备将文件上传到客户拥有的存储帐户。 若要正常上传文件,IoT 中心需要连接到存储帐户。 类似于消息路由,你可以为 Azure 存储帐户与 IoT 中心的出口连接选择首选的身份验证类型和托管标识。

  1. 在 Azure 门户中导航到存储帐户。

  2. 选择“访问控制 (IAM)”

  3. 选择“添加”>“添加角色分配”

    显示访问控制(标识和访问管理)页面的屏幕截图,其中打开了“添加角色分配”菜单。

  4. 在“角色”选项卡上,选择“存储 Blob 数据参与者”。 (请勿选择“参与者”或“存储帐户参与者”。)

  5. 在“成员”选项卡上,选择“托管标识”,然后选择“选择成员”

  6. 对于用户分配的托管标识,请选择你的订阅,选择“用户分配的托管标识”,然后选择你的用户分配的托管标识

  7. 对于系统分配的托管标识,请选择你的订阅,选择“所有系统分配的托管标识”,然后选择你的 IoT 中心的资源名称

  8. 在“查看 + 分配”选项卡上,选择“查看 + 分配”,以分配角色

    若要详细了解角色分配,请参阅使用 Azure 门户分配 Azure 角色

    如果需要通过虚拟网络限制与存储帐户的连接,则需要启用受信任的Microsoft第一方例外,以便 IoT 中心能够访问存储帐户。 在存储帐户资源页面上,导航到“防火墙和虚拟网络”选项卡,并启用“允许从所选网络进行访问”选项。 在 “例外 ”列表中,选中“ 允许受信任的Microsoft服务访问此存储帐户”框,然后选择“ 保存”。 详细了解 使用 Azure 专用链接对虚拟网络的 IoT 中心支持

    注意

    在使用托管标识将存储帐户保存到 IoT 中心进行文件上传之前,你需要完成上述步骤以便为托管帐户分配合适的访问权限。 稍等几分钟,让系统完成角色分配的传播。

  9. 在 IoT 中心的“资源”页上,导航到“文件上传”选项卡

  10. 在显示的页面上,选择要在 blob 存储中使用的容器,根据需要配置“文件通知设置”、“SAS TTL”、“默认 TT”和“最大传送计数”。 选择首选身份验证类型,然后选择“ 保存”。 如果在此步骤中遇到错误,请暂时将存储帐户设置为允许从所有网络访问,然后重试。 文件上传配置完成后,可以在存储帐户上配置防火墙。

    屏幕截图显示了带有 msi 的文件上传。

    注意

    在文件上传方案中,中心和设备都需要与存储帐户连接。 前面的步骤是使用所需的身份验证类型将 IoT 中心连接到存储帐户。 必须使用 SAS URI 将设备连接到存储。 目前,SAS URI 是使用连接字符串生成的。 请按照 使用 IoT 中心上传文件中的步骤进行操作。

使用托管标识配置批量设备导入/导出

IoT 中心支持从/向客户提供的存储 blob 批量导入和导出设备信息。 若要使用此功,需要从 IoT 中心连接到存储帐户。

  1. 在 Azure 门户中导航到存储帐户。

  2. 选择“访问控制 (IAM)”

  3. 选择“添加”>“添加角色分配”

    显示访问控制(标识和访问管理)页面的屏幕截图,其中打开了“添加角色分配”菜单。

  4. 在“角色”选项卡上,选择“存储 Blob 数据参与者”。 (请勿选择“参与者”或“存储帐户参与者”。)

  5. 在“成员”选项卡上,选择“托管标识”,然后选择“选择成员”

  6. 对于用户分配的托管标识,请选择你的订阅,选择“用户分配的托管标识”,然后选择你的用户分配的托管标识

  7. 对于系统分配的托管标识,请选择你的订阅,选择“所有系统分配的托管标识”,然后选择你的 IoT 中心的资源名称

  8. 在“查看 + 分配”选项卡上,选择“查看 + 分配”,以分配角色

    若要详细了解角色分配,请参阅使用 Azure 门户分配 Azure 角色

使用 REST API 或 SDK 创建导入和导出作业

现在可以使用 Azure IoT REST API 创建导入和导出作业。 需要在请求正文中提供以下属性:

  • storageAuthenticationType:将值设置为 identityBased。
  • inputBlobContainerUri:仅在导入作业中设置此属性。
  • outputBlobContainerUri:为导入和导出作业设置此属性。
  • identity:将值设置为要使用的托管标识。

Azure IoT 中心 SDK 也支持在服务客户端的注册表管理器中使用此功能。 以下代码段演示如何在使用 C# SDK 时启动导入或导出作业。

C# 代码片段

    // Create an export job
 
    JobProperties jobProperties = JobProperties.CreateForExportJob(
        outputBlobContainerUri: blobContainerUri,
        excludeKeysInExport: false,
        storageAuthenticationType: StorageAuthenticationType.IdentityBased,
        identity: new ManagedIdentity
        {
            userAssignedIdentity = userDefinedManagedIdentityResourceId
        });
    // Create an import job
    
    JobProperties jobProperties = JobProperties.CreateForImportJob(
        inputBlobContainerUri: blobContainerUri,
        outputBlobContainerUri: blobContainerUri,
        storageAuthenticationType: StorageAuthenticationType.IdentityBased,
        identity: new ManagedIdentity
        {
            userAssignedIdentity = userDefinedManagedIdentityResourceId
        });

Python 代码片段

# see note below
iothub_job_manager = IoTHubJobManager("<IoT Hub connection information>")

# Create an import job
result = iothub_job_manager.create_import_export_job(JobProperties(
    type="import",
    input_blob_container_uri="<input container URI>",
    output_blob_container_uri="<output container URI>",
    storage_authentication_type="identityBased",
    identity=ManagedIdentity(
        user_assigned_identity="<resource ID of user assigned managed identity>"
    )
))

# Create an export job
result = iothub_job_manager.create_import_export_job(JobProperties(
    type="export",
    output_blob_container_uri="<output container URI>",
    storage_authentication_type="identityBased",
    exclude_keys_in_export=True,
    identity=ManagedIdentity(
        user_assigned_identity="<resource ID of user assigned managed identity>"
    ) 
))

注意

  • 如果 storageAuthenticationType 设置为 identityBaseduserAssignedIdentity 属性不 为 null,则作业将使用指定的用户分配的托管标识。
  • 如果未使用 userAssignedIdentity 中指定的用户分配的托管标识配置 IoT 中心,作业将失败。
  • 如果 storageAuthenticationType 设置为 identityBased ,并且 userAssignedIdentity 属性为 null,作业将使用系统分配的身份标识。
  • 如果未使用用户分配的托管标识配置 IoT 中心,作业将失败。
  • 如果 storageAuthenticationType 设置为 identityBased ,并且未在中心上配置 用户分配系统分配的 托管标识,作业将失败。

SDK 示例

Next steps

使用以下链接了解有关 IoT 中心功能的详细信息: