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 清理安全组的主要内容,如果未能解决你的问题,请参考以下文章