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

如何提取带对应安全组及源信息的AWS EC2实例?

提取EC2实例、关联安全组及含(0.0.0.0/0)的源规则信息

方法一:使用AWS CLI结合Shell脚本

通过组合AWS CLI命令和Shell循环,可直接筛选出目标信息并按指定格式输出:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, SecurityGroups[*].GroupId]' --output text | while read -r instance_id sg_ids; do
  for sg_id in $sg_ids; do
    aws ec2 describe-security-groups --group-ids $sg_id --query "SecurityGroups[*].{GroupId:GroupId, Ingress:IpPermissions[?CidrIpv4=='0.0.0.0/0']}" --output text | while read -r sg_id rule; do
      if [ -n "$rule" ]; then
        echo "$instance_id | $sg_id | $rule"
      fi
    done
  done
done

命令说明:

  1. 调用describe-instances获取所有EC2实例ID及其关联的安全组ID列表
  2. 遍历每个安全组ID,调用describe-security-groups查询其入站规则
  3. 筛选出源CIDR为0.0.0.0/0的规则,最终按指定格式输出

方法二:使用Python脚本(基于boto3库)

如果需要更灵活的格式定制或后续处理,可使用Python脚本实现:

import boto3

# 初始化EC2客户端
ec2 = boto3.client('ec2')

# 打印表头
print("EC2实例 | 安全组 | 含(0.0.0.0/0)的源信息")
print("--- | --- | ---")

# 遍历所有EC2实例
for reservation in ec2.describe_instances()['Reservations']:
    for instance in reservation['Instances']:
        instance_id = instance['InstanceId']
        # 遍历实例关联的每个安全组
        for sg in instance['SecurityGroups']:
            sg_id = sg['GroupId']
            # 查询安全组详情
            sg_details = ec2.describe_security_groups(GroupIds=[sg_id])
            for sg_info in sg_details['SecurityGroups']:
                # 筛选出源为0.0.0.0/0的入站规则
                for permission in sg_info['IpPermissions']:
                    for cidr_range in permission.get('IpRanges', []):
                        if cidr_range['CidrIp'] == '0.0.0.0/0':
                            # 整理规则详情
                            protocol = permission['IpProtocol'] if permission['IpProtocol'] != '-1' else '所有协议'
                            port_info = f"{permission['FromPort']}-{permission['ToPort']}" if 'FromPort' in permission else '所有端口'
                            rule_desc = f"协议: {protocol}, 端口范围: {port_info}, 源CIDR: 0.0.0.0/0"
                            # 按指定格式输出
                            print(f"{instance_id} | {sg_id} | {rule_desc}")

脚本说明:

  • 需提前配置AWS凭证(可通过~/.aws/credentials文件、环境变量或IAM角色)
  • 自动遍历所有EC2实例及关联安全组,提取符合条件的规则并以更易读的格式展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:06:47