You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Azure DevOps服务主体权限,为Bicep创建的容器应用授予应用角色

问题解决:托管身份分配自定义应用角色的权限配置与优化方案

一、服务主体所需权限配置

你遇到的Authorization_RequestDenied错误,核心原因是运行脚本的Azure DevOps服务主体缺少Microsoft Graph的必要操作权限。要完成给托管身份分配自定义应用角色的操作,需为该服务主体配置以下权限:

  • 权限类型:Application权限(非Delegated权限)
  • 具体权限:AppRoleAssignment.ReadWrite.All
  • 关键要求:必须由Azure AD全局管理员或特权角色管理员完成管理员同意

配置步骤:

  1. 登录Azure门户,进入Azure Active Directory → 应用注册,定位到你的DevOps服务主体。
  2. 切换到「API权限」页面,点击「添加权限」→ 选择「Microsoft Graph」。
  3. 选择「应用权限」,搜索并勾选AppRoleAssignment.ReadWrite.All,点击「添加权限」。
  4. 在权限列表中,点击「授予管理员同意」,确认权限生效。

注:如果你的场景仅需针对特定应用分配角色,也可使用更细粒度的AppRoleAssignment.ReadWrite.OwnedBy权限,但前提是DevOps服务主体是ExternalAPIProxy应用的所有者。

二、更优实现方式

1. 替换az rest为专用CLI命令

你当前使用的az rest可替换为Azure AD专用CLI命令,更易维护且降低语法错误概率:

az ad app role assignment create \
  --assignee $managedIdentity \
  --resource $externalApiProxyId \
  --role <自定义角色的ID>

注意:必须指定自定义角色的ID(非角色名称),可通过az ad sp app role list --id $externalApiProxyId命令获取目标角色ID。

2. 在Bicep中集成部署脚本

将权限分配逻辑嵌入Bicep的deploymentScript资源,实现基础设施即代码的闭环管理:

resource assignCustomAppRole 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'AssignCustomAppRoleToManagedIdentity'
  location: resourceGroup().location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.57.0'
    scriptContent: '''
      az ad app role assignment create \
        --assignee ${managedIdentityId} \
        --resource ${externalApiProxyId} \
        --role ${customRoleId}
    '''
    cleanupPreference: 'OnSuccess'
    timeout: 'PT5M'
  }
}

此方式需确保Bicep部署使用的身份(即DevOps服务主体)已配置好上述Graph权限。

3. 修正请求体完整性

你当前的az rest请求体缺少appRoleId参数——这是分配自定义角色的必填字段(默认角色可省略,但自定义角色必须指定)。正确的请求体格式如下:

{
  "principalId": "$managedIdentity",
  "resourceId": "$externalApiProxyId",
  "appRoleId": "<自定义角色的ID>"
}

内容的提问来源于stack exchange,提问作者Joachim Løvf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:43:14