AWS CDK部署WAFv2时遇EXACTLY_ONE_CONDITION_REQUIRED错误求助
解决AWS CDK部署WAFv2 ATP规则组时的配置错误
问题原因分析
第一个错误(EXACTLY_ONE_CONDITION_REQUIRED)
AWS WAFv2的AWSManagedRulesATPRuleSet托管规则组要求ManagedRuleGroupConfig必须明确指定配置类型,并将对应参数嵌套在该类型的字段下。你之前直接把loginPath、payloadType等字段放在managedRuleGroupConfigs的对象外层,不符合WAF API的参数结构要求,导致API无法识别配置类型,返回该错误。
第二个错误(必填字段缺失)
只保留loginPath时,仍然缺少配置类型标识和正确的嵌套结构,WAF API认为核心配置字段缺失,因此返回新的错误。
修正方案
调整managedRuleGroupConfigs的结构:
- 每个配置对象必须添加
type: 'AWSManagedRulesATPRuleSet'字段,明确配置类型 - 将登录相关的配置参数(loginPath、payloadType等)嵌套在
awsManagedRulesATPRuleSet字段下
修正后的完整代码
import * as cdk from 'aws-cdk-lib'; import * as wafv2 from 'aws-cdk-lib/aws-wafv2'; export class CdkWorkshopStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); // defines an AWS WAFv2 WebACL resource const webACL = new wafv2.CfnWebACL(this, 'WebACL', { defaultAction: { block: {}, }, scope: 'REGIONAL', name: 'waf-sample', description: 'this is a test', visibilityConfig: { cloudWatchMetricsEnabled: true, metricName: 'WebACL', sampledRequestsEnabled: true }, rules: [ { priority: 9, name: 'AWS-AWSManagedRulesATPRuleSet', statement: { managedRuleGroupStatement: { name: 'AWSManagedRulesATPRuleSet', vendorName: 'AWS', // 修正后的managedRuleGroupConfigs结构 managedRuleGroupConfigs: [{ type: 'AWSManagedRulesATPRuleSet', awsManagedRulesATPRuleSet: { loginPath: '/loginPath', payloadType: 'JSON', usernameField: { identifier: '/form/username', }, passwordField: { identifier: '/form/password', }, }, }], } }, overrideAction: { none: {} }, visibilityConfig: { cloudWatchMetricsEnabled: true, metricName: 'AWS-AWSManagedRulesATPRuleSet', sampledRequestsEnabled: true } }, ], }); } }
验证方法
修改代码后重新执行cdk deploy,此时WAF API能正确识别ATP规则组的配置参数,部署即可成功。
内容的提问来源于stack exchange,提问作者tkworks
相关产品推荐
相关产品推荐

