AWS WAF Python CDK 修改托管规则组子规则Rule Action及报错咨询
问题原因及解决方法
1. 报错根因
你收到的400错误是WAFv2参数校验不通过导致的,核心问题有两个:
- 引用AWS托管规则组时参数配置冲突:WAF要求标识规则组只能二选一配置,要么单独填写规则组的ARN,要么填写
vendorName+name组合,你的代码里同时填写了两类参数,还加了无效的占位符ARN: 'string',符合报错提示的"字段只能填一个值"的错误描述 - 声明类型不匹配:你用了
RuleGroupReferenceStatement(该属性仅用于引用自定义规则组)来引用AWS托管规则组,正确的属性名应为managedRuleGroupStatement
另外你用到的ExcludedRules参数作用是完全关闭指定子规则(等于不生效),并不能修改子规则的动作,不符合你的需求。
2. 正确配置子规则Count动作的两种方案
方案一:将整个托管规则组的所有子规则统一设为Count动作
只需要修改规则的overrideAction参数即可,完整示例代码:
from aws_cdk import ( core, aws_wafv2 as wafv2 ) class PyCdkStack(core.Stack): def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) web_acl = wafv2.CfnWebACL( scope_=self, id='WebAcl', default_action=wafv2.CfnWebACL.DefaultActionProperty(allow={}), scope='REGIONAL', visibility_config=wafv2.CfnWebACL.VisibilityConfigProperty( cloud_watch_metrics_enabled=True, sampled_requests_enabled=True, metric_name='testwafmetric', ), name='Test-Test-WebACL', rules=[ # 通用规则组配置 { 'name': 'AWS-AWSManagedRulesCommonRuleSet', 'priority': 1, 'statement': { 'managedRuleGroupStatement': { 'vendorName': 'AWS', 'name': 'AWSManagedRulesCommonRuleSet', } }, # 整组动作覆盖为Count 'overrideAction': { 'count': {} }, 'visibilityConfig': { 'sampledRequestsEnabled': True, 'cloudWatchMetricsEnabled': True, 'metricName': "AWS-AWSManagedRulesCommonRuleSet" } }, # IP信誉库规则组配置 { 'name': 'AWS-AWSManagedRulesAmazonIpReputationList', 'priority': 2, 'statement': { 'managedRuleGroupStatement': { 'vendorName': 'AWS', 'name': 'AWSManagedRulesAmazonIpReputationList', } }, 'overrideAction': { 'count': {} }, 'visibilityConfig': { 'sampledRequestsEnabled': True, 'cloudWatchMetricsEnabled': True, 'metricName': "AWS-AWSManagedRulesAmazonIpReputationList" } } ] )
方案二:仅将指定子规则设为Count,其他子规则保持托管组默认动作
使用ruleActionOverrides参数单独配置需要修改的子规则即可,示例(以CommonRuleSet为例):
{ 'name': 'AWS-AWSManagedRulesCommonRuleSet', 'priority': 1, 'statement': { 'managedRuleGroupStatement': { 'vendorName': 'AWS', 'name': 'AWSManagedRulesCommonRuleSet', # 单独配置指定子规则的动作 'ruleActionOverrides': [ { 'name': 'CrossSiteScripting_QUERYARGUMENTS', 'actionToUse': { 'count': {} } }, { 'name': 'GenericLFI_QUERYARGUMENTS', 'actionToUse': { 'count': {} } }, # 其他需要修改的子规则按同样格式添加即可 ] } }, # 整组保持默认动作 'overrideAction': { 'none': {} }, 'visibilityConfig': { 'sampledRequestsEnabled': True, 'cloudWatchMetricsEnabled': True, 'metricName': "AWS-AWSManagedRulesCommonRuleSet" } }
注意事项
- 需确保你使用的AWS CDK版本不低于2.50.0,否则
ruleActionOverrides属性可能无法识别 - 托管规则组的子规则名称需要和AWS官方公布的名称完全一致,大小写敏感
内容的提问来源于stack exchange,提问作者hightest
相关产品推荐
相关产品推荐

