使用AWS CDK配置wafv2 IP白名单WAF规则报错排查
WAFv2 IP白名单模式配置方案
报错原因
部署时报400参数错误,核心是两个配置缺失/错误:
- 自定义规则缺少必填的
action字段,WAF要求每条规则必须明确定义匹配语句后的执行动作 - 规则语句未实现「不匹配IP集」的NOT逻辑,不符合控制台配置的等价要求
正确配置逻辑
要完全匹配你描述的控制台操作(自定义规则 + NOT匹配IP集)实现IP白名单,配置逻辑为:
- WebACL默认动作保持
allow:未命中规则的请求默认放行 - 自定义规则用
notStatement包裹IP集引用:判断请求来源IP不在指定白名单IP集内 - 规则动作设为
block:命中上述判断的请求直接拦截,最终只有IP在白名单内的请求可以正常访问
可直接运行的完整代码
import { aws_wafv2 as wafv2 } from 'aws-cdk-lib'; // 创建IP白名单集 const cfnIPSet = new wafv2.CfnIPSet(this, 'MyCfnIPSet', { addresses: ['23.186.72.133/32','143.32.1.45/32'], ipAddressVersion: 'IPV4', scope: 'REGIONAL', description: '业务IP白名单集', name: `ss-${targetEnv}-ipset`, }); // 定义白名单拦截规则 const ipWhitelistRule: wafv2.CfnWebACL.RuleProperty = { name: 'ip-whitelist-block', priority: 0, // 命中规则(IP不在白名单内)直接拦截 action: { block: {} }, statement: { // NOT逻辑,对应控制台"doesn't match the statement(NOT)"选项 notStatement: { statement: { ipSetReferenceStatement: { arn: cfnIPSet.attrArn // 绑定已创建的IP集 } } } }, visibilityConfig: { cloudWatchMetricsEnabled: false, metricName: 'ipWhitelistBlockMetric', sampledRequestsEnabled: false, } } const wafacl = new wafv2.CfnWebACL(this, "MyCfnWebAll",{ name: `ee-${targetEnv}-waf`, scope: "REGIONAL", // 默认动作:未命中规则的请求放行,即白名单IP可正常访问 defaultAction: { allow:{ customRequestHandling: { insertHeaders: [{ name: 'my_allow_name', value: 'my_allow_value', }], }, } }, rules: [ipWhitelistRule], visibilityConfig:{ cloudWatchMetricsEnabled: false, metricName: 'wafAclMetric', sampledRequestsEnabled: false } }); // 关联负载均衡 new wafv2.CfnWebACLAssociation(this, 'WebACLAssociation', { webAclArn: wafacl.attrArn, resourceArn: lb.loadBalancerArn })
配置说明:上述代码的执行逻辑和你在控制台手动配置的效果完全一致,部署后只有IP地址属于你配置的
cfnIPSet地址段的请求可以访问关联的LoadBalancer,其余来源请求会被WAF直接拦截。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

