Als ich neu bei AWS war, stand ich vor einer interessanten Herausforderung, als ich an der Aufgabe arbeitete, ein Dokument digital zu signieren, was die IP des Kunden als Teil der elektronischen Signatur erforderte. Ich war zunächst begeistert, als die Umsetzung auf Anhieb perfekt zu funktionieren schien. Allerdings war meine Aufregung nur von kurzer Dauer. Während des Tests ist mir aufgefallen, dass dieselbe IP-Adresse zurückgegeben wurde, selbst wenn ich von verschiedenen Computern aus auf die Anwendung zugegriffen habe. Da wurde mir klar, dass die IP-Adresse, die ich erhielt, nicht die tatsächliche Client-IP, sondern die IP des Load Balancers war.
Diese Entdeckung führte mich auf einen Weg des Forschens und Lernens. Ich musste tiefer graben, um zu verstehen, was passierte und wie ich die echte Client-IP abrufen konnte. In diesem Blog werde ich meine Erfahrungen teilen und eine umfassende Anleitung dazu bereitstellen, wie Sie dies mit AWS Lambda und Python erreichen können, um sicherzustellen, dass Sie die IP-Adresse des Clients genau erfassen können, wenn Sie einen Application Load Balancer (ALB) verwenden.
Wenn ein Client über einen ALB eine Anfrage an Ihre Anwendung stellt, fungiert der Load Balancer als Vermittler. Folglich ist die IP-Adresse, die Ihre Anwendung sieht, die des ALB und nicht die des Clients. Um dieses Problem zu beheben, fügt ALB die IP des Clients in den X-Forwarded-For-HTTP-Header ein. Dieser Header kann mehrere IP-Adressen enthalten, falls die Anfrage mehrere Proxys durchlaufen hat.
Das müssen wir erledigen:
Extrahieren Sie die Client-IP: Rufen Sie den X-Forwarded-For-Header ab und analysieren Sie ihn.
Verwaltung mehrerer IPs: Stellen Sie sicher, dass wir die richtige Client-IP erhalten, auch wenn mehrere Proxys beteiligt sind.
Der X-Forwarded-For-Header sollte aufgrund potenzieller Sicherheitsrisiken mit Vorsicht verwendet werden. Die Einträge können nur dann als vertrauenswürdig gelten, wenn sie von Systemen hinzugefügt werden, die innerhalb des Netzwerks ordnungsgemäß abgesichert sind. Dadurch wird sichergestellt, dass die Client-IPs nicht manipuliert werden und zuverlässig sind.
AWS Lambda ist ein serverloser Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitzustellen oder zu verwalten. Python ist aufgrund seiner Einfachheit und Lesbarkeit eine ausgezeichnete Wahl für die Bewältigung dieser Aufgabe innerhalb einer Lambda-Funktion.
AWS Lambda-Funktion: Die Kernfunktion, die eingehende Anfragen verarbeitet.
Application Load Balancer (ALB): Der Load Balancer, der Anfragen an die Lambda-Funktion weiterleitet.
Stellen Sie zunächst sicher, dass Ihre Lambda-Funktion eingerichtet und in einen ALB integriert ist. Befolgen Sie bei Bedarf den offiziellen Leitfaden von AWS: Lambda-Funktionen als Ziele für Application Load Balancer verwenden.
Lassen Sie uns in den Python-Code für die Lambda-Funktion eintauchen. Diese Funktion extrahiert die IP-Adresse des Clients aus dem X-Forwarded-For-Header.
import json def lambda_handler(event, context): # Extract the 'X-Forwarded-For' header x_forwarded_for = event['headers'].get('x-forwarded-for') if x_forwarded_for: # The first IP in the list is the client's IP client_ip = x_forwarded_for.split(',')[0] else: # Fallback if header is not present client_ip = event['requestContext']['identity']['sourceIp'] # Log the client IP print(f"Client IP: {client_ip}") # Respond with the client IP return { 'statusCode': 200, 'body': json.dumps({'client_ip': client_ip}) }
Header extrahieren: Rufen Sie den X-Forwarded-For-Header aus der eingehenden Anfrage ab.
Analysieren Sie den Header: Nehmen Sie die erste IP, die die ursprüngliche IP des Clients darstellt.
Fallback-Mechanismus: Verwenden Sie die Quell-IP aus dem Anforderungskontext, wenn der Header nicht vorhanden ist.
Protokollierung und Antwort: Protokollieren Sie die IP des Clients und geben Sie sie zur Überprüfung zurück.
Anfrage:
{ "headers": { "x-forwarded-for": "203.0.113.195, 70.41.3.18, 150.172.238.178" }, "requestContext": { "identity": { "sourceIp": "70.41.3.18" } } }
Antwort:
{ "client_ip": "203.0.113.195" }
Die Identifizierung der tatsächlichen Client-IP in einer AWS Lambda-Funktion hinter einem ALB erfordert eine sorgfältige Handhabung des X-Forwarded-For-Headers. Dieser Ansatz gewährleistet eine genaue IP-Protokollierung und verbessert die Fähigkeit der Anwendung, Benutzerinteraktionen zu personalisieren und zu sichern.
AWS ALB-Dokumentation:
Python in AWS Lambda:
HTTP-Header erklärt
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3