码迷,mamicode.com
首页 > 其他好文 > 详细

AWS 清理安全组

时间:2020-07-21 22:08:40      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:split()   img   需要   listen   int   读取   aws   mic   trim   

豆子今天用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:\temp\1iG5NDGVre.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 清理安全组

标签:split()   img   需要   listen   int   读取   aws   mic   trim   

原文地址:https://blog.51cto.com/beanxyz/2512083

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!