如何为基于 Amazon S3 的网站实施反抓取机制?

如何为基于 Amazon S3 的网站实施反抓取机制?

我在 amazon S3 上托管了一些经常更新的静态网页。我想实施一些反抓取机制,比如禁止发出过多请求或发出看起来像机器人的请求的 IP 等。我知道没有什么是万无一失的,但我只是想给他们一些阻力并让他们的工作变得困难。我知道有一种方法可以在存储桶策略中将 IP 地址列入黑名单,但有没有动态的方法来实现这一点,比如...如果特定 IP 每分钟发出....特定数量的请求....那么,在特定时间内禁止它。或者类似的东西。

答案1

最适合这项工作的 AWS 服务是网页应用防火墙,Web 应用程序防火墙。

来自安全自动化他们的文档部分:

机器人和抓取工具:可公开访问的 Web 应用程序的运营商必须相信访问其内容的客户端能够准确识别自己,并且会按预期使用服务。但是,某些自动化客户端(例如内容抓取工具或恶意机器人)会歪曲自己的身份以绕过限制。此解决方案可帮助您识别和阻止恶意机器人和抓取工具。

答案2

我不认为你可以用 S3 做到这一点,但你可以禁止超出预设限制的 IP 地址使用 CloudFront。只需设置 CloudFront 来提供 S3 内容并阻止对 S3 的直接访问。您的成本可能会略有降低,也可能会略有上升,但这不会对您的成本产生巨大影响。

答案3

我从未尝试过,但我认为这是可行的。不过这不会是一个简单的复选框。

您需要执行以下操作:

  • 为您的 S3 存储桶启用“服务器访问日志记录”,
  • 创建一个 Lambda 函数并将其安排为每 x 分钟(速率)运行一次或按 cron 运行一次。此函数需要:

    • 抓取这些日志,统计某个 IP 地址在一定时间间隔内访问某个资源(文件或 bucket)的次数,或者获取 404 的 IP 地址...等等,
    • 根据你定义的阈值,决定是否要阻止该 IP,
    • 修改您的 S3 存储桶的策略(您可以利用 Boto3 来实现这一点)并添加您之前决定阻止的 IP(NotIpAddress 是您的朋友)。

相关内容