如何用Cloud Custodian策略筛选开放指定端口的AWS EC2实例
解决Cloud Custodian筛选开放特定端口EC2实例的问题
当然可以用单步策略实现你的需求!我来帮你排查下现有策略的问题,再给你修正后的方案:
你的原策略里,在security-group过滤器下直接写多个key和value的方式是错误的——Cloud Custodian会把这些当成独立的条件(逻辑或关系),而且没有正确关联安全组的入站规则,所以才会返回所有EC2实例。
修正后的策略(匹配包含80端口的入站规则)
如果要筛选所有绑定了开放80端口(包括范围包含80的规则,比如70-90)的EC2实例,用这个策略:
name: ec2-by-open-port-80 resource: ec2 filters: - type: security-group match-resource: true filters: - type: ingress key: FromPort op: le value: 80 - type: ingress key: ToPort op: ge value: 80
策略逻辑解释
match-resource: true:确保我们只检查当前EC2实例绑定的安全组,而不是AWS账号下所有安全组- 嵌套的
ingress过滤器:专门用来检查安全组的入站规则- 第一个规则判断入站规则的起始端口小于等于80
- 第二个规则判断入站规则的结束端口大于等于80
两者结合就能覆盖所有包含80端口的入站规则场景
精确匹配仅开放80端口的实例
如果你只想筛选那些安全组里**精确开放80端口(非范围)**的EC2实例,把操作符改成eq即可:
name: ec2-by-exact-port-80 resource: ec2 filters: - type: security-group match-resource: true filters: - type: ingress key: FromPort op: eq value: 80 - type: ingress key: ToPort op: eq value: 80
额外:筛选公网开放的实例
如果需要进一步限定是公网开放(比如0.0.0.0/0)的80端口,只需在ingress过滤器里加一个CidrIp的条件:
- type: ingress key: CidrIp value: 0.0.0.0/0
内容的提问来源于stack exchange,提问作者isurikz
相关产品推荐
相关产品推荐

