"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Obtener la IP del cliente real al utilizar el balanceador de carga de aplicaciones (ALB) en AWS Lambda

Obtener la IP del cliente real al utilizar el balanceador de carga de aplicaciones (ALB) en AWS Lambda

Publicado el 2024-08-06
Navegar:846

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

Cuando era nuevo en AWS, me enfrenté a un desafío interesante mientras trabajaba en una tarea para firmar digitalmente un documento, que requería la IP del cliente como parte de la firma electrónica. Al principio me emocioné cuando la implementación pareció funcionar perfectamente la primera vez. Sin embargo, mi entusiasmo duró poco. Durante las pruebas, noté que se devolvía la misma dirección IP, incluso cuando accedía a la aplicación desde diferentes máquinas. Fue entonces cuando me di cuenta de que la dirección IP que estaba recibiendo no era la IP real del cliente sino la IP del balanceador de carga.

Este descubrimiento me llevó por un camino de investigación y aprendizaje. Tuve que profundizar más para comprender qué estaba sucediendo y cómo recuperar la IP real del cliente. En este blog, compartiré mi experiencia y brindaré una guía completa sobre cómo lograr esto usando AWS Lambda y Python, asegurando que pueda capturar con precisión la dirección IP del cliente cuando use un balanceador de carga de aplicaciones (ALB).

Comprender el desafío

Cuando un cliente realiza una solicitud a su aplicación a través de un ALB, el balanceador de carga actúa como intermediario. En consecuencia, la dirección IP que ve su aplicación es la del ALB, no la del cliente. Para solucionar este problema, ALB incluye la IP del cliente en el encabezado HTTP X-Forwarded-For. Este encabezado puede contener varias direcciones IP en caso de que la solicitud haya pasado por varios servidores proxy.

Esto es lo que debemos manejar:

  • Extraiga la IP del cliente: recupere y analice el encabezado X-Forwarded-For.

  • Manejar múltiples IP: asegúrese de obtener la IP de cliente correcta incluso cuando haya varios servidores proxy involucrados.

Consideración de seguridad

El encabezado X-Forwarded-For debe usarse con precaución debido a posibles riesgos de seguridad. Las entradas sólo pueden considerarse confiables si se agregan mediante sistemas que estén adecuadamente protegidos dentro de la red. Esto garantiza que las IP del cliente no sean manipuladas y sean confiables.

Elegir las herramientas adecuadas

AWS Lambda y Python

AWS Lambda es un servicio informático sin servidor que le permite ejecutar código sin aprovisionar ni administrar servidores. Python, con su simplicidad y legibilidad, es una excelente opción para manejar esta tarea dentro de una función Lambda.

Componentes clave

  1. Función AWS Lambda: la función principal que procesa las solicitudes entrantes.

  2. Application Load Balancer (ALB): el balanceador de carga que reenvía solicitudes a la función Lambda.

Detalles de implementacion

Configuración de AWS Lambda con ALB

Primero, asegúrese de que su función Lambda esté configurada e integrada con un ALB. Siga la guía oficial de AWS si es necesario: Uso de funciones Lambda como objetivos para Application Load Balancer.

Código de función Lambda

Profundicemos en el código Python de la función Lambda. Esta función extraerá la dirección IP del cliente del encabezado X-Fordered-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})
    }

Explicación

  • Extraer el encabezado: recupera el encabezado X-Forwarded-For de la solicitud entrante.

  • Analizar el encabezado: tome la primera IP, que representa la IP original del cliente.

  • Mecanismo alternativo: utilice la IP de origen del contexto de la solicitud si el encabezado no está presente.

  • Registro y respuesta: registra y devuelve la IP del cliente para su verificación.

Ejemplo de solicitud y respuesta

Pedido:

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

Respuesta:

{
    "client_ip": "203.0.113.195"
}

Conclusión

Identificar la IP del cliente real en una función AWS Lambda detrás de un ALB requiere un manejo cuidadoso del encabezado X-Forwarded-For. Este enfoque garantiza un registro de IP preciso y mejora la capacidad de la aplicación para personalizar y proteger las interacciones del usuario.

Referencias

  • Documentación de AWS ALB:

  • Python en AWS Lambda:

  • Encabezados HTTP explicados

Declaración de liberación Este artículo se reproduce en: https://dev.to/rkj180220/getting-the-actual-client-ip-when-using-application-load-balancer-alb-in-aws-lambda-4fcn?1Si hay alguno infracción, comuníquese con [email protected] para eliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3