【问题标题】:AWS Api Gateway - Http integration client IPAWS Api Gateway - Http 集成客户端 IP
【发布时间】:2017-04-28 11:26:24
【问题描述】:

我正在使用 AWS API Gateway 作为我的 rest api 应用程序的 http 代理。 问题是,我似乎无法找到获取客户端 IP 地址或将其从 api 网关传递到我的应用程序的方法。 我看到的唯一方法是使用 lambda 函数,但我不能使用它,因为它必须是 http 集成。

还有其他方法吗?

【问题讨论】:

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


    【解决方案1】:

    只需配置请求有效负载映射。你需要的是 $context.identity.sourceIp。根据文档:

    $context.identity.sourceIp

    向 API 发出请求的 TCP 连接的源 IP 地址 网关。

    带有示例的文档可在http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html获得

    【讨论】:

    【解决方案2】:

    您可以在集成响应的映射模板中执行此操作。调用 $context.identity.sourceIp 获取 sourceIp。

    如果您已经在使用映射模板,那么您可以在任何方便的时候添加它。如果您当前没有使用映射模板,而只需将 sourceIp 添加到传入的 json 请求正文中,请添加如下映射模板:

    #set($allParams = $input.path('$'))
    #set($discard=$allParams.put('sourceIp', $context.identity.sourceIp))
    $input.json('$'))
    

    【讨论】:

      【解决方案3】:

      如果您正在使用 API Gateway 的 HTTP API(announced,2019 年 12 月),请注意集成中高级设置下的payload format version。您可以在 1.0 和 2.0 之间进行选择。

      以 Kotlin 代码为例,对于 1.0,您可以从 APIGatewayProxyRequestEvent 检索源 IP,如下所示。

      event.requestContext.identity.sourceIp
      

      对于 2.0,您可以从 APIGatewayV2HTTPEvent 检索源 IP,如下所示。

      event.requestContext.http.sourceIp
      

      【讨论】:

        【解决方案4】:

        如果您使用"proxy"-style 集成,则客户端 IP 在请求中可用(不需要模板映射)。按照上面链接中的代码示例,深入了解“事件”JSON 对象:

        requestContext -> identity -> sourceIp
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-11
          • 2016-03-14
          • 2018-01-09
          • 2018-02-15
          • 1970-01-01
          • 2017-02-23
          • 2020-10-01
          相关资源
          最近更新 更多