首页 文章

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

提问于
浏览
2

是否可以在'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 回答

  • 0

    你应该看看

    event.requestContext.identity.sourceIp
    

    它将包含原始客户端IP .

    在“标识源”部分创建授权器时添加

    Context: identity.sourceIp
    

    并启用缓存(默认为300秒) . 这样就不会为每个请求调用授权者lambda,因为它会缓存该IP的返回策略 .

    如果添加传递的事件参数的日志记录,您可以自己试验(只是不要忘记缓存,而不是所有对API Gateway的调用都会激活授权者lambda) .

    顺便说一句,不要使用“X-Forwarded-For”看看我对另一个@ binshi的答案的评论 .

  • -1

    自定义授权者现在可以使用所谓的Enhanced Context . 您应该能够使用appropriate context variable获取该信息(例如 $context.identity.sourceIp ) . 你 may 也能够使用API映射,但我还没有测试过 .

  • -1

    您可以获取源IP以及任何代理服务器ip

    events['headers']['X-Forwarded-For']
    

相关问题