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

Terraform创建CloudFront关联WAFv2 WebACL时SCOPE_VALUE无效报错求助

问题分析与解决

核心原因

CloudFront对应的WAFv2 WebACL必须在us-east-1区域创建,这是AWS的硬性规则。不管你的CloudFront分发部署在哪个边缘区域,关联的WebACL只能存放在us-east-1,其他区域不支持scope = "CLOUDFRONT"这个参数值,这就是你在ap-southeast-1报错的根本原因。

解决步骤

  1. 添加us-east-1区域的AWS Provider
    在Terraform脚本里新增一个指向us-east-1的Provider实例,专门用来创建CloudFront关联的WebACL:

    provider "aws" {
      alias  = "us-east-1"
      region = "us-east-1"
    }
    
  2. 修改WebACL资源指定Provider
    在你的aws_wafv2_web_acl资源块中添加provider字段,强制资源在us-east-1区域创建:

    resource "aws_wafv2_web_acl" "waf_acl" {
      provider    = aws.us-east-1 # 指定使用us-east-1的provider
      name        = local.waf_name
      description = "waf setup infront of cloudfront"
      scope       = "CLOUDFRONT"
    
      # 以下原有规则、默认动作、可见性配置保持不变
      default_action {
        allow {}
      }
    
      rule {
        name     = "AWS-AWSManagedRulesAmazonIpReputationList"
        priority = 0
    
        override_action {
          none {}
        }
    
        statement {
          managed_rule_group_statement {
            name        = "AWS-AWSManagedRulesAmazonIpReputationList"
            vendor_name = "AWS"
          }
        }
    
        visibility_config {
          cloudwatch_metrics_enabled = true
          metric_name                = "AWS-AWSManagedRulesAmazonIpReputationList"
          sampled_requests_enabled   = true
        }
      }
    
      # 其余规则和visibility_config保持不变...
    }
    
  3. 执行部署验证
    先运行terraform init重新初始化Provider配置,再用terraform plan确认WebACL将在us-east-1创建,最后执行terraform apply完成部署即可。

补充说明

  • 如果你还需要在ap-southeast-1创建面向ALB、API Gateway等资源的WAF,可以保留默认的ap-southeast-1 Provider,通过alias区分不同区域的资源。
  • 部署在us-east-1的CloudFront WebACL可以正常关联到任何区域的CloudFront分发,不需要和分发的边缘区域匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:00:56