You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无权限的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:48:11