如何通过CloudFormation配置基于速率的WAF规则并关联负载均衡?
解决AWS CloudFormation配置基于速率的WAF规则并关联负载均衡的问题
嘿,我之前也踩过这个坑!你找不到RateBasedRule其实是因为AWS WAF已经迭代到v2版本了,旧版WAF Classic的AWS::WAF::RateBasedRule资源已经不是当前推荐的配置方式,现在咱们得用WAF v2的资源体系来实现速率限制规则。下面给你一步步拆解解决方案:
1. 先创建包含速率规则的WAF v2 Web ACL
Web ACL是WAF规则的容器,所有规则都要定义在这个资源里,核心是通过RateBasedStatement来实现速率限制:
AWSTemplateFormatVersion: '2010-09-09' Resources: MyRateBasedWebACL: Type: AWS::WAFv2::WebACL Properties: Name: MyRateLimitingACL Scope: REGIONAL # 关联CloudFront的话用CLOUDFRONT,关联ALB用REGIONAL DefaultAction: Allow: {} # 默认允许所有请求,速率超限则触发规则动作 Rules: - Name: ClientIPRateLimitRule Priority: 1 # 规则优先级,数字越小越先执行 Action: Block: {} # 速率超限时执行的动作,也可以用Count先测试 Statement: RateBasedStatement: Limit: 100 # 每分钟允许的请求数,按需调整 AggregateKeyType: IP # 基于客户端IP统计请求速率 VisibilityConfig: SampledRequestsEnabled: true CloudWatchMetricsEnabled: true MetricName: ClientIPRateLimitMetric
这里的RateBasedStatement就是实现速率限制的核心,你可以根据需求调整:
Limit:设置每分钟允许的最大请求数AggregateKeyType:可选IP(客户端IP)、FORWARDED_IP(用X-Forwarded-For头的IP,适合LB转发场景)等
2. 把Web ACL关联到你的负载均衡
注意:只有**Application Load Balancer(ALB)**支持WAF v2,NLB和CLB不支持。用AWS::WAFv2::WebACLAssociation资源来完成关联:
WAFToALBAssociation: Type: AWS::WAFv2::WebACLAssociation Properties: ResourceArn: !Sub 'arn:aws:elasticloadbalancing:${AWS::Region}:${AWS::AccountId}:loadbalancer/app/YourALBName/YourALBId' WebACLArn: !GetAtt MyRateBasedWebACL.Arn
你可以把YourALBName和YourALBId替换成实际值,或者如果ALB是在同一个CloudFormation模板里创建的,直接用!Ref引用ALB资源的Arn即可。
额外的实用配置
如果你的LB已经配置了转发客户端IP到X-Forwarded-For头,想要基于真实客户端IP做速率限制,可以修改RateBasedStatement如下:
RateBasedStatement: Limit: 100 AggregateKeyType: FORWARDED_IP ForwardedIPConfig: HeaderName: X-Forwarded-For FallbackBehavior: MATCH # 取不到X-Forwarded-For头时的处理,MATCH表示触发规则 Position: ANY
总结一下:旧版的RateBasedRule属于WAF Classic,现在AWS主推WAF v2,所以要通过Web ACL里的RateBasedStatement来定义速率规则,再通过关联资源绑定到ALB上。
内容的提问来源于stack exchange,提问作者xyz
相关产品推荐
相关产品推荐

