私は現在、着信リクエスターのパブリック IP アドレスをログに記録したい Node.js ラムダ関数を作成しています。API Gateway と Lambda の両方のドキュメントを 1 日中調べましたが、解決策が見つかりませんでした。
ラムダevent
オブジェクトには、ユーザーの IP を抽出するために使用できる要求メタデータが含まれていますか?
私は現在、着信リクエスターのパブリック IP アドレスをログに記録したい Node.js ラムダ関数を作成しています。API Gateway と Lambda の両方のドキュメントを 1 日中調べましたが、解決策が見つかりませんでした。
ラムダevent
オブジェクトには、ユーザーの IP を抽出するために使用できる要求メタデータが含まれていますか?
HTTP API の更新
@Elijah のコメントを追加します。HTTP API の形式は次のようになります。
event['requestContext']['http']['sourceIp']
編集
より良い方法は、実際に確認することです
event['requestContext']['identity']['sourceIp']
同じオブジェクトから User-Agent を取得することもできます
event['requestContext']['identity']['userAgent']
以下のCesarのコメントを参照してください。ヘッダーは簡単に偽装され、ユーザーはX-Forwarded-For
何にでも設定できます。私の知る限り、sourceIp
上記はTCP接続から取得されます。
元の答え
2017 年 9 月の時点で、Lambda プロキシ統合を使用して API Gateway でメソッドを作成できます。これにより、次へのアクセスが可能になります。
events['headers']['X-Forwarded-For']
次のようになります1.1.1.1,214.25.52.1
最初の ip1.1.1.1
は、ユーザーのパブリック IP アドレスです。
$context.identity.sourceIp
以下は、Lambda 関数でAPI Gateway を使用する簡単なデモです。
API マッピング テンプレート:
{
"sourceIP" : "$context.identity.sourceIp"
}
ラムダ関数:
'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
console.log('SourceIP =', event.identity.sourceIP);
callback(null, event.identity.sourceIP);
};
APIゲートウェイでは、それは値です
$context.identity.sourceIp
マッピング テンプレートを介して Lambda に渡すことができます。