使用AWS CDK启用WAF WebAcl日志功能失败问题排查
解决AWS CDK中WAFv2区域WebAcl日志配置的ARN无效问题
问题分析
你遇到的错误根源在于传递给CfnLoggingConfiguration的logDestinationConfigs参数存在两处问题:
- 该参数要求为字符串数组,但你的代码直接传入了单个ARN字符串;
- 错误日志显示ARN末尾带有
:*通配符,这不符合WAF日志配置的要求——目标必须是日志组本身的ARN,不能包含流通配符。
修正后的代码
import { LogGroup, PolicyStatement } from 'aws-cdk-lib/aws-logs'; import { CfnLoggingConfiguration } from 'aws-cdk-lib/aws-wafv2'; // 创建指定名称的日志组 const webAclLogGroup = new LogGroup(scope, "awsWafLogs", { logGroupName: `aws-waf-logs` }); // 给日志组添加权限,允许WAF服务写入日志 webAclLogGroup.addToResourcePolicy(new PolicyStatement({ actions: ['logs:PutLogEvents'], resources: [webAclLogGroup.logGroupArn], principals: [{ Service: 'wafv2.amazonaws.com' }], })); // 创建日志配置(注意logDestinationConfigs为数组格式) new CfnLoggingConfiguration(scope, "webAclLoggingConfiguration", { logDestinationConfigs: [webAclLogGroup.logGroupArn], // 改为数组包裹单个ARN resourceArn: aclArn // WebAcl的ARN });
关键说明
- 数组格式要求:AWS WAF的
LoggingConfiguration强制要求logDestinationConfigs为数组类型,哪怕只有一个目标ARN,也必须用数组包裹。 - 日志组权限配置:必须显式赋予WAF服务向日志组写入日志的权限,否则即使ARN正确,后续也会触发权限错误。
- ARN正确性验证:可以添加输出项确认日志组ARN格式:
部署后查看输出,正确的ARN格式应为import { CfnOutput } from 'aws-cdk-lib'; new CfnOutput(scope, 'WebAclLogGroupArn', { value: webAclLogGroup.logGroupArn });arn:aws:logs:<区域>:<账号ID>:log-group:aws-waf-logs,无:*后缀。
额外注意
如果指定的日志组名称在当前账号+区域下已存在,CDK会复用该日志组,但需确保其权限配置符合要求。另外,WAF区域WebAcl的日志配置仅支持同区域的日志组,不能跨区域设置。
内容的提问来源于stack exchange,提问作者Mthenn
相关产品推荐
相关产品推荐

