CloudFront(WAF) IP访问限制下Bot访问引发计费问题求助
解决CloudFront+S3静态站Bot访问导致的WAF/计费问题
可行的Bot过滤方案
1. 利用AWS WAF托管规则(Bot Control)
- 启用AWS Managed Rules中的Bot Control规则组(基础版免费,标准版/高级版付费但识别更精准),调整现有规则优先级:
- 第一优先级:保留放行特定可信IP的规则
- 第二优先级:配置Bot Control规则对恶意/可疑Bot执行
Block动作
- 优势:无需手动维护Bot特征库,AWS自动更新规则,被拦截的请求不会进入CloudFront回源环节,直接降低WAF、CloudFront和S3的计费成本。
2. 用CloudFront Signed Cookies替代Signed URL
- 针对全站或指定路径生成Signed Cookies,解决Signed URL仅支持单URL的局限:
- 在IAM或CloudFront控制台创建CloudFront密钥对
- 使用AWS SDK(如Python的
boto3)或CLI生成包含CloudFront-Key-Pair-Id、CloudFront-Signature、CloudFront-Policy的Cookie - 通过内部系统将Cookie分发给授权用户(比如登录后下发)
- 效果:只有携带有效Signed Cookie的请求能通过CloudFront验证,无Cookie的Bot请求会被直接拦截,且支持全站所有路径访问。
3. 修正S3 Referer访问策略
- 你之前的S3策略失效原因是第二个Statement无条件允许OAI访问所有资源,导致Referer限制形同虚设。修正后的策略需合并条件,仅允许OAI携带有效Referer访问:
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "AllowCloudFrontOAIWithValidReferer", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EXXXXXX" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": { "StringLike": { "aws:Referer": [ "http://www.example.com/*", "http://example.com/*" ] } } } ] } - 额外配置:在CloudFront行为设置中,将
Referer添加到转发到源的头部列表,确保S3能接收到Referer头完成验证。
4. 隐藏服务指纹减少Bot扫描
- 自定义CloudFront响应头,移除
X-Amz-Cf-Id、Server等暴露AWS服务特征的头部 - 仅使用CloudFront分配的域名访问网站,避免直接使用S3网站端点,降低被Bot识别的概率
5. 优化CloudFront缓存策略降低回源成本
- 对静态HTML、CSS、JS等资源设置较长缓存TTL,减少重复回源请求
- 启用缓存错误响应(如403),避免Bot重复请求相同路径时频繁触发S3访问
关于Bot获取域名的可能原因
- 互联网批量域名扫描器会遍历常见域名组合、过期后重新注册的域名,或通过DNS历史记录抓取域名
- 可能存在内部泄露(如文档、测试环境链接),或网站曾公开过留下的访问痕迹
内容的提问来源于stack exchange,提问作者squidg
相关产品推荐
相关产品推荐

