如何通过Microsoft Graph获取Azure用户列表及指定订阅管理员用户?
嘿,我来帮你捋清楚怎么用Microsoft Graph实现这两个需求——获取AD用户列表+邮箱,以及指定Azure订阅的管理员。这俩需求都能通过Graph API搞定,我给你拆解成具体步骤和实操示例:
这部分是Graph的基础操作,核心是调用用户列表API并筛选需要的字段。
1. 权限准备
你需要先获取对应的API权限(Delegated或Application权限都可以,取决于你的应用场景):
- 若要读取所有用户:
User.Read.All或Directory.Read.All - 如果你只需要读取已登录用户能访问的用户:
User.ReadBasic.All
2. API请求示例
用Graph Explorer或者直接发HTTP请求都可以,这里给你最简洁的请求,只返回你需要的字段:
GET https://graph.microsoft.com/v1.0/users?$select=displayName,mail,userPrincipalName
$select参数用来指定返回的字段,避免返回冗余数据,这里选了显示名称、邮箱、用户主体名,你可以按需添加其他字段(比如id、department等)。
3. PowerShell代码示例(用Microsoft Graph模块)
如果你习惯用PowerShell,安装Microsoft.Graph.Users模块后可以这么写:
# 连接Graph,按需选择权限 Connect-MgGraph -Scopes "User.Read.All" # 获取用户列表并导出到CSV(可选) Get-MgUser -Property displayName,mail,userPrincipalName | Select-Object displayName,mail,userPrincipalName | Export-Csv -Path "ADUsers.csv" -NoTypeInformation
这里要注意:Azure订阅的管理员分两种——RBAC角色管理员(比如Owner、Contributor,现在的主流模型)和经典管理员(比如服务管理员、共同管理员,旧模型),我分别给你讲怎么获取:
1. 获取RBAC角色管理员(推荐)
这类管理员是通过Azure RBAC分配的角色,比如Owner、Reader等,需要调用Graph的Azure资源角色分配API。
权限准备
需要RoleManagement.Read.All权限(Delegated或Application),如果要修改的话需要RoleManagement.ReadWrite.Directory,但你只需要读取的话前者足够。
API请求示例
替换{subscriptionId}为你的订阅ID,请求会返回该订阅下所有角色分配,并关联到用户和角色定义:
GET https://graph.microsoft.com/v1.0/roleManagement/azureResources/roleAssignments?$filter=scope eq '/subscriptions/{subscriptionId}' and principalType eq 'User'&$expand=principal,roleDefinition
$filter=principalType eq 'User'用来过滤只返回用户(排除组和服务主体),如果需要包含其他主体可以去掉这个条件。$expand用来展开关联的用户信息和角色定义,方便你直接看到用户详情和角色名称。
PowerShell代码示例
Connect-MgGraph -Scopes "RoleManagement.Read.All" $subscriptionId = "你的订阅ID" $roleAssignments = Get-MgRoleManagementAzureResourceRoleAssignment -Filter "scope eq '/subscriptions/$subscriptionId' and principalType eq 'User'" -ExpandProperty Principal,RoleDefinition # 整理输出需要的信息 $roleAssignments | ForEach-Object { [PSCustomObject]@{ UserName = $_.Principal.DisplayName UserEmail = $_.Principal.Mail RoleName = $_.RoleDefinition.DisplayName UserPrincipalName = $_.Principal.UserPrincipalName } } | Export-Csv -Path "SubscriptionAdmins.csv" -NoTypeInformation
2. 获取经典管理员(旧模型)
如果你的订阅还在使用经典管理员模型,可以用这个API:
GET https://graph.microsoft.com/v1.0/subscriptions/{subscriptionId}/administrators
权限需要Subscription.Read.All,返回的结果包含服务管理员、共同管理员等经典角色的用户信息。
- 可以先在Graph Explorer里测试这些API,它会帮你自动处理权限申请和请求格式,非常方便。
- 如果是应用程序权限(比如后台服务调用),需要在Azure AD里注册应用并授予对应的应用权限,然后用客户端凭证方式获取Token调用API。
内容的提问来源于stack exchange,提问作者John von No Man

