amazon-web-services - 如何通过 IP 限制 AWS Lambda 或 API Gateway?
问题描述
我目前正在尝试使用 S3 静态网站、API Gateway 和 AWS Lambda 设计一个无服务器应用程序。我想公开这个网站,所以每个用户没有 API 密钥。
我想防止将这些端点滥用到非常低的水平,例如每 5 秒对给定公共 IP 发出 1 个请求。
是否可以使用 AWS Shield 或在任何这些服务中?
解决方案
2021 年 3 月 23 日更新:
现在,您每 5 分钟可以限制低至 100 个请求!
老答案:
不幸的是,如果您有一个要求,我想防止将这些端点滥用到非常低的位置,例如每 5 秒对给定公共 IP 的 1 个请求。那么 AWS WAF 将不适合。
您可以为基于 WAF 速率的规则设置的最小阈值是 5 分钟内 2000 个请求。
如果您想实施基于 IP 的激进的基于速率的规则,您需要编写自己的解决方案:
- 检查 CloudFront 访问日志并追溯禁止不良 IP
- 使用 Lambda@Edge 实时评估请求 + 相应地禁止
可能更适合您的用例的是在 API 阶段使用节流,而不是基于 IP。您可以做的是设置平均每秒最大请求数,并在超过该数量时让 API 返回 429,请求过多。您可以对此非常积极,或者通过使用十进制值来放松:
推荐阅读
- python - 机器学习:用户警告:Pandas 不允许通过新属性名称创建列
- javascript - 如何在 html div 中存储字符串值?
- django - 单击提交时未调用Django视图功能
- c++ - 动态 2D 数组 - 矩阵乘法(访问冲突读取位置 0xFDFDFDFD)
- powershell - Powershell 使用 ENV 变量转换字符串
- c++ - unordered_map Vs map Vs array - 内存分析
- jquery - 是否可以弯曲滑块(html css)
- cuda - 我可以让 nvlink 列出它实际使用的库吗?
- python - 如何与 discord.py 中的附加图像进行交互
- javascript - 如何将参数从javascript传递给Ajax函数