«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Получение фактического IP-адреса клиента при использовании балансировщика нагрузки приложений (ALB) в AWS Lambda

Получение фактического IP-адреса клиента при использовании балансировщика нагрузки приложений (ALB) в AWS Lambda

Опубликовано 6 августа 2024 г.
Просматривать:319

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

Когда я был новичком в AWS, я столкнулся с интересной проблемой во время работы над задачей по цифровой подписи документа, для которой в качестве части электронной подписи требовался IP-адрес клиента. Поначалу я был в восторге, когда реализация с первого раза заработала идеально. Однако мое волнение было недолгим. Во время тестирования я заметил, что возвращался один и тот же IP-адрес, даже когда я обращался к приложению с разных компьютеров. Именно тогда я понял, что IP-адрес, который я получал, был не фактическим IP-адресом клиента, а IP-адресом балансировщика нагрузки.

Это открытие привело меня на путь исследования и обучения. Мне пришлось копнуть глубже, чтобы понять, что происходит и как получить настоящий IP-адрес клиента. В этом блоге я поделюсь своим опытом и предоставлю подробное руководство о том, как добиться этого с помощью AWS Lambda и Python, гарантируя, что вы сможете точно зафиксировать IP-адрес клиента при использовании балансировщика нагрузки приложений (ALB).

Понимание проблемы

Когда клиент отправляет запрос к вашему приложению через ALB, балансировщик нагрузки выступает в роли посредника. Следовательно, IP-адрес, который видит ваше приложение, принадлежит ALB, а не клиенту. Чтобы решить эту проблему, ALB включает IP-адрес клиента в HTTP-заголовок X-Forwarded-For. Этот заголовок может содержать несколько IP-адресов, если запрос прошел через несколько прокси.

Вот что нам нужно обработать:

  • Извлечение IP-адреса клиента: получение и анализ заголовка X-Forwarded-For.

  • Обработка нескольких IP-адресов: убедитесь, что мы получаем правильный IP-адрес клиента, даже если задействовано несколько прокси-серверов.

Вопросы безопасности

Заголовок X-Forwarded-For следует использовать с осторожностью из-за потенциальных угроз безопасности. Записи можно считать заслуживающими доверия только в том случае, если они добавлены системами, которые должным образом защищены в сети. Это гарантирует, что IP-адреса клиентов не будут подделаны и надежны.

Выбор правильных инструментов

AWS Лямбда и Python

AWS Lambda — это сервис бессерверных вычислений, который позволяет запускать код без выделения серверов и управления ими. Python, благодаря своей простоте и читабельности, является отличным выбором для решения этой задачи с помощью лямбда-функции.

Ключевые компоненты

  1. Лямбда-функция AWS: основная функция, обрабатывающая входящие запросы.

  2. Балансировщик нагрузки приложения (ALB): балансировщик нагрузки, который пересылает запросы функции Lambda.

Детали реализации

Настройка AWS Lambda с ALB

Во-первых, убедитесь, что ваша функция Lambda настроена и интегрирована с ALB. При необходимости следуйте официальному руководству AWS: Использование функций Lambda в качестве целей для Application Load Balancer.

Лямбда-функциональный код

Давайте углубимся в код Python для функции Lambda. Эта функция извлечет IP-адрес клиента из заголовка 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})
    }

Объяснение

  • Извлечение заголовка: извлекает заголовок X-Forwarded-For из входящего запроса.

  • Разбор заголовка: возьмите первый IP-адрес, который представляет собой исходный IP-адрес клиента.

  • Резервный механизм: используйте исходный IP-адрес из контекста запроса, если заголовок отсутствует.

  • Регистрация и ответ: регистрируйте и возвращайте IP-адрес клиента для проверки.

Пример запроса и ответа

Запрос:

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

Ответ:

{
    "client_ip": "203.0.113.195"
}

Заключение

Определение фактического IP-адреса клиента в функции AWS Lambda за ALB требует тщательной обработки заголовка X-Forwarded-For. Такой подход обеспечивает точную регистрацию IP-адресов и расширяет возможности приложения по персонализации и защите взаимодействия с пользователем.

Референции

  • Документация AWS ALB:

  • Python в AWS Lambda:

  • Разъяснение HTTP-заголовков

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/rkj180220/getting-the-actual-client-ip-when-using-application-load-balancer-alb-in-aws-lambda-4fcn?1Если есть какие-либо нарушение, пожалуйста, свяжитесь с [email protected], чтобы удалить
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3