是否可以在'Custom Authorizer' lambda函数中获取API网关请求的源IP地址?
通过API Gateway to a lambda function的实际集成,这绝对是可能的 . 虽然似乎不可能在自定义授权器功能中获取请求者的IP地址 .
我的目标是直接在APIG中进行基于速率的阻止 . A similar solution is described here . 但是,由于我只限制访问一个或两个APIG endpoints ,我宁愿在自定义授权器功能中执行此操作,该功能只是在达到速率限制时将源地址添加到APIG的拒绝策略 .
编辑:澄清一些潜在的混淆 . 我知道我可以通过上面提到的常规集成和this other post来做到这一点 . 但我正在尝试使用自定义授权器功能,因此我不必在所有lambda函数中编写相同的速率限制代码 .
3 回答
你应该看看
它将包含原始客户端IP .
在“标识源”部分创建授权器时添加
并启用缓存(默认为300秒) . 这样就不会为每个请求调用授权者lambda,因为它会缓存该IP的返回策略 .
如果添加传递的事件参数的日志记录,您可以自己试验(只是不要忘记缓存,而不是所有对API Gateway的调用都会激活授权者lambda) .
顺便说一句,不要使用“X-Forwarded-For”看看我对另一个@ binshi的答案的评论 .
自定义授权者现在可以使用所谓的Enhanced Context . 您应该能够使用appropriate context variable获取该信息(例如
$context.identity.sourceIp
) . 你 may 也能够使用API映射,但我还没有测试过 .您可以获取源IP以及任何代理服务器ip