API网关自定义授权程序 - 获取源IP地址

时间:2017-03-20 00:55:21

标签: amazon-web-services lambda aws-api-gateway

是否可以在'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函数中编写相同的速率限制代码。

3 个答案:

答案 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以及任何代理服务器ip
events['headers']['X-Forwarded-For']