Terraform创建CloudFront关联WAFv2 WebACL时SCOPE_VALUE无效报错求助
问题分析与解决
核心原因
CloudFront对应的WAFv2 WebACL必须在us-east-1区域创建,这是AWS的硬性规则。不管你的CloudFront分发部署在哪个边缘区域,关联的WebACL只能存放在us-east-1,其他区域不支持scope = "CLOUDFRONT"这个参数值,这就是你在ap-southeast-1报错的根本原因。
解决步骤
添加us-east-1区域的AWS Provider
在Terraform脚本里新增一个指向us-east-1的Provider实例,专门用来创建CloudFront关联的WebACL:provider "aws" { alias = "us-east-1" region = "us-east-1" }修改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保持不变... }执行部署验证
先运行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
相关产品推荐
相关产品推荐

