在这里找到了一些类似的问题,但没有一个专门回答这个问题。我有几个安全组,它们的规则允许来自所有源IP的所有流量。我想编写一个简单的CLI命令,为我抓取这些命令。
在搜寻了一些资源之后,我确定该命令肯定可以工作:
$ aws ec2 describe-security-groups
--filters "Name=ip-permission.protocol,Values=-1"
--query 'SecurityGroups[?length(IpPermissions[?IpProtocol==`-1` && contains(IpRanges[].CidrIp, `0.0.0.0/0`)]) > `0`]'
[]
但是,这将返回一个空列表。实际上,将其范围缩小到查询的第一个条件将返回一个空列表
$ aws ec2 describe-security-groups
--filters "Name=ip-permission.protocol,Values=-1"
--query 'SecurityGroups[?length(IpPermissions[?IpProtocol==`-1`]) > `0`]'
[]
即使取出上面的查询(我认为与过滤器匹配)也会返回几个安全组:
aws ec2 describe-security-groups
--filters "Name=ip-permission.protocol,Values=-1"
[sg-1, sg-2, sg-3 ...]
我不明白什么?预先感谢。
UPDATE
此新查询更近。它正在检索具有允许所有协议的规则和允许来自所有IP的流量的规则的每个安全组。但是,当前正在检索的安全组没有我想要的在同一规则中这两个条件。
aws ec2 describe-security-groups --filters "Name=ip-permission.protocol,Values=-1" --query "SecurityGroups[?IpPermissions[?IpProtocol == '-1']] | [?length(IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`)]) > `0`]"
[此外,我认为向不熟悉其结构的人显示JSON对象会有所帮助。您可以在this page底部找到它
在这里找到了一些类似的问题,但没有一个专门回答这个问题。我有几个安全组,它们的规则允许来自所有源IP的所有流量。我想...
您可以通过aws ec2来执行此操作,但为什么不使用已检查不良安全组的Trusted Advisor。
结果,我原来的命令实际上非常接近。我用length()
函数提取了逻辑,现在可以了。