如何通过IP限制AWS Lambda或API网关?

Alb*_*ndi 2 throttling amazon-web-services aws-lambda aws-api-gateway

我目前正在尝试使用S3静态网站,API Gateway和AWS Lambda设计无服务器应用程序。我想将此网站公开,所以每个用户没有API密钥。

我想防止将这些端点滥用到非常低的水平,例如给定的公共IP每5秒发出1个请求。

AWS Shield或其中任何一种服务都可能吗?

Joh*_*ein 5

来自AWS 宣布 AWS WAF 的基于速率的规则

AWS 今天宣布了 AWS WAF 的基于速率的规则。这种新规则类型可保护客户网站和 API 免受 Web 层 DDoS 攻击、暴力登录尝试和恶意机器人等威胁。当来自客户端的 Web 请求超过某个可配置的阈值时,会自动触发基于速率的规则。

使用基于评级的规则,客户还可以阻止来自客户端的未来请求,这些请求试图向其网站的某些部分(如登录页面)发送大量请求。客户还可以将此新规则与 CloudWatch 警报和 AWS Lambda 集成,以对对其 API 端点发出异常高调用的客户端采取自定义操作。客户还可以使用基于速率的规则,通过将基于速率的规则与条件相结合来识别与不良机器人相关联的特定恶意用户代理,从而减少不需要的机器人。


Chr*_*nel 5

不幸的是,如果您有一个要求,我想防止将这些端点滥用到非常低的水平,例如给定的公共IP每5秒发出1个请求。则AWS WAF将不合适。

您可以为基于WAF速率的规则设置的最低阈值为5分钟内2000个请求。

在此处输入图片说明

如果要基于IP实施基于主动费率的规则,则需要编写自己的解决方案,其中之一:

  • 检查CloudFront访问日志并追溯禁止不良IP
  • 使用Lambda @ Edge实时评估请求+相应地禁止

可能更适合您的用例的是在API阶段使用限制,而不是基于IP。您可以做的是平均设置最大每秒请求数,并在超出该数目时让API返回429个太多请求。您可以使用它来真正激进,或者使用十进制值来放松:

在此处输入图片说明