J'écris actuellement une fonction lambda Node.js, dans laquelle je veux enregistrer l'adresse IP publique du demandeur entrant. J'ai regardé à la fois les documents API Gateway et Lambda toute la journée, mais je n'ai pas trouvé de solution.
L'objet lambda event
inclut-il des métadonnées de demande que je peux utiliser pour extraire l'IP de l'utilisateur?
Voici une démonstration simple de l'utilisation de $context.identity.sourceIp
dans une fonction Lambda.
Modèle de mappage d'API:
{
"sourceIP" : "$context.identity.sourceIp"
}
Fonction lambda:
'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
console.log('SourceIP =', event.sourceIP);
callback(null, event.sourceIP);
};
Modifier
Une meilleure façon est en fait de vérifier
event['requestContext']['identity']['sourceIp']
Vous pouvez également obtenir l'agent utilisateur à partir du même objet
event['requestContext']['identity']['userAgent']
Voir le commentaire de César ci-dessous. Les en-têtes sont facilement usurpés et l'utilisateur peut définir X-Forwarded-For
à tout. AFAIK le sourceIp
ci-dessus est récupéré de la connexion TCP.
Réponse originale
Depuis septembre 2017, vous pouvez créer une méthode dans API Gateway avec l'intégration de Lambda Proxy, cela vous donnera accès à
events['headers']['X-Forwarded-For']
Qui ressemblera à quelque chose comme 1.1.1.1,214.25.52.1
Le premier ip 1.1.1.1
est l'adresse IP publique de votre utilisateur.
Dans la passerelle API, c'est la valeur
$context.identity.sourceIp
Vous pouvez transmettre cela à votre Lambda via un modèle de mappage.