Azure RBAC自定义角色定义的生命周期、范围与存储机制问询
场景重现
创建名为some-custom-role的自定义角色,指定subscription_1和subscription_2为可分配范围后,执行以下Azure CLI命令:
az role definition list --name some-custom-role --subscription subscription_2 --query [].id -otsv
/subscriptions/subscription_2/providers/Microsoft.Authorization/roleDefinitions/b633f26b-3b4b-42ca-a0ed-501c354e4d23
az role definition list --name some-custom-role --subscription subscription_1 --query [].id -otsv
/subscriptions/subscription_1/providers/Microsoft.Authorization/roleDefinitions/b633f26b-3b4b-42ca-a0ed-501c354e4d23
针对上述结果,以下是核心疑问的解答:
核心疑问解答
是否存在“主”角色定义和副本?
不存在主副本之分。你看到的两个不同ID条目,是同一个角色定义在不同订阅范围下的视图。角色的唯一标识是末尾的roleDefinitionId(b633f26b-3b4b-42ca-a0ed-501c354e4d23),前面的订阅ID仅表示该角色被应用的范围。修改任意订阅下的角色定义,本质是修改共享的底层实体,因此其他订阅下的视图会同步更新。删除单个订阅,角色定义会消失吗?
不会。删除subscription_1后,subscription_2下的角色定义仍会保留——只要还有至少一个订阅属于该角色的可分配范围,角色定义就不会被删除。删除两个订阅,角色定义会消失吗?
会。当所有关联的订阅都被删除后,角色定义失去了所有可分配范围,会被自动清理。删除单个订阅中的角色定义,另一个会消失吗?
这取决于剩余的可分配范围:执行删除单个订阅下的角色定义操作,本质是将该订阅从角色的可分配范围中移除。如果移除后还有其他订阅(比如subscription_2)在范围内,角色定义会保留并仅在剩余订阅可见;如果没有其他订阅,则角色定义会被删除。是否存在源对象存储在Entra或其他位置?
自定义角色定义存储在Azure资源管理器(ARM)的权限系统中,而非Entra ID。所有共享同一个roleDefinitionId的条目指向同一个底层实体,ARM通过跨范围同步机制确保各订阅视图的一致性,不存在单独的集中存储源对象。
内容的提问来源于stack exchange,提问作者Magnus

