使用 Microsoft Entra ID(预览版)控制对 Azure IoT 中心设备预配服务 (DPS) 的访问

可以使用 Microsoft Entra ID 来对向 Azure IoT 中心设备预配服务 (DPS) API 发出的请求(例如创建设备标识和调用直接方法)进行身份验证。 还可以使用 Azure 基于角色的访问控制 (Azure RBAC) 对这些服务 API 进行授权。 将这些技术一起使用,可以向 Microsoft Entra 安全主体授予访问 Azure IoT 中心设备预配服务 (DPS) API 的权限。 此安全主体可以是用户、组或应用程序服务主体。

与使用安全令牌相比,使用 Microsoft Entra ID 对访问进行身份验证并使用 Azure RBAC 控制权限能够提供更高的安全性与易用性。 为了最大限度地减少安全令牌中固有的潜在安全问题,我们建议尽可能将 Microsoft Entra ID 与 Azure IoT 中心设备预配服务 (DPS) 配合使用。

注意

Azure IoT 中心设备预配服务 (DPS) 设备 API(例如注册设备或设备注册状态查找)不支持使用 Microsoft Entra ID 进行身份验证。 使用对称密钥X.509 对设备的 Azure IoT 中心设备预配服务 (DPS) 进行身份验证。

身份验证和授权

当某个 Microsoft Entra 安全主体请求访问 Azure IoT 中心设备预配服务 (DPS) API 时,首先会对该主体的标识进行身份验证。 要进行身份验证,请求需要在运行时包含 OAuth 2.0 访问令牌。 用于请求令牌的资源名称是 https://azure-devices-provisioning.net。 如果应用程序在 Azure VM、Azure Functions 应用或 Azure 应用服务应用之类的 Azure 资源中运行,可将其表示为托管标识

对 Microsoft Entra 主体进行身份验证后,下一步是授权。 在此步骤中,Azure IoT 中心设备预配服务 (DPS) 使用 Microsoft Entra 角色分配服务来确定主体拥有哪些权限。 如果主体的权限与请求的资源或 API 匹配,则 Azure IoT 中心设备预配服务 (DPS) 将为该请求授权。 因此,此步骤要求将一个或多个 Azure 角色分配给安全主体。 Azure IoT 中心设备预配服务 (DPS) 提供一些拥有通用权限组的内置角色。

使用 Azure RBAC 角色分配管理对 Azure IoT 中心设备预配服务 (DPS) 的访问

在使用 Microsoft Entra ID 和 RBAC 的情况下,Azure IoT 中心设备预配服务 (DPS) 要求请求 API 的主体具有适当级别的授权权限。 若要为主体授予权限,需为该主体分配角色。

为确保符合最低特权原则,请始终在尽量最小的资源范围(可能是 Azure IoT 中心设备预配服务 (DPS) 范围)分配适当的角色。

Azure IoT 中心设备预配服务 (DPS) 提供了以下 Azure 内置角色以用于通过 Microsoft Entra ID 和 RBAC 授权访问 DPS API:

角色 说明
设备预配服务数据参与者 允许对设备预配服务数据平面操作进行完全访问。
设备预配服务数据读取者 允许对设备预配服务数据平面属性进行完全读取访问。

还可以通过组合所需的权限来定义与 Azure IoT 中心设备预配服务 (DPS) 配合使用的自定义角色。 有关详细信息,请参阅为 Azure 基于角色的访问控制创建自定义角色

资源范围

向安全主体分配 Azure RBAC 角色之前,请确定安全主体应具有的访问权限的范围。 无论何时,最好都只授予最窄的可能范围。 在较广范围内中定义的 Azure RBAC 角色由其下的资源继承。

此列表描述了可在哪些范围级别访问 IoT 中心,从最窄的范围开始:

  • Azure IoT 中心设备预配服务 (DPS)。 在此范围,角色分配将应用于 Azure IoT 中心设备预配服务 (DPS)。 不支持在更小范围(例如注册组或个人注册)进行角色分配。
  • 资源组。 在此范围,角色分配将应用于资源组中的所有 IoT 中心。
  • 订阅。 在此范围,角色分配将应用于订阅中所有资源组内的所有 IoT 中心。
  • 管理组。 在此范围,角色分配将应用于管理组的所有订阅中所有资源组内的所有 IoT 中心。

Azure IoT 中心设备预配服务 (DPS) API 的权限

下表描述了可用于 Azure IoT 中心设备预配服务 (DPS) API 操作的权限。 要使客户端能够调用特定的操作,请确保该客户端的已分配 RBAC 角色为该操作提供足够的权限。

RBAC 操作 说明
Microsoft.Devices/provisioningServices/attestationmechanism/details/action 获取证明机制详细信息
Microsoft.Devices/provisioningServices/enrollmentGroups/read 读取注册组
Microsoft.Devices/provisioningServices/enrollmentGroups/write 写入注册组
Microsoft.Devices/provisioningServices/enrollmentGroups/delete 删除注册组
Microsoft.Devices/provisioningServices/enrollments/read 读取注册
Microsoft.Devices/provisioningServices/enrollments/write 写入注册
Microsoft.Devices/provisioningServices/enrollments/delete 删除注册
Microsoft.Devices/provisioningServices/registrationStates/read 读取注册状态
Microsoft.Devices/provisioningServices/registrationStates/delete 删除注册状态

适用于 Azure CLI 的 Azure IoT 扩展

针对 Azure IoT 中心设备预配服务 (DPS) 的大多数命令都支持 Microsoft Entra 身份验证。 可以使用 --auth-type 参数(接受 keylogin 值)来控制用于运行命令的身份验证类型。 key 值为默认值。

  • --auth-type 的值为 key 时,CLI 在与 Azure IoT 中心设备预配服务 (DPS) 交互时会自动发现适当的策略。

  • --auth-type 的值为 login 时,将使用主体中记录的来自 Azure CLI 的访问令牌进行操作。

  • 以下命令目前支持 --auth-type

    • az iot dps enrollment
    • az iot dps enrollment-group
    • az iot dps registration

有关详细信息,请参阅适用于 Azure CLI 的 Azure IoT 扩展发布页

SDK 和示例

从 Azure 门户访问 Microsoft Entra ID

注意

目前在预览期间无法从 Azure 门户访问 Microsoft Entra ID。

后续步骤