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

AWS CLI Find All Security Groups which Contain a Rule Allowing All Traffic from All Sources

在这里发现了一些类似的问题,但 none 专门回答了这个问题。我有几个安全组,它们的规则允许来自所有源 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`]'

[]

但是,这 returns 是一个空列表。事实上,将其缩小到查询的第一个条件 returns 一个空列表

$ aws ec2 describe-security-groups
    --filters "Name=ip-permission.protocol,Values=-1"
    --query 'SecurityGroups[?length(IpPermissions[?IpProtocol==`-1`]) > `0`]'

[]

即使去掉上面的查询(我认为匹配过滤器)returns几个安全组:

aws ec2 describe-security-groups
    --filters "Name=ip-permission.protocol,Values=-1"

[sg-1, sg-2, sg-3 ...]

我有什么不明白的?提前致谢。

更新

这个新查询更接近。它正在检索同时具有允许所有协议的规则和允许来自所有 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 底部

找到它

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

您还可以使用 describe-trusted-advisor-check-summaries 命令通过 CLI 访问其检查。

这些支票对所有帐户都是免费的。

事实证明,我原来的命令其实很接近。我用 length() 函数去掉了逻辑,现在它起作用了。

aws ec2 describe-security-groups
    --filters "Name=ip-permission.protocol,Values=-1"
    --query "SecurityGroups[?IpPermissions[?IpProtocol == '-1' &&
      contains(IpRanges[].CidrIp,'0.0.0.0/0')]].GroupId"

希望这对以后的人有所帮助。