使用VSTS服务主体调用Azure Graph时遇403 Authorization_RequestDenied错误
解决Get-AzureRmRoleAssignment调用时的Graph API请求错误
我之前碰到好几个用户遇到过一模一样的问题,这个错误的核心原因基本是你的服务主体缺少Azure Active Directory Graph的访问权限——因为Get-AzureRmRoleAssignment在获取角色分配信息时,会调用Graph API去解析相关的AD对象(比如用户、组、其他服务主体),如果没有对应的权限,就会触发这个请求失败的报错。
下面是具体的解决步骤:
给服务主体添加Azure AD Graph的应用权限
- 登录Azure门户,进入「Azure Active Directory」→「应用注册」,找到你的服务主体应用。
- 切换到「API权限」页面,点击「添加权限」→ 选择「Azure Active Directory Graph」(注意不是Microsoft Graph,老版本的AzureRM模块依赖的是这个)。
- 选择「应用权限」,然后找到「Directory」下的
Directory.Read.All权限并勾选,点击「添加权限」。 - 最后点击「授予管理员同意」(需要有Azure AD全局管理员权限),确保权限生效。
确保服务主体有订阅级的读取权限
除了Graph权限,你的服务主体还需要能读取订阅内的角色分配信息。最简单的方式是给它分配「读者」角色(在订阅的「访问控制(IAM)」页面添加角色分配,选择服务主体,角色选「读者」);如果需要更精细的权限,也可以创建自定义角色,包含Microsoft.Authorization/roleAssignments/read这个权限。验证权限是否生效
重新用服务主体登录Azure PowerShell,再执行命令测试:Connect-AzureRmAccount -ServicePrincipal -Tenant <你的租户ID> -ApplicationId <服务主体应用ID> -CertificateThumbprint <证书指纹> # 如果用密钥的话: # $securePassword = ConvertTo-SecureString "<服务主体密钥>" -AsPlainText -Force # Connect-AzureRmAccount -ServicePrincipal -Tenant <租户ID> -ApplicationId <应用ID> -Credential (New-Object System.Management.Automation.PSCredential("<应用ID>", $securePassword)) Get-AzureRmRoleAssignment
一般做完这几步,这个Graph API请求的错误就会消失了。
内容的提问来源于stack exchange,提问作者user9360564
相关产品推荐
相关产品推荐

