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

如何获取Azure租户订阅/资源组IAM角色分配并导出至单CSV?

导出Azure租户全订阅+资源组IAM角色分配至单个CSV并排查直接授权用户

针对你的需求,我调整了PowerShell脚本,实现一次性导出租户下所有订阅及资源组的IAM角色分配到单个CSV文件,同时方便后续排查未通过组获取权限的用户:

# 连接Azure账号
Connect-AzAccount

# 初始化空数组存储所有角色分配
$allRoleAssignments = @()

# 获取租户下所有订阅
$subscriptions = Get-AzSubscription

foreach ($subscription in $subscriptions) {
    # 切换到当前订阅上下文
    Set-AzContext -SubscriptionId $subscription.Id | Out-Null

    # --------------------------
    # 收集订阅级别的角色分配
    # --------------------------
    $subRoleAssignments = Get-AzRoleAssignment -Scope "/subscriptions/$($subscription.Id)"
    foreach ($assignment in $subRoleAssignments) {
        $allRoleAssignments += [PSCustomObject]@{
            ScopeType           = "订阅"
            ScopeName           = $subscription.Name
            SubscriptionId      = $subscription.Id
            ResourceGroupName   = $null
            RoleDefinitionName  = $assignment.RoleDefinitionName
            ObjectType          = $assignment.ObjectType
            ObjectId            = $assignment.ObjectId
            DisplayName         = $assignment.DisplayName
            SignInName          = $assignment.SignInName
            Scope               = $assignment.Scope
        }
    }

    # --------------------------
    # 收集资源组级别的角色分配
    # --------------------------
    $resourceGroups = Get-AzResourceGroup
    foreach ($rg in $resourceGroups) {
        $rgRoleAssignments = Get-AzRoleAssignment -Scope $rg.ResourceId
        foreach ($assignment in $rgRoleAssignments) {
            $allRoleAssignments += [PSCustomObject]@{
                ScopeType           = "资源组"
                ScopeName           = $rg.ResourceGroupName
                SubscriptionId      = $subscription.Id
                ResourceGroupName   = $rg.ResourceGroupName
                RoleDefinitionName  = $assignment.RoleDefinitionName
                ObjectType          = $assignment.ObjectType
                ObjectId            = $assignment.ObjectId
                DisplayName         = $assignment.DisplayName
                SignInName          = $assignment.SignInName
                Scope               = $assignment.Scope
            }
        }
    }
}

# 导出所有角色分配到单个CSV文件
$outputPath = "C:\path\to\your\folder\AllRoleAssignments.csv"
$allRoleAssignments | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8

Write-Host "导出完成,文件路径:$outputPath"

关键说明:

  • 层级区分:新增ScopeType和ScopeName字段,明确标记权限分配的层级(订阅/资源组),方便后续定位排查
  • 合并导出:所有订阅和资源组的角色分配统一收集到数组,最终导出为单个CSV,省去手动合并的步骤
  • 编码优化:添加-Encoding UTF8参数,避免中文内容显示乱码

排查未通过组授权的用户:

打开导出的CSV文件,筛选ObjectType列为User的行,这些就是直接被分配角色的用户(而非通过组继承权限),可重点检查这类条目是否符合权限管控规范。

内容的提问来源于stack exchange,提问作者Jandre vd Merwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:42:38