Amazon ec2 如何删除Amazon ec2上的所有安全组?

Amazon ec2 如何删除Amazon ec2上的所有安全组?,amazon-ec2,Amazon Ec2,在过去的几周里,我创建了新的EC2 spot请求。为每个请求创建一个新的安全组。删除spot请求时,不会删除安全组。我已达到100组的上限,希望删除它们。EC2界面一次只允许删除一个组,这意味着我必须点击300次才能删除这些组。或者,有没有更好的方法可以通过单击几下或几行代码来删除多个安全组?我认为您可以通过组合一个列出所有安全组的命令和一个删除它们的命令来实现这一点 如果您使用的是pythonbotoAPI(例如),那么: import boto conn = boto.connect_ec2

在过去的几周里,我创建了新的EC2 spot请求。为每个请求创建一个新的安全组。删除spot请求时,不会删除安全组。我已达到100组的上限,希望删除它们。EC2界面一次只允许删除一个组,这意味着我必须点击300次才能删除这些组。或者,有没有更好的方法可以通过单击几下或几行代码来删除多个安全组?

我认为您可以通过组合一个列出所有安全组的命令和一个删除它们的命令来实现这一点

如果您使用的是python
boto
API(例如),那么:

import boto
conn = boto.connect_ec2(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
groups = conn.get_all_security_groups() 
返回(作为示例):
[SecurityGroup:appserver,SecurityGroup:default,SecurityGroup:vnc,SecurityGroup:webserver]

然后将它们全部删除:

for group in groups:
    conn.delete_security_group(group.split(":")[1])
编辑


您应该在shell上运行这些命令。

这需要一些基本脚本和AWS SDK。您可以使用AWS提供的几乎所有SDK来实现这一点

我更喜欢
AWS-CLI
,因为我已经安装并配置了它。这就是我要做的:

  • 列出所有具有
  • 安装(BASH的Json解析器)
  • 拉动SG ID(检查
    jq
    语法)
  • 获得SG ID后,使用
    for
    循环运行
  • 这是做你想做的事情的相当简单和直接的方法。这可以由任何AWS SDK完成

    这些只是几个可以构造成Bash脚本的命令,前提是:

  • 您已经安装并配置了
  • 您的系统上安装了
    jq
  • 如果您已经安装了一些其他AWS SDK,那么您最好使用它,因为java/python/ruby等都有自己的解析JSON/HASH/DataStructure的内置方式


    希望这能有所帮助。

    只有在其他安全组中没有引用相关安全组的规则时,这些解决方案才有效。我有几个脚本可以删除单个安全组,包括其他安全组中的入口规则。我还处理引用AWS ELB默认安全组的入口规则的特殊情况。如果您遇到这种更复杂的情况,上述解决方案不会因为这些其他规则而删除您的安全组。我的脚本在这里(一个用于ec2 classic,一个用于基于VPC的安全组):

    私有静态无效删除(列出sgs){
    AmazonEC2Client ec2=新的AmazonEC2Client(Credentials.getCredentialsProvider());
    ec2.setEndpoint(“ec2.us-west-2.amazonaws.com”);//默认值
    用于(字符串sg:sgs){
    System.out.println(“删除安全组”+sg);
    DeleteSecurityGroupRequest delReq=新的DeleteSecurityGroupRequest(),带组名(sg);
    试一试{
    ec2.deleteSecurityGroup(delReq);
    }捕获(例外e){
    //e.printStackTrace();
    }
    }
    }
    
    已尝试您的解决方案,但当前实例无法访问较旧的安全组,只列出了两个,一个正在使用,一个默认。我不能这样做,因为使用安全组的实例已在几天前终止。当前实例只在一个新的安全组上运行(我从错误中吸取了教训)。显然我得点击300次。如果我选择了多个安全组,ec2 UI将禁用删除按钮。无论如何,谢谢。@Casady“我不能这样做,因为使用安全组的实例已经在几天前终止了”我不是真的在你的云中,但我不明白这意味着什么。如果我错了,请纠正我,但我认为
    get\u all\u security\u group
    get all security group.:)你也应该试试@slayedbylucifer的答案。我也这么认为!但是我已经登录到其中一个实例,运行pythonscrypt,它只显示两个。为实例创建的一个和默认的一个。@Casady您不应该从实例执行它:)在您的shell和您的pc上执行它,它就会工作。在我自己的pc上使用此scrypt执行它:放入我自己的密钥并从本地pc上运行它。我得到以下输出:root@ubuntu:~/ec2/2630437#/security-group-cleanup.py:[u'default',u'nv1']--因此仍然只显示2个组,但98确实存在于我的ec2控制面板中。要删除的安全组列表如下所示。使用
    --delete
    再次运行此操作以删除它们[u'default',u'nv1']总共有2个要删除的组。它不是这么简单。安全组经常相互引用,因此这不起作用。
    private static void delete(List<String> sgs) {
        AmazonEC2Client ec2 = new AmazonEC2Client(Credentials.getCredentialsProvider());
        ec2.setEndpoint("ec2.us-west-2.amazonaws.com"); // default
    
        for(String sg:sgs) {
            System.out.println("DELETING SECURITY GROUP " + sg);
            DeleteSecurityGroupRequest delReq = new DeleteSecurityGroupRequest().withGroupName(sg);
            try {
                ec2.deleteSecurityGroup(delReq);
            } catch (Exception e) {
                // e.printStackTrace();
            }
        }
    }