AWS Api Gateway - Http集成客户端IP

时间:2016-12-13 11:51:41

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

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

还有其他办法吗?

4 个答案:

答案 0 :(得分:1)

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

  

$ context.identity.sourceIp

     

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

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

处获得

答案 1 :(得分:0)

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

如果您已经在使用映射模板,那么您可以在任何方便的位置添加它。如果您当前没有使用映射模板并且只需要将sourceIp添加到传入的json请求主体,请添加映射模板,如下所示:

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

答案 2 :(得分:0)

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

requestContext -> identity -> sourceIp

答案 3 :(得分:0)

如果您使用的是API Gateway的HTTP API(2019年12月,announced),请注意“集成”中“高级设置”下的payload format version。您可以选择1.0到2.0。

以Kotlin代码为例,对于1.0,您可以按如下方式从APIGatewayProxyRequestEvent中检索源IP。

event.requestContext.identity.sourceIp

对于2.0,您可以按以下方式从APIGatewayV2HTTPEvent中检索源IP。

event.requestContext.http.sourceIp