我在 amazon S3 上托管了一些经常更新的静态网页。我想实施一些反抓取机制,比如禁止发出过多请求或发出看起来像机器人的请求的 IP 等。我知道没有什么是万无一失的,但我只是想给他们一些阻力并让他们的工作变得困难。我知道有一种方法可以在存储桶策略中将 IP 地址列入黑名单,但有没有动态的方法来实现这一点,比如...如果特定 IP 每分钟发出....特定数量的请求....那么,在特定时间内禁止它。或者类似的东西。
答案1
答案2
我不认为你可以用 S3 做到这一点,但你可以禁止超出预设限制的 IP 地址使用 CloudFront。只需设置 CloudFront 来提供 S3 内容并阻止对 S3 的直接访问。您的成本可能会略有降低,也可能会略有上升,但这不会对您的成本产生巨大影响。
答案3
我从未尝试过,但我认为这是可行的。不过这不会是一个简单的复选框。
您需要执行以下操作:
- 为您的 S3 存储桶启用“服务器访问日志记录”,
创建一个 Lambda 函数并将其安排为每 x 分钟(速率)运行一次或按 cron 运行一次。此函数需要:
- 抓取这些日志,统计某个 IP 地址在一定时间间隔内访问某个资源(文件或 bucket)的次数,或者获取 404 的 IP 地址...等等,
- 根据你定义的阈值,决定是否要阻止该 IP,
- 修改您的 S3 存储桶的策略(您可以利用 Boto3 来实现这一点)并添加您之前决定阻止的 IP(NotIpAddress 是您的朋友)。