You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:55:32