如何通过Azure管理API查询仅可在Resource范围分配的角色定义
根因说明
你使用的 2018-01-01-preview 版本的Azure管理API不支持 atScopeAndBelow() 过滤参数,这是触发400错误的核心原因。该过滤能力是后续正式版API新增的特性,旧预览版仅支持按角色名称、角色类型两类基础过滤。
解决方案1:升级API版本使用服务端过滤
直接将请求的API版本替换为 2022-04-01 及以上正式版本,同时添加$filter=atScopeAndBelow()参数即可,请求示例如下:
GET https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Compute/virtualMachines/<virtualMachineName>/providers/Microsoft.Authorization/roleDefinitions?$filter=atScopeAndBelow()&api-version=2022-04-01
调用该接口会直接返回仅可在当前资源层级分配的角色定义,和Azure门户显示的可选角色列表完全一致,不会出现AcrPull这类不适用于虚拟机的角色。
解决方案2:低版本API兼容方案
如果你的业务场景无法升级API版本,可以在拿到全量返回结果后,根据角色定义的assignableScopes字段做本地过滤,保留满足以下任一条件的角色即可:
assignableScopes包含当前查询资源的完整资源IDassignableScopes包含当前资源所属的资源组IDassignableScopes包含当前资源所属的订阅IDassignableScopes包含租户根作用域/
内容的提问来源于stack exchange,提问作者Amit Gupta
相关产品推荐
相关产品推荐

