В настоящее время я пишу функцию 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-адрес вашего пользователя.
Ответ 3
В Gateway API это значение
$context.identity.sourceIp
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference
Вы можете передать это через вашу Лямбду через шаблон сопоставления.