Как я могу получить общедоступный IP-адрес пользователя через Amazon API Gateway + Lambda (node)

В настоящее время я пишу функцию Node.js lambda, в которой я хочу зарегистрировать общедоступный IP-адрес входящего реквестера. Я просматривал как API Gateway, так и Lambda docs весь день, но не нашел решения.

Включает ли объект event лямбда метаданные запроса, которые я могу использовать для извлечения IP-адреса пользователя?

Ответ 1

Вот простая демонстрация использования API-шлюза $context.identity.sourceIp в лямбда-функции.

Шаблон сопоставления 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);
};

Ответ 2

редактировать

Лучше всего на самом деле проверить

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

Вы также можете получить User-Agent от одного и того же объекта

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

См. Комментарий Cesar ниже. Заголовки легко подделываются, и пользователь может установить X-Forwarded-For на что угодно. sourceIp выше извлекается из TCP-соединения.

Оригинальный ответ

По состоянию на сентябрь 2017 года вы можете создать метод в API Gateway с интеграцией Lambda Proxy, это даст вам доступ к

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

Что будет выглядеть примерно как 1.1.1.1,214.25.52.1

Первый ip 1.1.1.1 - это публичный IP-адрес вашего пользователя.