如何确定AWS安全组依赖关系?


Answers:


58

将安全组ID粘贴到EC2的“网络接口”部分。这将在EC2,EB,RDS,ELB中找到用法。

CLI: aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-123abc45


10

在AWS EC2控制台中执行此操作的最佳方法是在EC2-> Instances部分的搜索字段中粘贴安全组名称。

然后将填充与粘贴的安全组关联的所有实例,这些实例将是ec2对象(依赖项)。

您还可以在ELB部分和其他利用安全组的AWS产品中运行此搜索。

如果要删除安全组,则需要为每个实例“更改安全组”(如果它们在VPC中),或者创建AMI并使用其他安全组重新启动,然后删除旧实例(如果使用EC2经典版)

希望有帮助-


8

您需要查看您的EC2实例对象,而不是组本身:

$ aws ec2 describe-instances --output text

然后寻找“ sg- *”或使用标准的unix文本流处理工具提取所需的数据。

另外,如果您的实例数量很少,请使用--output table格式正确的列表。


2
aws ec2 describe-instances --output text | grep sg-
cdmckay 2015年

由于安全组可以引用其他安全组,因此您可能需要递归运行该功能?
brendan

1
那是很不完整的。安全组可以在很多地方使用,除了EC2实例- ELB的,VPC的其他安全组(如已经提到@brendan)等
阿莫斯夏皮拉

@AmosShapira OP正在特别询问EC2。如果愿意,您随时可以编辑我的答案以进行改进。
EEAA

@AmosShapira它解决了OP遇到的问题。SF答案不一定是对每种可能的相关情况的全面答案。
EEAA


4

Lambda函数可能还具有安全组。在撰写本文时,Amazon不会阻止删除Lambda函数使用的安全组。

我用这个:

aws lambda list-functions | jq -c '.Functions[] | {FunctionArn, SecurityGroups: (.VpcConfig.SecurityGroupIds[]? // null) }'

2

另一个问题是依赖于其他安全组的安全组。可以使用此命令生成邻接列表(直接依赖项):

aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,dependentOnSGs:IpPermissions[].UserIdGroupPairs[].GroupId}

理想情况下,此结果应用于查找传递闭包(所有依赖项,直接和间接)。不幸的是,我没有找到Transitive闭包工具。


1

最初询问问题时,此功能可能不可用,但是如果您进入AWS控制台的安全组,请选择有问题的组,然后选择Delete Action,结果提示将告诉您是否引用了该引用以及引用的内容。



0

标记的答案不正确。如果看到依赖关系违规,则很可能在IP权限(入口)配置中引用了另一个安全组。您将需要撤消所有包含安全组作为其来源的入口权限。


我想最初的问题是什么在引用某个安全组。是否存在不是引用安全组(及其入口端口)的网络接口的事物?如果不是,那么网络接口列表是一个很好的答案,不是吗?
user14645

尽管您的观点很有价值,但是对安全组的引用不是依赖关系违规。可以删除未附加到任何ENI但在另一个安全组中引用的安全组。删除之后,您将在控制台中收到“您拥有新的过时安全组规则”通知,以表明规则中存在对不存在的安全组的旧引用。然后,它将为您提供“查看陈旧规则”超链接,以在此后修改情况。
Denys Stroebel '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.