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

如何使用boto3获取AWS安全组规则的Description并筛选无描述规则的安全组

解决方法

boto3可以直接通过安全组规则查询接口获取规则的描述字段,你可以按以下步骤实现筛选逻辑:

  • 首先初始化AWS EC2客户端,确保你的凭证拥有ec2:DescribeSecurityGroups和ec2:DescribeSecurityGroupRules权限
  • 调用describe_security_group_rules接口拉取所有安全组规则,判断每条规则是否存在Description字段、且字段值非空
  • 收集所有包含无描述规则的安全组ID,可进一步关联查询安全组绑定的EC2实例信息

示例代码

import boto3

# 初始化EC2客户端,替换为你实际使用的区域
ec2 = boto3.client('ec2', region_name='cn-north-1')

# 拉取所有安全组规则
sg_rules_resp = ec2.describe_security_group_rules()

# 存储包含无描述规则的安全组ID(自动去重)
bad_sg_ids = set()

for rule in sg_rules_resp['SecurityGroupRules']:
    # 判断规则是否未填写描述
    if 'Description' not in rule or not rule['Description'].strip():
        bad_sg_ids.add(rule['GroupId'])

# 输出符合条件的安全组
print("包含无描述规则的安全组ID列表:")
for sg_id in bad_sg_ids:
    print(sg_id)

# 如需进一步查询绑定了这些安全组的EC2实例,可添加以下逻辑
if bad_sg_ids:
    instances_resp = ec2.describe_instances(
        Filters=[
            {
                'Name': 'instance.group-id',
                'Values': list(bad_sg_ids)
            }
        ]
    )
    bind_instances = []
    for reservation in instances_resp['Reservations']:
        bind_instances.extend(reservation['Instances'])
    print("\n绑定上述安全组的EC2实例ID列表:")
    for ins in bind_instances:
        print(ins['InstanceId'])

如果你使用老版本boto3走describe_security_groups接口查询,规则描述字段会散落在IpPermissions下每个权限条目的IpRanges、Ipv6Ranges、UserIdGroupPairs子字段中,每个IP段/对端安全组对应单独的描述,遍历逻辑更繁琐,推荐优先用describe_security_group_rules接口实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:18:04