AWS 清理安全组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS 清理安全组相关的知识,希望对你有一定的参考价值。

豆子今天用AWS Trust Advisor查看了一下安全组的设置,发现里面有N多安全组的端口设置都没有限制IP,还有几十个安全组是测试的产物,但是测试完了没有删除,就这么扔在那里。

技术图片

技术图片

这些安全组的名单可以下载为Excel 文件。

技术图片

我需要处理两件事情,第一,找到这些安全组对应的EC2 实例,查看之后做好对应的修改;第二,那些完全没有用的安全组 我可以删掉。

下面看看怎么做的。

我有一台EC2 的管理服务器,上面已经配好了对应的IAM Role,因此可以直接跑AWS PowerShell,CLI或者Python Boto3 的代码。

下面是PS的脚本代码。思路很简单,读取Excel文件,然后通过group id 来查找对应的EC2实例,把对应的tag Name标签找到,这样我就知道是什么服务器了

$file=import-excel C:	emp1iG5NDGVre.xlsx -StartRow 10

$result=@()
foreach($one in $file){

    $id=$one.‘Security Group ID‘.Split()[0].trim()
    $all=Get-EC2Instance -Filter @{name=‘instance.group-id‘;value=$id } | select -ExpandProperty Instances     
    foreach($item in $all){

        $Name=$item.tag | Where-Object {$_.Key -eq ‘Name‘} | select -ExpandProperty value
        $item | add-member -NotePropertyName Description -NotePropertyValue $name
        $item
        $result+=$item
    }

}

$result | select -Unique Description, InstanceID, SecurityGroups, @{n=‘State‘;e={$_.state.Name}} | Where-Object {$_.state -ne ‘stopped‘}

结果如下

技术图片

对于每个实例,我需要实际的登陆之后,通过 netstate -an 来查看established和 listening的端口,然后给对应的安全组进行限制。

第二点也很容易实现,方法类似,查看所有的安全组,如果找不到匹配的EC2Networkinterface,那就输出来。这里我把EC2instance改成了EC2Networkinterface是因为 安全组不仅仅会分配给EC2,还会分配给Application Load Balancer


$all=Get-EC2SecurityGroup
$temp=@()
foreach($one in $all){
    $id=$one.groupid
    $all=Get-EC2NetworkInterface -Filter @{name=‘group-id‘;value=$id } 
    #$all=Get-EC2Instance -Filter @{name=‘instance.group-id‘;value=$id } 

    if ($all -eq $null){

        $temp+=$one
    }

}

$temp | ft

技术图片

确认无误之后 把这些无用的安全组删掉即可。

以上是关于AWS 清理安全组的主要内容,如果未能解决你的问题,请参考以下文章

AWS CloudFormation:默认 VPC“vpc”中不存在安全组“sg-”

AWS 安全组包括另一个安全组

AWS 安全组难题

如何在 Rails 中清理 sql 片段

AWS 安全组设置指南

入站流量的 AWS 安全组