微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在具有Terraform的一个AWS WAF规则中使用多个谓词条件?

如何解决如何在具有Terraform的一个AWS WAF规则中使用多个谓词条件?

只需单击“ 添加条件 ”按钮,我就可以通过AWS控制台的一项AWS WAF Classic规则创建多个条件。

Text

那么如何在一个带地形的waf规则中定义多个条件(谓词)?

我对此进行了测试:

resource "aws_wafregional_rule" "wafregional_ip_whitelist_rule" {
  depends_on  = ["aws_wafregional_ipset.wafregional_ip_whitelist","aws_wafregional_ipset.wafregional_vpn_ip_whitelist"]
  name        = "internal_ip_whitelist_rule"
  metric_name = "WAFWhitelistRule"
  predicate {
    data_id = ["${aws_wafregional_ipset.wafregional_ip_whitelist.id}","${aws_wafregional_ipset.wafregional_vpn_ip_whitelist.id}"]
    negated = false
    type    = "IPMatch"
  }
}

但是predicate.data_id不是列表:

Error: aws_wafregional_rule.wafregional_ip_whitelist_rule: predicate.0.data_id must be a single value,not a list

解决方法

如果您希望单个WAF规则具有多个谓词,则必须多次指定An error occurred: ConvertCustomS31 - Failed to create resource. The event is not supported for notifications See details in CloudWatch Log: 2020/08/25/[$LATEST]f50070907c60405085c3b03ab0183514. 块:

predicate

这将创建一个基于指定的两个IP集的允许/拒绝规则。

,

是的,下面是一个有两个条件的规则示例:


 rule {
    name     = "AllowPath"
    priority = 1

    action {
      allow {}
    }

    statement {

      and_statement {
        statement {
          regex_pattern_set_reference_statement {
            arn = aws_wafv2_regex_pattern_set.regex_pattern_set_path.arn

            field_to_match {
              uri_path {}
            }

            text_transformation {
              priority = 2
              type     = "NONE"
            }
          }
        }

        statement {
          regex_pattern_set_reference_statement {
            arn = aws_wafv2_regex_pattern_set.regex_pattern_set_example.arn

            field_to_match {
              single_header {
                name = "my_header"
              }
            }

            text_transformation {
              priority = 2
              type     = "NONE"
            }
          }
        }
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "AllowPath"
      sampled_requests_enabled   = true
    }
  }

基本上,在这种情况下,如果具有特定的标头,则允许访问某些路径,但是为了简化示例,应遵循以下结构以具有多个条件:

rule {
    name     = "my_rule"
    priority = 1

    action {
      allow {}
    }

    statement {
      and_statement {
        statement {

        ### STATEMENT 1

        }

        statement {

        ### STATEMENT 2

        }
      }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。