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

Get-AzRoleAssignment -SignInName无法返回用户资源级角色分配问题

解决Azure PowerShell无法获取资源层级角色分配的问题

问题根源

你遇到的情况通常是以下几个原因导致的:

  • 默认查询范围有限:Get-AzRoleAssignment未指定-Scope时,默认仅查询当前订阅层级及以上的分配,不会递归到资源(如KeyVault)层级。
  • 权限不足:执行脚本的账号没有在资源层级读取角色分配的权限(需要Microsoft.Authorization/roleAssignments/read权限)。
  • 混淆权限模型:如果用户的KeyVault权限是通过访问策略而非RBAC角色分配的,Get-AzRoleAssignment无法返回这类数据。

解决方案

1. 全层级查询直接/间接角色分配

使用-Scope "/"指定根范围,递归覆盖管理组、订阅、资源组、资源所有层级,同时用-ExpandPrincipalGroups获取通过组继承的间接权限:

# 替换为目标用户的ObjectId(比SignInName更准确)
$targetUserId = "xxxx-xxxx-xxxx-xxxx"

# 查询所有层级的角色分配并格式化输出
Get-AzRoleAssignment -ObjectId $targetUserId -ExpandPrincipalGroups -Scope "/" | 
    Select-Object DisplayName, SignInName, RoleDefinitionName, Scope, ObjectType

若需用邮箱查询:

$targetSignInName = "user@example.com"

Get-AzRoleAssignment -SignInName $targetSignInName -ExpandPrincipalGroups -Scope "/" | 
    Select-Object DisplayName, SignInName, RoleDefinitionName, Scope, ObjectType

2. 单独验证特定资源的分配

如果只想确认某类资源(如KeyVault)的分配,直接指定该资源的Scope:

$keyVaultScope = "/subscriptions/你的订阅ID/resourceGroups/资源组名/providers/Microsoft.KeyVault/vaults/你的密钥库名"

Get-AzRoleAssignment -SignInName "user@example.com" -Scope $keyVaultScope

3. 确保执行账号的权限

执行脚本的账号需要在目标层级(尤其是资源层级)拥有Reader或Role Based Access Control Administrator角色,否则无法读取对应层级的角色分配信息。

4. 区分KeyVault的两种权限模型

如果用户的权限是通过KeyVault访问策略设置的,需用专门命令查询:

Get-AzKeyVaultAccessPolicy -VaultName "你的密钥库名" -UserPrincipalName "user@example.com"

内容的提问来源于stack exchange,提问作者Mano K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:43:23