是否可以在'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函数中编写相同的速率限制代码。
答案 0 :(得分:0)
你应该看看
event.requestContext.identity.sourceIp
它将包含原始客户端IP。
在"身份来源"上创建授权器时部分添加
Context: identity.sourceIp
并启用缓存(默认为300秒)。 这样就不会为每个请求调用您的授权者lambda,因为它会缓存该IP的返回策略。
如果你添加了传递的事件参数的日志记录,你可以试验自己(只是不要忘记缓存,而不是所有对API Gateway的调用都会激活授权者lambda)。
顺便说一句,不要使用" X-Forwarded-For"看看我对另一个@ binshi回答的评论。答案 1 :(得分:-1)
自定义授权者现在可以使用所谓的Enhanced Context。
您应该能够使用appropriate context variable获取该信息(例如$context.identity.sourceIp
)。
您可能也可以使用API映射,但我没有测试过。
答案 2 :(得分:-1)
您可以在
中获取源IP以及任何代理服务器ipevents['headers']['X-Forwarded-For']