无法查看Azure应用注册已分配角色?求查看方法与排障步骤
问题背景
我通过以下命令创建Azure应用注册:
az ad sp create-for-rbac --name "my-app"
接着为其分配角色:
az role assignment create --assignee <APP_ID> --role "Reader" --scope /subscriptions/<SUBSCRIPTION_ID>
之后执行命令删除该角色:
az role assignment delete --assignee <APP_ID> --role "Reader" --scope /subscriptions/<SUBSCRIPTION_ID>
但尝试用以下三种方式列出该应用注册的已分配角色时,均无结果返回:
- 通过应用程序ID:
az role assignment list --assignee <APP_ID> - 通过对象ID:
az role assignment list --assignee <OBJECT_ID> - 通过应用名称:
az role assignment list --assignee "my-app"
已尝试操作
- 确认应用程序ID、对象ID和应用名称均正确,与应用注册详情一致。
问题
- 如何可靠查看我的应用注册已分配的角色?
- 是否有其他命令或排障步骤可用于调试此问题?
解决方案与排障步骤
一、可靠查看应用注册已分配角色的方法
1. 指定范围精准查询
默认az role assignment list仅查询当前订阅,若角色分配在其他订阅或资源组层级,需明确指定范围:
# 查询指定订阅下的所有角色分配 az role assignment list --assignee <OBJECT_ID> --subscription <SUBSCRIPTION_ID> # 查询指定资源组下的角色分配 az role assignment list --assignee <OBJECT_ID> --resource-group <RESOURCE_GROUP_NAME>
2. 借助Azure Portal直观查看
在Azure门户中操作:
- 进入Azure Active Directory → 企业应用程序 → 找到
my-app - 切换到权限选项卡,查看所有已分配的Azure RBAC角色和API权限
- 或进入目标订阅 → 访问控制(IAM) → 角色分配,通过应用名称/对象ID筛选结果
3. 包含间接继承的角色分配
若应用通过所属组间接获得角色,添加--all参数可返回所有继承的分配:
az role assignment list --assignee <OBJECT_ID> --all
二、排障步骤
1. 验证服务主体状态
确认服务主体未被禁用或删除:
az ad sp show --id <OBJECT_ID>
若返回结果中accountEnabled为false,执行以下命令启用:
az ad sp update --id <OBJECT_ID> --set accountEnabled=true
2. 跨订阅排查角色分配
若存在多订阅,可批量查询所有订阅的角色分配:
az account list --query "[].id" -o tsv | xargs -I {} az role assignment list --assignee <OBJECT_ID> --subscription {}
3. 检查当前CLI账号权限
确保登录账号拥有访问控制管理员或读者权限,否则无法查看全量角色分配:
# 查看当前登录账号 az account show --query "user.name" # 检查当前账号是否有访问控制权限 az role assignment list --assignee $(az account show --query "user.id" -o tsv) --role "Access Control Administrator"
4. 追踪角色分配变更历史
通过活动日志查看角色分配的删除/创建记录:
az monitor activity-log list --resource-group <RESOURCE_GROUP_NAME> --query "[?contains(operationName.value, 'Microsoft.Authorization/roleAssignments/')]" --output table
内容的提问来源于stack exchange,提问作者Hiten Samalia
相关产品推荐
相关产品推荐

