You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建含多条托管规则语句的AWS WAF ACL(Terraform排错)

问题根因

报错由两个核心问题导致:

  • 你配置的AWSManagedRulesATPRuleSet(AWS账户接管防护托管规则组)属于高级付费规则集,AWS API强制要求传入规则集专属配置ManagedRuleSetConfig,你当前代码完全缺失该配置块。
  • 第三个规则的自定义名称存在拼写错误:acccount-takeover-rules多写了一个c,虽然不会直接触发API报错,但会导致后续运维时指标名、规则名不匹配,增加排查成本。

你当前的规则执行顺序逻辑是符合WAF规则的:WAF优先级数值越小越先执行,现有0:通用规则集 -> 1:IP信誉规则集 -> 2:ATP规则集的配置会按顺序完成评估。如果需要优先级从1开始编号,直接修改priority数值即可,WAF不要求优先级编号从0开始或连续。

修正方案
  1. 给ATP规则组添加必填的managed_rule_group_configs配置块,明确指定业务实际的登录接口路径,可按需补充请求字段、响应状态码的匹配规则,提升撞库、暴力破解检测的准确率。
  2. 如果你使用5.0及以上版本的AWS Terraform Provider,给另外两个普通托管规则组加上空的managed_rule_group_configs块,适配新版API的参数校验要求。
  3. 修正第三个规则的名称拼写错误。
修正后的完整代码
resource "aws_wafv2_web_acl" "acl" {
  name        = "us-blog-production-waf-acl"
  scope       = "REGIONAL"

  default_action {
    allow {}
  }

  rule {
    name     = "managed-common-rules"
    # 如果需要优先级从1开始,把三个规则的priority依次改为1、2、3即可
    priority = 0
    override_action {
      none {}
    }
    statement {
      managed_rule_group_statement {
        name        = "AWSManagedRulesCommonRuleSet"
        vendor_name = "AWS"
        # 高版本Provider需加空配置块适配API校验
        managed_rule_group_configs {}
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "us-blog-production-managed-common-rules"
      sampled_requests_enabled   = true
    }
  }

  rule {
    name     = "ip-reputation-rules"
    priority = 1
    override_action {
      none {}
    }
    statement {
      managed_rule_group_statement {
        name        = "AWSManagedRulesAmazonIpReputationList"
        vendor_name = "AWS"
        # 高版本Provider需加空配置块适配API校验
        managed_rule_group_configs {}
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "us-blog-production-ip-reputation-rules"
      sampled_requests_enabled   = true
    }
  }

  rule {
    # 修正拼写错误
    name     = "account-takeover-rules"
    priority = 2
    override_action {
      none {}
    }
    statement {
      managed_rule_group_statement {
        name        = "AWSManagedRulesATPRuleSet"
        vendor_name = "AWS"

        # ATP规则组必填配置
        managed_rule_group_configs {
          aws_managed_rules_atp_rule_set {
            # 替换为你站点实际的登录路径,WordPress站点默认是/wp-login.php
            login_path = "/wp-login.php"
            # 以下可选配置按需开启,适配站点登录表单的实际参数
            # request_inspection {
            #   payload_type = "FORM_ENCODED"
            #   username_field {
            #     identifier = "log"
            #   }
            #   password_field {
            #     identifier = "pwd"
            #   }
            # }
            # response_inspection {
            #   status_code {
            #     success_codes = [200, 302]
            #     failure_codes = [401, 403]
            #   }
            # }
          }
        }
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "us-blog-production-account-takeover-rules"
      sampled_requests_enabled   = true
    }
  }

  visibility_config {
    cloudwatch_metrics_enabled = false
    metric_name                = "us-blog-production-waf"
    sampled_requests_enabled   = false
  }
}
上线注意事项
  • AWSManagedRulesATPRuleSet是按请求量计费的付费规则集,正式上线前请确认对应计费标准,避免产生非预期成本。
  • 如果该WAF是为CloudFront分发配置的,需要把scope参数改为CLOUDFRONT,并且将该资源部署在us-east-1区域。
  • 规则上线初期建议先把所有规则的override_action从none {}改为count {}跑1-3天观察日志,确认无误杀正常请求后再切回none {}开启正式拦截。

内容的提问来源于stack exchange,提问作者diegoaguilar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:09:13