Azure AD应用注册执行角色分配脚本一成功一失败求助
问题分析与解决方案
核心问题
失败的根源是应用注册2通过az ad sp list --display-name $MANAGED_ID_DISPLAY_NAME无法获取到托管标识的Object ID,导致后续角色分配时传入了无效的Principal ID,触发InvalidPrincipalId错误。
排查与修复步骤
1. 补充Azure AD Graph权限
az ad sp list命令依赖Azure AD Graph的Directory.Read.All(Application类型权限),你的两个应用注册当前配置的权限中缺少该权限。应用注册1可能因隐式权限继承能正常执行,但应用注册2无此权限导致读取失败。
- 给应用注册2添加
Directory.Read.All应用权限,并完成管理员同意。
2. 替换更可靠的Object ID获取方式
托管标识属于Azure资源,使用资源层面的命令az identity show替代az ad sp list,无需额外Azure AD权限,仅需订阅/资源组的读取权限即可:
# 替换原有的$objectid获取行 $objectid=$(az identity show --name $MANAGED_ID_DISPLAY_NAME --resource-group $currentEnv.AZ_RESOURCE_GROUP_NAME --query objectId --output tsv)
该命令直接从Azure资源管理器读取托管标识的Object ID,比通过Azure AD服务主体列表查询更精准,也规避了Azure AD权限限制。
3. 验证权限生效状态
- 确认应用注册2的所有已添加权限都完成了管理员同意(权限列表显示"已授予"状态)。
- 手动执行
az identity list --resource-group $currentEnv.AZ_RESOURCE_GROUP_NAME,验证应用注册2能正常读取资源组内的托管标识列表。
4. 检查托管标识命名准确性
确认$MANAGED_ID_DISPLAY_NAME拼接的名称与实际托管标识的显示名称完全一致,避免因大小写、后缀差异导致查询失败。
内容的提问来源于stack exchange,提问作者dot
相关产品推荐
相关产品推荐

