为何无权限的Azure应用仍可读取RBAC角色定义?
问题描述
微软指出读取RBAC角色定义需要Microsoft.Authorization/roleDefinitions/read权限,但我有一个Azure应用,仅被分配了无任何权限的自定义角色(角色定义如下),且未在订阅S1及其他订阅中分配其他角色,Azure的「检查访问权限」也确认了这一点。然而使用该应用登录Azure CLI后,却能正常列出角色定义(如Contributor角色)。
空角色定义:
{ "assignableScopes": [ "/subscriptions/<S1 ID>" ], "description": "No Permissions role", "id": "/subscriptions/<S1 ID>/providers/Microsoft.Authorization/roleDefinitions/<role ID>", "name": "<role ID>", "permissions": [ { "actions": [], "dataActions": [], "notActions": [], "notDataActions": [] } ], "roleName": "No Permissions Role", "roleType": "CustomRole", "type": "Microsoft.Authorization/roleDefinitions" }
使用的Azure CLI登录命令:az login --service-principal -u <app ID> -p <client secret> --tenant <tenant ID>
执行命令az role definition list --name "Contributor"可正常返回Contributor角色信息。
请问这种情况为何会发生?
原因分析
- 租户级默认权限导致:Azure中所有服务主体(包括你的应用)默认在租户范围内拥有
Microsoft.Authorization/roleDefinitions/read权限,无需显式分配。这是RBAC的默认设计,允许租户内主体查看所有内置和自定义角色的定义信息,不受订阅级权限限制。 - 命令查询范围默认是租户级:你执行的
az role definition list命令未指定--subscription参数时,默认查询的是租户范围内的角色定义,因此能正常返回结果。 - 「检查访问权限」的局限性:该工具默认检查的是订阅级别的权限,不会展示租户级的默认权限,所以你看到的结果显示无权限,但实际租户级的默认权限已允许读取角色定义。
若要验证,可尝试指定订阅范围执行命令:az role definition list --name "Contributor" --subscription <S1 ID>,此时会返回权限不足的错误,因为你的应用在该订阅下确实无相关权限。
内容的提问来源于stack exchange,提问作者Petr Havlicek
相关产品推荐
相关产品推荐

