web-dev-qa-db-ja.com

Amazon API Gateway + Lambda(ノード)を介してユーザーのパブリックIPアドレスを取得する方法

現在、Node.jsラムダ関数を作成しています。この関数では、着信リクエスターのパブリックIPアドレスを記録します。 API GatewayとLambdaの両方のドキュメントを1日中探してきましたが、解決策が見つかりませんでした。

Lambda eventオブジェクトには、ユーザーのIPを抽出するために使用できるリクエストメタデータが含まれていますか?

35
rdegges

APIゲートウェイの$context.identity.sourceIpのLambda関数。

APIマッピングテンプレート:

{
    "sourceIP" : "$context.identity.sourceIp"
}

ラムダ関数:

'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
    console.log('SourceIP =', event.sourceIP);
    callback(null, event.sourceIP);
};
33

編集

より良い方法は、実際に確認することです

event['requestContext']['identity']['sourceIp']

同じオブジェクトからUser-Agentを取得することもできます

event['requestContext']['identity']['userAgent']

以下のセザールのコメントを参照してください。ヘッダーは簡単に偽装され、ユーザーはX-Forwarded-Forを任意に設定できます。上記のsourceIpは、TCP=接続から取得されます。

元の回答

2017年9月の時点で、Lambdaプロキシ統合を使用してAPI Gatewayでメソッドを作成できます。これにより、

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

1.1.1.1,214.25.52.1のようになります

最初のIP 1.1.1.1は、ユーザーのパブリックIPアドレスです。

22
Jonathan

API Gatewayでは、それは値です

$context.identity.sourceIp

http://docs.aws.Amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference

マッピングテンプレートを介してLambdaに渡すことができます。

10
Mike76