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

通过PowerShell读取Azure全局管理员遇403权限不足问题

解决Azure服务主体读取全局管理员权限不足问题

核心问题分析

读取Azure AD目录角色(如全局管理员)属于Microsoft Graph目录权限范畴,和Azure资源(VM等)的Reader角色是完全独立的权限体系。你之前配置的Reader角色仅对Azure资源有效,而Directory.Read.All应用权限虽正确,但需确认几个关键配置环节。

分步解决步骤

1. 确认权限类型与管理员同意状态

确保服务主体拥有Microsoft Graph的Directory.Read.All应用权限(非委托权限),且已完成管理员同意:

  • 登录Azure门户 → Azure Active Directory → 应用注册 → 找到目标服务主体 → 权限 → 查看Microsoft Graph权限
  • 确认Directory.Read.All为应用权限,且状态显示“已授予管理员同意”
  • 若未同意,点击“授予管理员同意”(需全局管理员权限操作)

2. 修正Connect-MgGraph的权限范围

服务主体连接Microsoft Graph时,必须指定应用权限专属范围,否则无法正确加载权限:

Connect-MgGraph -ClientId $applicationID -TenantId $tenantID -CertificateThumbprint $certThumbPrint -Scopes "https://graph.microsoft.com/.default"

/.default范围会自动调用该服务主体已配置的所有应用权限,确保权限生效。

3. 验证上下文权限加载

执行Get-MgContext后,检查Scopes字段是否包含https://graph.microsoft.com/.default,确认权限已正确加载。

4. 优化角色读取代码(可选)

全局管理员的内置角色ID固定,可直接用ID查询避免Filter匹配问题,同时直接获取成员显示名:

$globalAdminRoleId = "62e90394-69f5-4237-9190-012177145e10" # 全局管理员内置角色ID
$roleMembers = Get-MgDirectoryRoleMember -DirectoryRoleId $globalAdminRoleId -Property displayName,id

$roleMembers | Select-Object @{Name="DisplayName"; Expression={$_.DisplayName}}, Id | Format-Table

5. 排查权限冲突

  • 确认服务主体未被限制权限的条件访问策略影响
  • 检查应用注册中是否遗漏必要权限(读取角色成员仅需Directory.Read.All,若需用户详情可额外添加User.Read.All)

常见误区提醒

  • 混淆Azure资源权限与Microsoft Graph权限:两者完全独立,VM读取依赖Azure资源权限,AD角色读取依赖Graph权限
  • 仅添加权限未完成管理员同意:应用权限必须由全局管理员手动同意,仅添加不生效
  • 连接Graph时未指定正确范围:服务主体必须使用/.default范围调用应用权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:52:38