Maison > développement back-end > Tutoriel Python > Obtention de l'adresse IP client réelle lors de l'utilisation de l'Application Load Balancer (ALB) dans AWS Lambda

Obtention de l'adresse IP client réelle lors de l'utilisation de l'Application Load Balancer (ALB) dans AWS Lambda

王林
Libérer: 2024-07-21 04:25:19
original
739 Les gens l'ont consulté

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

Lorsque j'étais nouveau sur AWS, j'ai été confronté à un défi intéressant en travaillant sur une tâche de signature numérique d'un document, qui nécessitait l'adresse IP du client dans le cadre de la signature électronique. Au début, j’ai été ravi lorsque la mise en œuvre a semblé fonctionner parfaitement du premier coup. Cependant, mon enthousiasme fut de courte durée. Lors des tests, j'ai remarqué que la même adresse IP était renvoyée, même lorsque j'accédais à l'application depuis différentes machines. C'est alors que j'ai réalisé que l'adresse IP que je recevais n'était pas l'adresse IP réelle du client mais l'adresse IP de l'équilibreur de charge.

Cette découverte m'a conduit sur un chemin d'investigation et d'apprentissage. J'ai dû creuser plus profondément pour comprendre ce qui se passait et comment récupérer la véritable adresse IP du client. Dans ce blog, je partagerai mon expérience et fournirai un guide complet sur la façon d'y parvenir en utilisant AWS Lambda et Python, en vous assurant que vous pouvez capturer avec précision l'adresse IP du client lors de l'utilisation d'un équilibreur de charge d'application (ALB).

Comprendre le défi

Lorsqu'un client fait une requête à votre application via un ALB, l'équilibreur de charge agit comme intermédiaire. Par conséquent, l’adresse IP vue par votre application est celle de l’ALB, et non celle du client. Pour résoudre ce problème, ALB inclut l'adresse IP du client dans l'en-tête HTTP X-Forwarded-For. Cet en-tête peut contenir plusieurs adresses IP au cas où la requête serait passée par plusieurs proxys.

Voici ce que nous devons gérer :

  • Extraire l'adresse IP du client : récupérez et analysez l'en-tête X-Forwarded-For.

  • Gérer plusieurs adresses IP : assurez-vous que nous obtenons la bonne adresse IP client même lorsque plusieurs proxys sont impliqués.

Considération de sécurité

L'en-tête X-Forwarded-For doit être utilisé avec prudence en raison des risques de sécurité potentiels. Les entrées ne peuvent être considérées comme dignes de confiance que si elles sont ajoutées par des systèmes correctement sécurisés au sein du réseau. Cela garantit que les adresses IP des clients ne sont pas falsifiées et sont fiables.

Choisir les bons outils

AWS Lambda et Python

AWS Lambda est un service de calcul sans serveur qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs. Python, avec sa simplicité et sa lisibilité, est un excellent choix pour gérer cette tâche au sein d'une fonction Lambda.

Composants clés

  1. Fonction AWS Lambda : fonction principale qui traite les demandes entrantes.

  2. Application Load Balancer (ALB) : l'équilibreur de charge qui transmet les requêtes à la fonction Lambda.

Détails de mise en œuvre

Configuration d'AWS Lambda avec ALB

Tout d'abord, assurez-vous que votre fonction Lambda est configurée et intégrée à un ALB. Suivez le guide officiel d'AWS si nécessaire : Utilisation des fonctions Lambda comme cibles pour Application Load Balancer.

Code de fonction Lambda

Plongeons dans le code Python de la fonction Lambda. Cette fonction extraira l'adresse IP du client de l'en-tête X-Forwarded-For.

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

Copier après la connexion

Explication

  • Extraire l'en-tête : récupérez l'en-tête X-Forwarded-For de la requête entrante.

  • Analyser l'en-tête : prenez la première adresse IP, qui représente l'adresse IP d'origine du client.

  • Mécanisme de repli : utilisez l'adresse IP source du contexte de la requête si l'en-tête n'est pas présent.

  • Journalisation et réponse : enregistrez et renvoyez l'adresse IP du client pour vérification.

Exemple de demande et de réponse

Demande :

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

Copier après la connexion

Réponse :

{
    "client_ip": "203.0.113.195"
}

Copier après la connexion

Conclusion

L'identification de l'adresse IP réelle du client dans une fonction AWS Lambda derrière un ALB nécessite une gestion minutieuse de l'en-tête X-Forwarded-For. Cette approche garantit une journalisation IP précise et améliore la capacité de l'application à personnaliser et sécuriser les interactions des utilisateurs.

Références

  • Documentation AWS ALB :

  • Python dans AWS Lambda :

  • Explication des en-têtes HTTP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal