求导出多订阅下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
相关产品推荐
相关产品推荐

