如何在Amazon S3(亚马逊简单存储服务)中阻止坏机器人?

时间:2017-01-12 01:55:53

标签: amazon-web-services amazon-s3

我已注册Amazon Web Services并通过Amazon S3服务创建了一个静态网站(创建了一个Bucket并将域映射到该Bucket)。

这项服务看起来很棒,但我有一个问题 - 我不知道如何阻止坏机器人,并防止它们浪费我的带宽(你们都知道亚马逊对带宽收费)

Amazon Web Services不支持.htaccess,我不知道如何阻止它们。

我需要的是通过两种方式阻止坏机器人:

  1. 通过机器人名称,例如:BadBot1
  2. Via Bot IP,例如:185.11.240.175
  3. 你能帮我做一下吗?

1 个答案:

答案 0 :(得分:2)

您的S3存储桶策略肯定会允许您阻止指定的IP地址,但存储桶策略大小存在大小限制(约20 kb),这可能会导致尝试维护限制声名狼借的IP地址的策略不可行。

AWS的WAF & Shield服务,由Cloudfront提供,是AWS为阻止IP提供的最强大的方式,您可以轻松地将其与S3源集成。 Cloudfront允许您插入Waf & Shield ACL,该ACL由允许或禁止您定义的IP集的规则组成。

AWS有一些示例Lambda函数here,您可以将其用作起点。您可能希望Lambda函数按计划运行,获取要阻止的IP列表,解析该列表,并添加找到的WAF IP集的新IP(或删除列表中不再存在的IP)。上述链接中的waf-tor-blockingwaf-reputation-lists函数提供了有关如何执行此操作的良好示例。

我不确定您通过检测Bot名称的确切含义,但标准Waf & Shield方法目前正在解析发送到s3存储桶的Cloudfront日志。只要收到新的gzip压缩日志文件,您的s3存储桶就会直接触发SNS或Lambda函数。然后,Lambda函数将下载该文件,对其进行解析以查找恶意请求,并阻止关联的IP地址。我链接的repo中的waf-block-bad-behavingwaf-reactive-blacklist函数提供了如何处理此问题的示例。有时,您会在请求的用户代理字符串中看到错误机器人的签名。 Cloudfront日志将显示用户代理字符串,因此您可以对此进行解析并相应地阻止关联的IP。