如何通过AWS CLI或Python编程移除EC2实例上的安全组(非删除)
EC2实例解绑安全组的AWS CLI和Python实现方案
该需求完全可以实现。EC2实例绑定/解绑安全组的本质是替换实例关联的安全组列表,无需删除安全组本身,通过AWS CLI、Python Boto3调用modify-instance-attribute接口即可完成操作。
AWS CLI 操作步骤
- 查询目标实例当前绑定的所有安全组ID,执行命令:
aws ec2 describe-instances --instance-ids <替换为你的EC2实例ID> --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text - 执行解绑操作,
--groups参数传入你想要保留的所有安全组ID,未传入的安全组会被自动解绑:aws ec2 modify-instance-attribute --instance-id <替换为你的EC2实例ID> --groups <保留的安全组ID1> <保留的安全组ID2> ...
Python(Boto3)操作示例
确保你已经安装boto3并完成AWS凭证配置,示例代码如下:
import boto3 # 初始化EC2客户端,替换为你的实例所属区域 ec2_client = boto3.client('ec2', region_name='cn-north-1') INSTANCE_ID = "i-xxxxxx" # 替换为你的EC2实例ID REMOVE_SG_ID = "sg-xxxxxx" # 替换为你要解绑的安全组ID # 获取当前实例绑定的安全组列表 resp = ec2_client.describe_instances(InstanceIds=[INSTANCE_ID]) current_security_groups = [sg["GroupId"] for sg in resp["Reservations"][0]["Instances"][0]["SecurityGroups"]] # 过滤掉需要移除的安全组 updated_security_groups = [sg for sg in current_security_groups if sg != REMOVE_SG_ID] # 提交修改请求 ec2_client.modify_instance_attribute( InstanceId=INSTANCE_ID, Groups=updated_security_groups )
*注意事项:
- 仅VPC类型的EC2实例支持修改安全组绑定,经典网络类型EC2实例不支持该操作
- 每次调用接口必须传入完整的需要保留的安全组ID列表,不能仅传入要删除的ID*
内容的提问来源于stack exchange,提问作者jayendra bhatt
相关产品推荐
相关产品推荐

