Heim > Backend-Entwicklung > Python-Tutorial > Abrufen der tatsächlichen Client-IP bei Verwendung von Application Load Balancer (ALB) in AWS Lambda

Abrufen der tatsächlichen Client-IP bei Verwendung von Application Load Balancer (ALB) in AWS Lambda

王林
Freigeben: 2024-07-21 04:25:19
Original
740 Leute haben es durchsucht

Getting the Actual Client IP When Using Application Load Balancer (ALB) in AWS Lambda

Als ich neu bei AWS war, stand ich vor einer interessanten Herausforderung, als ich an einer Aufgabe arbeitete, ein Dokument digital zu signieren, für die die IP des Kunden als Teil der elektronischen Signatur erforderlich war. 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.

Die Herausforderung verstehen

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.

Folgendes 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.

Sicherheitsüberlegungen

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.

Auswahl der richtigen Werkzeuge

AWS Lambda und Python

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.

Schlüsselkomponenten

  1. AWS Lambda-Funktion: Die Kernfunktion, die eingehende Anfragen verarbeitet.

  2. Application Load Balancer (ALB): Der Load Balancer, der Anfragen an die Lambda-Funktion weiterleitet.

Implementierungsdetails

Einrichten von AWS Lambda mit ALB

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.

Lambda-Funktionscode

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})
    }

Nach dem Login kopieren

Erläuterung

  • Header extrahieren: Rufen Sie den X-Forwarded-For-Header aus der eingehenden Anfrage ab.

  • Header analysieren: 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 Reaktion: Protokollieren Sie die IP des Clients und geben Sie sie zur Überprüfung zurück.

Beispielanfrage und -antwort

Anfrage:

{
    "headers": {
        "x-forwarded-for": "203.0.113.195, 70.41.3.18, 150.172.238.178"
    },
    "requestContext": {
        "identity": {
            "sourceIp": "70.41.3.18"
        }
    }
}

Nach dem Login kopieren

Antwort:

{
    "client_ip": "203.0.113.195"
}

Nach dem Login kopieren

Abschluss

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.

Referenzen

  • AWS ALB-Dokumentation:

  • Python in AWS Lambda:

  • HTTP-Header erklärt

Das obige ist der detaillierte Inhalt vonAbrufen der tatsächlichen Client-IP bei Verwendung von Application Load Balancer (ALB) in AWS Lambda. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage