"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Obtendo o IP real do cliente ao usar o Application Load Balancer (ALB) no AWS Lambda

Obtendo o IP real do cliente ao usar o Application Load Balancer (ALB) no AWS Lambda

Publicado em 2024-08-06
Navegar:423

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

Quando eu era novo na AWS, enfrentei um desafio interessante enquanto trabalhava em uma tarefa para assinar digitalmente um documento, que exigia o IP do cliente como parte da assinatura eletrônica. Inicialmente, fiquei emocionado quando a implementação pareceu funcionar perfeitamente na primeira vez. No entanto, minha excitação durou pouco. Durante os testes, notei que o mesmo endereço IP estava sendo retornado, mesmo quando eu acessava a aplicação em máquinas diferentes. Foi então que percebi que o endereço IP que estava recebendo não era o IP real do cliente, mas o IP do balanceador de carga.

Essa descoberta me levou a um caminho de investigação e aprendizado. Tive que me aprofundar para entender o que estava acontecendo e como recuperar o IP real do cliente. Neste blog, compartilharei minha experiência e fornecerei um guia completo sobre como conseguir isso usando AWS Lambda e Python, garantindo que você possa capturar com precisão o endereço IP do cliente ao usar um Application Load Balancer (ALB).

Compreendendo o desafio

Quando um cliente faz uma solicitação ao seu aplicativo por meio de um ALB, o balanceador de carga atua como intermediário. Conseqüentemente, o endereço IP que seu aplicativo vê é o do ALB, não o do cliente. Para resolver isso, o ALB inclui o IP do cliente no cabeçalho HTTP X-Forwarded-For. Este cabeçalho pode conter vários endereços IP caso a solicitação tenha passado por vários proxies.

Aqui está o que precisamos lidar:

  • Extraia o IP do cliente: recupere e analise o cabeçalho X-Forwarded-For.

  • Tratar vários IPs: certifique-se de obter o IP do cliente correto mesmo quando vários proxies estiverem envolvidos.

Consideração de segurança

O cabeçalho X-Forwarded-For deve ser usado com cautela devido a possíveis riscos de segurança. As entradas só podem ser consideradas confiáveis ​​se adicionadas por sistemas devidamente protegidos na rede. Isso garante que os IPs do cliente não sejam adulterados e sejam confiáveis.

Escolhendo as ferramentas certas

AWS Lambda e Python

AWS Lambda é um serviço de computação sem servidor que permite executar código sem provisionar ou gerenciar servidores. Python, com sua simplicidade e legibilidade, é uma excelente escolha para lidar com essa tarefa dentro de uma função Lambda.

Componentes chave

  1. Função AWS Lambda: a função principal que processa solicitações recebidas.

  2. Application Load Balancer (ALB): o balanceador de carga que encaminha solicitações para a função Lambda.

Detalhes de implementação

Configurando AWS Lambda com ALB

Primeiro, certifique-se de que sua função Lambda esteja configurada e integrada a um ALB. Siga o guia oficial da AWS, se necessário: Usando funções Lambda como destinos para Application Load Balancer.

Código de função Lambda

Vamos mergulhar no código Python para a função Lambda. Esta função extrairá o endereço IP do cliente do cabeçalho 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})
    }

Explicação

  • Extraia o cabeçalho: recupere o cabeçalho X-Forwarded-For da solicitação recebida.

  • Analisar o cabeçalho: pegue o primeiro IP, que representa o IP original do cliente.

  • Mecanismo de fallback: use o IP de origem do contexto da solicitação se o cabeçalho não estiver presente.

  • Registro e Resposta: Registra e retorna o IP do cliente para verificação.

Exemplo de solicitação e resposta

Solicitar:

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

Resposta:

{
    "client_ip": "203.0.113.195"
}

Conclusão

Identificar o IP real do cliente em uma função AWS Lambda por trás de um ALB requer um tratamento cuidadoso do cabeçalho X-Forwarded-For. Essa abordagem garante registro de IP preciso e aprimora a capacidade do aplicativo de personalizar e proteger as interações do usuário.

Referências

  • Documentação do AWS ALB:

  • Python no AWS Lambda:

  • Cabeçalhos HTTP explicados

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/rkj180220/getting-the-actual-client-ip-when-using-application-load-balancer-alb-in-aws-lambda-4fcn?1Se houver algum violação, entre em contato com [email protected] para excluir
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3