我找到了一个允许来自
0.0.0.0
的所有流量的安全组,我想知道正在使用该安全组的所有资源。
是否有任何 AWS CLI 命令用于此操作,或者我应该检查每个资源以查看是否附加了此安全组?
选择您资源所在的区域
搜索结果显示与安全组关联的网络接口。检查网络接口的描述以确定与安全组关联的资源。例如,ELB
app/example-alb/1234567890abcdef
表示名称为 example-alb
的应用程序负载均衡器正在使用此安全组。
aws ec2 describe-network-interfaces --filters Name=group-id,Values=<group-id> --region <region> --output json
如果输出为空,则没有附加资源
{
"NetworkInterfaces": []
}
如果您在输出中看到信息,请运行此
aws ec2 describe-network-interfaces \
--filters Name=group-id,Values=<group-id> \
--region <region> --output json \
--query "NetworkInterfaces[*].[NetworkInterfaceId,Description,PrivateIpAddress,VpcId]"
除了上面的描述网络接口答案之外,还有其他资源可以引用安全组并防止其删除。
安全组可以引用其他安全组入站和出站:
aws ec2 describe-security-groups --filters Name=ip-permission.group-id,Values=sg-012345678
aws ec2 describe-security-groups --filters Name=egress.ip-permission.group-id,Values=sg-012345678
对于这些,如果您尝试手动删除 SG,它会在控制台中告诉您问题出在哪里,但 cloudtrail 日志不会说明,并且 terraform 记录的错误也不会说明。因此,如果由于 terraform 的依赖而导致删除不需要的 sg 失败,最好的做法是手动尝试!
它们还可以出现在启动模板和启动配置中。据我所知,您无法通过命令行过滤这些内容,而且涉及更多 - 对于每个启动模板,您需要获取默认或最新版本,并检查其中的安全组,例如使用 jq。启动配置是一项传统技术,我还没有研究过 CLI。
更多参考来源可以是 ECS 和 Lambda。如果 lambda 附加到 VPC 并缩放至 0,则它不会有 ENI,但可以有 SG 引用。类似地,ECS 任务定义没有当前正在运行的任务。