【发布时间】:2017-03-20 00:55:20
【问题描述】:
是否可以在'Custom Authorizer' lambda 函数中获取对 API 网关的请求的源 IP 地址?
这绝对可以通过您的API Gateway to a lambda function 的实际集成来实现。虽然似乎无法在自定义授权函数中获取请求者的 IP 地址。
我的目标是直接在 APIG 中进行基于速率的阻塞。 A similar solution is described here。但是,由于我只限制对一个或两个 APIG 端点的访问,我宁愿在自定义授权函数中执行此操作,该函数只是在 APIG 达到速率限制时将源地址添加到拒绝策略中。
编辑:澄清一些潜在的混淆。我知道我可以通过上面提到的常规集成和this other post 来做到这一点。但我正在尝试利用自定义授权器功能,这样我就不必在我的所有 lambda 函数中编写相同的速率限制代码。
【问题讨论】:
-
“一个自定义授权函数,当它达到速率限制时,它只是将源地址添加到 APIG 的拒绝策略中。” 似乎有问题。策略没有锁定机制,因此考虑到多个并发的过多用户,执行(获取策略、修改策略、保存策略)很容易使您处于这样一种状态,即您“添加”到策略中的每件事也会同时删除其他添加的内容.在无状态世界中,您如何通过计数来确定是否需要限速?
-
计数保存在 DDB 表中,包含 request_id、source_ip 和 TTL 列。然后自定义授权器检查具有给定 source_ip 和大于当前时间的 TTL 的条目数。其中 TTL 类似于当前时间加上 10 秒。锁定是我没有考虑过的,这将是一个问题。也许我最终还是会使用 CloudFront 和 WAF。
-
我想我可以在 DDB 表中添加一个锁定键来访问策略。
-
您会考虑使用使用计划功能提供的速率强制功能吗?它需要使用 API 密钥发送请求。然后 API Gateway 将通过 API 密钥限制请求。
-
@KaHouIeong 不幸的是,您可以拥有的 api 密钥数量有限。
标签: amazon-web-services lambda aws-api-gateway