首页 > 解决方案 > 如何通过 IP 限制 AWS Lambda 或 API Gateway?

问题描述

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

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

是否可以使用 AWS Shield 或在任何这些服务中?

标签: amazon-web-servicesaws-lambdaaws-api-gatewaythrottling

解决方案


2021 年 3 月 23 日更新:

现在,您每 5 分钟可以限制低至 100 个请求!

在此处输入图像描述


老答案:

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

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

在此处输入图像描述

如果您想实施基于 IP 的激进的基于速率的规则,您需要编写自己的解决方案:

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

可能更适合您的用例的是在 API 阶段使用节流,而不是基于 IP。您可以做的是设置平均每秒最大请求数,并在超过该数量时让 API 返回 429,请求过多。您可以对此非常积极,或者通过使用十进制值来放松:

在此处输入图像描述


推荐阅读