1. 为什么需要AWS WAF与Shield协同防护
在今天的互联网环境中,DDoS攻击已经成为常态而非例外。根据最新的行业报告,2023年全球DDoS攻击规模同比增长了47%,其中针对API端点的攻击占比高达63%。AWS Shield和WAF的组合防护方案,正是应对这种威胁环境的最佳实践。
AWS WAF的Rate Limit功能主要解决的是应用层(OSI第7层)的精细化访问控制问题。它能精确到每个IP、每个API端点的请求频率限制。而AWS Shield则专注于网络层(OSI第3/4层)的大流量DDoS防护。两者协同工作时,就像建筑物的双重门禁系统:Shield负责阻挡大规模的人流冲击(如僵尸网络),而WAF则对进入的每个人进行细致的身份验证和行为监控。
我在实际运维中遇到过这样一个典型案例:某电商网站在大促期间遭遇了混合攻击。攻击者首先用UDP洪水攻击(网络层)试图耗尽带宽,同时用数千个傀儡IP对商品详情API发起高频请求(应用层)。单独使用Shield只能缓解带宽攻击,而单独使用WAF又无法应对网络层洪水。最终是通过两者的协同配置才完全化解了危机。
2. AWS WAF Rate Limit深度配置指南
2.1 基础速率限制规则配置
在AWS控制台创建WAF规则时,Rate Limit的配置有几个关键参数需要特别注意:
json复制{
"Name": "API-Rate-Limit",
"Priority": 1,
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "APIRateLimit"
},
"RateLimit": {
"Limit": 1000,
"AggregateKeyType": "IP",
"EvaluationWindowSec": 300,
"ScopeDownStatement": {
"ByteMatchStatement": {
"FieldToMatch": {
"UriPath": {}
},
"PositionalConstraint": "STARTS_WITH",
"SearchString": "/api/v1/products",
"TextTransformations": [
{
"Type": "NONE",
"Priority": 0
}
]
}
}
}
}
这个配置表示:对访问/api/v1/products路径的每个IP地址,在5分钟(300秒)窗口期内超过1000次请求时触发拦截。其中最容易出错的点是:
EvaluationWindowSec的单位是秒而非分钟,很多新手会误填成5ScopeDownStatement需要精确匹配URI路径,避免误伤正常请求AggregateKeyType除了IP外,还可以选择FORWARDED_IP(适用于前端有代理的情况)
2.2 动态调整限流阈值的最佳实践
固定阈值在面对突发流量时往往不够灵活。我推荐使用CloudWatch Alarm联动Lambda实现动态调整:
- 创建CloudWatch自定义指标监控API的5xx错误率
- 当错误率超过5%时触发Lambda函数
- Lambda通过WAFv2 API临时调低Rate Limit值
示例Lambda代码片段:
python复制import boto3
def lambda_handler(event, context):
waf = boto3.client('wafv2')
response = waf.update_rate_based_rule(
Name='API-Rate-Limit',
Scope='REGIONAL',
Id='your-rule-id',
RateLimit=500, # 调整为更严格的限制
LockToken='your-lock-token'
)
return response
重要提示:动态调整后务必设置回滚机制,避免在攻击结束后仍保持严格限制影响正常用户。
3. AWS Shield高级防护策略
3.1 Shield Advanced的自动缓解机制
启用Shield Advanced后,AWS会自动部署以下防护措施:
-
流量基线学习:系统会花7天建立正常流量模式,包括:
- 源IP地理分布
- 协议类型比例
- 请求包大小分布
-
异常检测算法:使用机器学习模型实时检测:
- SYN洪水(检测半开连接比例)
- DNS放大攻击(检测响应包与请求包大小比)
- HTTP洪水(检测请求速率突变)
-
清洗中心路由:当检测到攻击时,流量会被重定向到AWS全球清洗中心,这里部署了:
- 专用硬件加速的包过滤
- 深度数据包检测(DPI)引擎
- 行为分析系统
3.2 自定义防护策略配置
在Shield控制台的"Protection"页面,可以创建自定义策略。以下是一个电商网站的建议配置:
yaml复制AttackThreshold:
- Metric: REQUEST_FLOW
Threshold: 15000 # RPS超过15000触发
- Metric: BANDWIDTH
Threshold: 50 # 50Gbps带宽触发
ResponseActions:
- Type: BLOCK
Target: EXTERNAL_IP # 仅防护公网IP
Duration: 3600 # 拦截1小时
ExceptionList:
- 192.0.2.0/24 # 办公网段白名单
- ASN:16509 # CloudFront ASN
特别注意:
- 阈值设置应参考业务平常峰值的3-5倍
- 持续时间不宜过短(建议≥1小时),避免攻击者试探性攻击
- 必须配置CDN服务的ASN白名单,否则可能误伤缓存节点
4. 实战中的联合防护配置
4.1 WAF与Shield的规则优先级
当同时启用两种服务时,流量处理顺序如下:
-
边缘位置检测(CloudFront层面):
- Shield的SYN Cookie验证
- WAF的Rate Limit初步检查
-
区域级防护(ALB/API Gateway层面):
- WAF的精细规则(如SQL注入检测)
- Shield的流量清洗
建议的规则优先级排序:
code复制1. Shield自动防护规则
2. WAF Rate Limit基础规则
3. WAF业务逻辑规则(如登录防爆破)
4. WAF漏洞防护规则(如XSS检测)
4.2 监控与告警一体化配置
使用Amazon EventBridge创建统一的事件总线:
python复制{
"source": ["aws.shield", "aws.waf"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": [
"wafv2.amazonaws.com",
"shield.amazonaws.com"
],
"eventName": [
"Block",
"MitigateAttack"
]
}
}
将事件路由到:
- SNS主题触发邮件/SMS告警
- Lambda函数执行自动扩容
- Systems Manager Runbook执行预设响应流程
5. 常见问题排查与优化
5.1 误拦截问题诊断流程
当出现合法请求被拦截时,按以下步骤排查:
-
检查WAF日志:
bash复制
aws wafv2 get-logging-configuration \ --resource-arn YOUR_WEB_ACL_ARN -
分析采样请求:
- 查看
httpRequest.headers确认User-Agent - 检查
rateBasedRuleList匹配详情
- 查看
-
临时添加豁免规则:
json复制{ "Name": "Bypass-Mobile-UserAgent", "Priority": 0, "Action": { "Allow": {} }, "Statement": { "ByteMatchStatement": { "FieldToMatch": { "UserAgent": {} }, "SearchString": "Mobile", "TextTransformations": [{ "Type": "LOWERCASE", "Priority": 0 }] } } }
5.2 性能优化技巧
-
规则组优化:
- 将高频检查的规则(如Rate Limit)放在前面
- 使用
Label匹配替代重复的条件判断
-
日志采样配置:
bash复制aws wafv2 update-web-acl \ --name MyWebACL \ --scope REGIONAL \ --default-action Allow \ --visibility-config \ SampledRequestsEnabled=true, CloudWatchMetricsEnabled=true \ --logging-configuration \ LogDestinationConfigs=arn:aws:logs:us-east-1:123456789012:log-group:my-waf-logs, RedactedFields=[{SingleHeader={Name="Authorization"}}] -
成本控制建议:
- 非高峰期降低采样率(如从100%调至10%)
- 对静态资源路径禁用部分检查规则
- 使用Shield的自动防护替代部分手动WAF规则
