如何获取Azure AD服务主体拥有的Azure对象及权限列表?
问题说明
我们需要获取Azure租户内指定Azure Active Directory服务主体(AADSP)拥有的所有Azure对象权限,比如该服务主体可能拥有SharePoint Online网站集的读写权限、Azure Function的API权限、SQL数据库的查询权限等。尝试通过Microsoft Graph的https://graph.microsoft.com/v1.0/servicePrincipals接口查询,但未找到存储这类权限的集合,想确认是否只能通过遍历所有Azure对象并核查每个对象的权限来确认该服务主体的授权情况?
解决方案
并非只能通过遍历所有对象来查询,可根据资源类型选择更高效的方案:
用Azure Resource Graph查询ARM资源RBAC权限
针对大部分Azure ARM管理的资源(如VM、Function App、SQL Server等),可以通过Azure Resource Graph批量查询包含目标服务主体的角色分配。示例查询语句:resources | where type == 'Microsoft.Authorization/roleAssignments' | extend principalId = properties.principalId | where principalId == '<目标服务主体ID>' | project resourceId, 角色名称=properties.roleDefinitionName, 主体名称=properties.principalName该方式能快速覆盖ARM体系下的资源权限,无需逐个资源核查。
针对Microsoft 365服务单独查询
SharePoint Online、Exchange Online等非ARM资源的权限存储在各自服务目录中,需用对应工具查询:- SharePoint Online:使用
Get-SPOUserPowerShell命令,或Graph API的/sites/{site-id}/permissions接口筛选目标服务主体的权限; - Exchange Online:通过
Get-EXOMailboxPermission等命令查询相关权限;
这类服务需单独适配查询方式,无法通过统一接口批量获取。
- SharePoint Online:使用
查询服务主体的API权限(Graph API)
如果需要获取服务主体被授予的应用权限/委派权限(如调用Microsoft Graph的权限),可通过以下Graph接口:- 应用权限:
https://graph.microsoft.com/v1.0/servicePrincipals/{sp-id}/appRoleAssignments - 委派权限:
https://graph.microsoft.com/v1.0/servicePrincipals/{sp-id}/oauth2PermissionGrants
这类权限属于API调用范畴,和资源对象的权限是不同维度。
- 应用权限:
遍历对象的适用场景
仅当需要覆盖所有小众服务或自定义资源时,才需考虑分类型批量遍历查询,而非盲目遍历所有资源。
总结
没有唯一的解决方案,通过结合Azure Resource Graph、各服务专用API/PowerShell模块、Graph权限接口,即可高效收集目标服务主体的所有权限,无需完全遍历所有Azure对象。
内容的提问来源于stack exchange,提问作者Barry MSIH

