You need to enable JavaScript to run this app. 使用AWSPowerShell获取多/全区域AWS Security Groups的方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用AWSPowerShell获取多/全区域AWS Security Groups的方法咨询

跨区域拉取AWS安全组的实现方案

问题根因

AWSPowerShell 调用EC2相关接口时,默认会读取~/.aws/config文件中配置的默认区域值。如果调用Get-EC2SecurityGroup时没有手动指定目标区域参数,所有请求都会发往默认配置的单个区域的API端点,无法跨区域拉取资源。

实现逻辑

EC2类资源是区域级逻辑隔离的,完全可以通过显式传参的方式拉取指定多区域或全部区域的安全组,两种常用场景的实现方式:

  • 指定固定多区域拉取:预先定义需要拉取的区域列表,循环对每个区域单独调用一次拉取接口即可
  • 全区域拉取:通过Get-AWSRegion接口拉取当前账号下所有已开通的区域清单,再循环遍历拉取,不需要手动枚举区域列表,后续AWS新增可用区域时也不需要修改代码

现有脚本的问题修正

原脚本存在三处影响运行效果的问题:

  1. 调用接口时未传入区域参数,无法突破默认单区域的限制
  2. 安全组的入站规则是数组结构,单个安全组可能包含多条入站规则,原代码直接取值会导致规则内容截断,导出的记录不完整
  3. 构造结果对象时未补充所属区域字段,导出的数据无法区分来源区域

修正后可直接运行的代码

Import-Module AWSPowershell

# 定义目标拉取区域:指定区域模式直接写在数组里;全区域模式替换为 $targetRegions = Get-AWSRegion | Select-Object -ExpandProperty Region
$targetRegions = @("us-west-1", "us-west-2")
$ChangeList = @()

foreach ($currentRegion in $targetRegions) {
    # 显式指定区域,绕过默认配置的单区域限制
    $regionSecGroups = Get-EC2SecurityGroup -Region $currentRegion

    foreach ($secGroup in $regionSecGroups) {
        # 遍历单安全组下的所有入站规则
        foreach ($permission in $secGroup.IpPermission) {
            # 跳过非IPv4类的规则配置(比如安全组引用、IPv6规则)
            if ($null -eq $permission.Ipv4Ranges) { continue }
            # 遍历单条规则下的所有源IP段
            foreach ($ipv4Rule in $permission.Ipv4Ranges) {
                $NewObject = [PSCustomObject]@{
                    Region             = $currentRegion
                    RuleDescription    = $ipv4Rule.Description
                    GroupID            = $secGroup.GroupId
                    SecurityGroupName  = $secGroup.GroupName
                    SourceCIDR         = $ipv4Rule.CidrIp
                    FromPort           = $permission.FromPort
                    ToPort             = $permission.ToPort
                    Protocol           = $permission.IpProtocol
                }
                $ChangeList += $NewObject
            }
        }
    }
}

# 输出整理后的结果
$ChangeList | Format-Table -AutoSize

注意事项

  • 拉取全区域时,账号未开通的偏远区域会返回权限错误,可在区域循环内添加try-catch块捕获异常,自动跳过未开通的区域
  • 单区域内安全组数量较大时,可搭配-MaxResults参数做分页拉取,避免单次请求超时

内容的提问来源于stack exchange,提问作者dave-ng77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 09:15:09