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

求导出多订阅下Gen2存储账户所有容器ACL权限的PowerShell脚本

导出Azure Gen2存储账户容器ACL权限的PowerShell方案

可用的PowerShell脚本

以下脚本可遍历所有订阅下的Gen2存储账户,将所有容器的ACL权限导出至CSV文件:

# 安装并导入Az存储模块(未安装则自动安装)
if (-not (Get-Module -ListAvailable -Name Az.Storage)) {
    Install-Module -Name Az.Storage -Force -AllowClobber
}
Import-Module Az.Storage

# 登录Azure账户
Connect-AzAccount

# 定义导出文件路径,可自行修改
$outputPath = "C:\Temp\ContainerACLs.csv"

# 初始化结果存储数组
$aclResults = @()

# 遍历所有订阅
foreach ($subscription in Get-AzSubscription) {
    Write-Host "处理订阅: $($subscription.Name) ($($subscription.Id))"
    Set-AzContext -Subscription $subscription.Id | Out-Null

    # 遍历当前订阅下的所有资源组
    foreach ($resourceGroup in Get-AzResourceGroup) {
        Write-Host "  处理资源组: $($resourceGroup.ResourceGroupName)"

        # 筛选当前资源组内的Gen2存储账户(Kind为StorageV2)
        $storageAccounts = Get-AzStorageAccount -ResourceGroupName $resourceGroup.ResourceGroupName | Where-Object { $_.Kind -eq "StorageV2" }

        foreach ($storageAccount in $storageAccounts) {
            Write-Host "    处理存储账户: $($storageAccount.StorageAccountName)"
            $storageCtx = $storageAccount.Context

            # 获取该存储账户下的所有容器
            $containers = Get-AzStorageContainer -Context $storageCtx

            foreach ($container in $containers) {
                Write-Host "      获取容器: $($container.Name) 的ACL权限"
                
                # 获取容器的共享访问策略ACL
                $sharedPolicies = Get-AzStorageContainerAcl -Context $storageCtx -Name $container.Name
                foreach ($policy in $sharedPolicies.SharedAccessPolicies) {
                    $aclResults += [PSCustomObject]@{
                        订阅ID = $subscription.Id
                        订阅名称 = $subscription.Name
                        资源组名称 = $resourceGroup.ResourceGroupName
                        存储账户名称 = $storageAccount.StorageAccountName
                        容器名称 = $container.Name
                        权限标识 = $policy.Id
                        权限内容 = $policy.Permission
                        生效起始时间 = $policy.StartTime
                        到期时间 = $policy.ExpiryTime
                        权限类型 = "共享访问策略"
                    }
                }

                # 获取容器的存储访问策略ACL
                $storedPolicies = Get-AzStorageContainerStoredAccessPolicy -Context $storageCtx -Name $container.Name
                if ($storedPolicies) {
                    foreach ($policy in $storedPolicies) {
                        $aclResults += [PSCustomObject]@{
                            订阅ID = $subscription.Id
                            订阅名称 = $subscription.Name
                            资源组名称 = $resourceGroup.ResourceGroupName
                            存储账户名称 = $storageAccount.StorageAccountName
                            容器名称 = $container.Name
                            权限标识 = $policy.Id
                            权限内容 = $policy.Permission
                            生效起始时间 = $policy.StartTime
                            到期时间 = $policy.ExpiryTime
                            权限类型 = "存储访问策略"
                        }
                    }
                }
            }
        }
    }
}

# 将结果导出为CSV文件
$aclResults | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8
Write-Host "ACL权限已成功导出至: $outputPath"

实用建议与注意事项

  • 权限要求:执行脚本的账户需拥有目标订阅的Reader角色,以及存储账户的Storage Blob Data Reader角色,才能正常读取容器ACL信息。
  • 批量处理优化:若订阅或资源组数量过多,可在脚本中添加过滤条件,例如通过Get-AzSubscription -SubscriptionId "指定订阅ID"或Get-AzResourceGroup -Name "指定资源组名称"缩小处理范围;也可使用Start-Job实现并行处理,提升效率。
  • 结果分析:导出的CSV文件可通过Excel、PowerBI等工具打开,利用筛选、透视表功能快速梳理权限分布,排查过度授权或过期权限。
  • 错误处理:可在脚本中添加try-catch块,捕获存储账户访问失败等异常,避免脚本中断,同时将错误信息记录至日志文件。

内容的提问来源于stack exchange,提问作者user1628

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:40:10