导出Azure/Defender/订阅/Exchange角色成员,寻求Azure/M365权限对比方案
对比Azure/M365用户角色权限的实操方案
针对你要对比Azure、Exchange Online(EOL)、Defender及订阅/租户级用户权限的需求,给你一套分步落地的方案:
一、先明确覆盖范围
别漏了这三个核心层级:
- 租户级:Azure AD、M365租户根权限
- 服务级:Exchange Online、Defender各模块、Azure资源服务专属权限
- 订阅级:Azure订阅内的RBAC权限
二、各模块权限采集方法
1. Azure AD & M365 租户/服务角色
用PowerShell批量导出所有用户的角色分配,方便后续对比:
# 导出Azure AD所有用户的角色(含自定义角色) Get-AzureADUser | ForEach-Object { $user = $_ Get-AzureADUserMembership -ObjectId $user.ObjectId | Where-Object {$_.ObjectType -eq "Role"} | Select-Object DisplayName, RoleTemplateId, @{Name="UserName"; Expression={$user.UserPrincipalName}} } | Export-Csv -Path "AzureAD_Roles.csv" -NoTypeInformation # 导出M365服务角色(比如Exchange、SharePoint管理员) Get-MsolUser | ForEach-Object { $user = $_ Get-MsolUserRole -UserPrincipalName $user.UserPrincipalName | Select-Object RoleName, @{Name="UserName"; Expression={$user.UserPrincipalName}} } | Export-Csv -Path "M365_Service_Roles.csv" -NoTypeInformation
重点盯:全局管理员、Exchange管理员、Security管理员这类跨服务高权限角色,以及自定义角色的权限范围。
2. Exchange Online(EOL)权限
除了M365的角色,还要单独抓邮箱级、组织级的细粒度权限:
# 导出用户对其他邮箱的权限 Get-EXOMailboxPermission -ResultSize Unlimited | Where-Object {$_.IsInherited -eq $false -and $_.User -notlike "*NT AUTHORITY\SELF*"} | Select-Object Identity, User, AccessRights # 导出Exchange管理角色分配 Get-ManagementRoleAssignment -ResultSize Unlimited | Where-Object {$_.AssigneeType -eq "User"} | Select-Object AssigneeName, RoleName, ScopeName
对比维度:组织管理、收件人管理这类核心角色,以及用户对他人邮箱的读写/完全访问权限。
3. Microsoft Defender权限
覆盖Defender for Cloud、Defender for Office 365等模块的角色:
# 导出Defender for Cloud RBAC角色 Get-AzRoleAssignment | Where-Object {$_.RoleDefinitionName -match "Defender|Security"} | Select-Object SignInName, RoleDefinitionName, Scope # 导出Defender for Office 365角色组成员 Get-RoleGroupMember -Identity "Security Reader" | Select-Object Name, PrimarySmtpAddress Get-RoleGroupMember -Identity "Security Administrator" | Select-Object Name, PrimarySmtpAddress
注意区分:Security Reader(只读)、Security Administrator(全管理)、Defender for Cloud Contributor这类角色的权限边界。
4. Azure订阅级RBAC权限
跨所有订阅批量采集用户权限:
Get-AzSubscription | ForEach-Object { Select-AzSubscription -SubscriptionId $_.SubscriptionId Get-AzRoleAssignment | Where-Object {$_.SignInName -ne $null} | Select-Object SignInName, RoleDefinitionName, Scope, @{Name="Subscription"; Expression={$_.Name}} } | Export-Csv -Path "Azure_Subscription_Roles.csv" -NoTypeInformation
对比维度:订阅所有者、参与者、读者,以及自定义RBAC角色的权限范围。
三、对比分析实操步骤
- 把所有CSV文件导入Excel或Power BI,按用户的UserPrincipalName分组,汇总每个用户的所有角色和权限。
- 标记跨模块的重叠权限(比如全局管理员默认拥有Exchange、Defender的最高权限)。
- 排查权限过度分配(比如普通用户被误加为Security Administrator)。
- 补全PIM相关权限:用
Get-AzureADMSPrivilegedRoleAssignment导出用户可激活的临时权限,这部分也是权限范围的关键。
四、遗漏点排查
- 别漏了服务细粒度权限:比如Exchange的邮箱发送权限、Defender的威胁狩猎权限、Azure资源组级自定义权限。
- 检查来宾用户的权限:用
Get-AzureADGuestUser配合角色采集命令,避免外部用户权限被忽略。 - 确认PIM激活历史:查看用户临时提权的记录,这部分也是实际权限的一部分。
内容的提问来源于stack exchange,提问作者DuhMan
相关产品推荐
相关产品推荐

