如何解决Microsoft Azure授权错误?获取可用VM列表遇权限失败
这是典型的Azure RBAC(基于角色的访问控制)权限缺失问题,咱们一步步来搞定它:
先理解错误本质
你的错误信息已经说得很明确了:
{'error': {'code': 'AuthorizationFailed', 'message': "The client 'X' with object id 'X' does not have authorization to perform action 'Microsoft.Compute/locations/vmSizes/read' over scope '/subscriptions/Y'."}}
简单说:你用的身份(对象ID为X的用户/服务主体),没有在订阅Y上执行Microsoft.Compute/locations/vmSizes/read这个动作的权限——这个动作就是读取指定区域内可用VM大小的权限。
具体解决步骤
1. 选对合适的内置角色
这个读取VM大小的权限,已经包含在几个Azure内置角色里,推荐按最小权限原则选择:
Compute Reader:仅能读取计算相关资源(包括VM大小、虚拟机、磁盘等),权限最贴合需求Reader:能读取订阅下所有资源,权限范围更大,适合需要查看多种资源的场景Virtual Machine Contributor:除了读取,还能管理虚拟机,如果你后续需要操作VM,也可以选这个
2. 给身份分配角色权限
登录Azure门户,按以下步骤操作:
- 找到目标订阅Y,进入订阅详情页
- 点击左侧菜单的「访问控制(IAM)」
- 点击页面顶部的「添加」→「添加角色分配」
- 在「角色」标签页,搜索并选中你刚才选的角色(比如
Compute Reader) - 切换到「成员」标签页,点击「选择成员」,搜索对象IDX对应的用户/服务主体,选中后添加
- 确认信息无误,点击「查看 + 分配」完成操作
3. 等待权限生效
Azure RBAC权限一般在5-10分钟内就会生效,偶尔可能需要15-30分钟,别刚分配完就立刻重试,给系统一点同步时间。
4. 验证权限(可选)
如果想确认权限是否已经生效,可以用Azure CLI或者PowerShell验证:
- Azure CLI命令:
az role assignment list --assignee <你的对象ID X> --subscription <订阅Y的ID> --all - Azure PowerShell命令:
Get-AzRoleAssignment -ObjectId "<你的对象ID X>" -Scope "/subscriptions/<订阅Y的ID>"
执行后能看到你刚分配的角色,就说明权限已经到位了。
额外注意事项
- 如果你用的是服务主体,要确认它没有被限制在其他订阅或资源组,确保是在订阅Y的范围内分配的权限
- 尽量遵循最小权限原则,不要给
Owner或Contributor这种过大的角色,避免不必要的安全风险
内容的提问来源于stack exchange,提问作者Ernst
相关产品推荐
相关产品推荐

