Azure RBAC 和 Azure Device Update for IoT Hub

若要使用户和应用程序能够访问 Azure Device Update for IoT Hub,必须向其授予对设备更新资源的访问权限。 Device Update 服务主体还必须访问其关联的 IoT 中心以部署更新和管理设备。

本文介绍了设备更新和 Azure IoT 中心如何使用 Azure 基于角色的访问控制 (Azure RBAC) 为用户和服务 API 提供身份验证和授权。 本文还介绍了 Device Update REST API 的 Microsoft Entra ID 身份验证,并支持设备更新和 Azure IoT 中心中的托管标识。

Device Update 访问控制角色

Device Update 支持以下 RBAC 角色。 有关详细信息,请参阅配置对 Device Update 帐户的访问控制

角色名称 说明
设备更新管理员 有权访问所有 Device Update 资源
设备更新读取者 可以查看所有更新和部署
设备更新内容管理员 可以查看、导入和删除更新
设备更新内容读取者 可以查看更新
设备更新部署管理员 可以管理 Device Update 部署
设备更新部署读取者 可以查看设备更新部署

可以分配角色的组合以提供正确的访问权限级别。 例如,可以使用 Device Update 内容管理员角色导入和管理更新,但需要 Device Update 部署读取者角色才能查看更新的进度。 相反,使用 Device Update 读取者角色可以查看所有更新,但需要 Device Update 部署管理员角色才能将更新部署到设备。

Device Update 服务主体对 IoT 中心的访问权限

Device Update与其关联的 IoT 中心通信,以大规模部署和管理更新。 若要启用此通信,需要使用“IoT 中心数据参与者”角色授予 Device Update 服务主体对 IoT 中心的访问权限。

授予此权限允许以下部署、设备和更新管理和诊断作:

  • 创建部署
  • 取消部署
  • 重试部署
  • 获取设备

可以从 IoT 中心“访问控制 (IAM) 页设置此权限。 有关详细信息,请参阅为 Device Update 服务主体配置 IoT 中心访问权限

Device Update REST API

设备更新使用 Microsoft Entra ID 对其 REST API 进行身份验证。 若要开始使用,你需要创建并配置客户端应用程序。

创建客户端 Microsoft Entra 应用

要将应用程序或服务与 Microsoft Entra ID 集成,请先向 Microsoft Entra ID 注册客户端应用程序。 客户端应用程序安装程序将根据所需的授权流:用户、应用程序或托管标识等而有所不同。 例如:

  • 若要从移动或桌面应用程序调用 Device Update,请在“选择平台”并选择“公共客户端/本机(移动和桌面)” ,然后输入重定向 URI 的 https://login.microsoftonline.com/common/oauth2/nativeclient

  • 若要从具有隐式登录的网站调用 Device Update,请使用 Web 平台。 在“隐式授权和混合流”下,选择“帐户令牌(用于隐式流)”

    注意

    使用最安全的可用身份验证流。 隐式流身份验证需要应用程序具有高信任度,并且具有其他流中不存在的风险。 仅在无法使用其他更安全的流(例如托管标识)时才应使用此流。

配置权限

接下来,向应用授予调用 Device Update 的权限。

  1. 转到应用的“API 权限”页,然后选择“添加权限”。
  2. 转到“我的组织使用的 API”并搜索“Azure Device Update”。
  3. 依次选择“user_impersonation”权限和“添加权限”。

请求获取授权令牌

Device Update REST API 需要请求头中的 OAuth 2.0 授权令牌。 以下部分演示了请求获取授权令牌的一些方法示例。

Azure CLI

az login
az account get-access-token --resource 'https://api.adu.microsoft.com/'

PowerShell MSAL 库

MSAL.PS PowerShell 模块是支持各种身份验证方法的 Microsoft 身份验证库 (MSAL .NET) 的包装器。

  • 用户凭据:

    $clientId = '<app_id>'
    $tenantId = '<tenant_id>'
    $authority = "https://login.microsoftonline.com/$tenantId/v2.0"
    $Scope = 'https://api.adu.microsoft.com/user_impersonation'
    
    Get-MsalToken -ClientId $clientId -TenantId $tenantId -Authority $authority -Scopes $Scope
    
  • 具有设备代码的用户凭据:

    $clientId = '<app_id>’
    $tenantId = '<tenant_id>’
    $authority = "https://login.microsoftonline.com/$tenantId/v2.0"
    $Scope = 'https://api.adu.microsoft.com/user_impersonation'
    
    Get-MsalToken -ClientId $clientId -TenantId $tenantId -Authority $authority -Scopes $Scope -Interactive -DeviceCode
    
  • 应用凭据:

    $clientId = '<app_id>’
    $tenantId = '<tenant_id>’
    $cert = '<client_certificate>'
    $authority = "https://login.microsoftonline.com/$tenantId/v2.0"
    $Scope = 'https://api.adu.microsoft.com/.default'
    
    Get-MsalToken -ClientId $clientId -TenantId $tenantId -Authority $authority -Scopes $Scope -ClientCertificate $cert
    

对托管标识的支持

托管标识为 Azure 服务提供安全、自动托管的 Microsoft Entra ID 标识。 托管标识无需开发人员通过提供标识来管理凭据。 Device Update 支持系统分配的托管标识。

若要为 Device Update 添加系统分配的托管标识,请执行以下作:

  1. 在 Azure 门户中,转到 Device Update 帐户。
  2. 在左侧导航中,选择“设置”>“标识”
  3. 在“标识”页上分配系统下,将“状态”设置为“打开”
  4. 依次选择“保存”和“确定”

若要为 IoT 中心添加系统分配的托管标识,请执行以下作:

  1. 在 Azure 门户中,转到 IoT 中心。
  2. 在左侧导航中,选择“安全设置”>“标识”
  3. 在“标识”页上分配系统下,选择“状态”下的“打开”
  4. 依次选择“保存”和“确定”

若要从 Device Update 帐户或 IoT 中心中删除系统分配的托管标识,请在“标识”页上设置或选择“关闭”,然后选择“保存”