AWS CLI查找包含允许来自所有来源的所有流量的规则的所有安全组

问题描述 投票:1回答:2

在这里找到了一些类似的问题,但没有一个专门回答这个问题。我有几个安全组,它们的规则允许来自所有源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的所有流量。我想...

amazon-web-services amazon-ec2 command-line-interface jmespath
2个回答
0
投票

您可以通过aws ec2来执行此操作,但为什么不使用已检查不良安全组的Trusted Advisor


0
投票

结果,我原来的命令实际上非常接近。我用length()函数提取了逻辑,现在可以了。

© www.soinside.com 2019 - 2024. All rights reserved.