Вопрос или проблема
В настоящее время у меня есть инфраструктура IoT, состоящая из облачной части:
- сервер backend
- сервер SSH
- прокси-сервер Apache
и клиентской части:
- Агент
где реализованы несколько сервисов, и один из них — это обратный туннель, позволяющий доступ к удаленному рабочему столу на Агенте через HTTPS. Единственный порт, разрешенный для связи между Агентом и backend, — это HTTPS 443.
Обратный туннель осуществляется командой SSH через сервер SSH по HTTPS, используя метод CONNECT. Прокси Apache играет фундаментальную роль для обратного туннеля, потому что запрос HTTPS завершается там, и с помощью метода CONNECT запрос сессии ssh проходит через сервер SSH.
Я хочу перенести эту архитектуру в облако AWS, и мой вопрос:
Может ли AWS Application Load Balancer заменить Apache proxy для поддержания той же функции обратного туннеля, что и сейчас?
Если вы просто пытаетесь изолировать свой сервер от прямого размещения на публичном IP (как и следует), то вы можете использовать NLB (сетевой балансировщик нагрузки). NLB настраивается в публичной подсети, маршрутизируя TCP 443 обратно на ваш экземпляр EC2, работающий с настройкой Apache в частной подсети.
https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html
Ответ или решение
Теория (Theory):
Чтобы ответить на главный вопрос об использовании AWS Application Load Balancer (ALB) в качестве замены для Apache Proxy, нужно понять, какие функции выполняет Apache Proxy в текущей инфраструктуре. Apache Proxy выступает как посредник, который принимает HTTPS-запросы и, используя метод CONNECT, направляет SSH-соединения через SSH-сервер для обеспечения обратного туннелирования. Это позволяет клиентам безопасно подключаться к удаленному рабочему столу с помощью обратного туннеля через HTTPS, который является единственным разрешенным портом для общения между клиентской частью и серверной частью.
AWS Application Load Balancer – это фокусированный на уровне приложений балансировщик нагрузки, который досконально обрабатывает HTTP/HTTPS-запросы, включая поддержку хостинг-ориентированных и контент-ориентированных решений. Он может распространять входящий трафик между несколькими EC2-инстансами или службами в Amazon ECS. Однако задача, которую выполняет Apache Proxy в вашей инфраструктуре – создание SSH-туннелей через метод CONNECT – не является стандартной функцией ALB.
Пример (Example):
Рассмотрим текущую инфраструктуру. Ваша Apache Proxy принимает входящие HTTPS-запросы. Как только запросы достигают Apache Proxy, используется метод CONNECT для передачи SSH-соединения через SSH-сервер. Эта настройка позволяет использовать один порт (443) для осуществления связи между удаленными агентами и основной серверной частью с поддержкой удаленного рабочего стола.
Тем не менее, ALB, несмотря на широкие функциональные возможности балансировки нагрузки на уровне приложений, такие как обработка HTTP/HTTPS-запросов, поддержка безопасности сертификатов AWS и автоматическое масштабирование, не поддерживает туннелирование по SSH с использованием метода CONNECT. Альтернативой мог бы быть AWS Network Load Balancer (NLB), который работает на уровне TCP и может маршрутизировать HTTPS трафик на ваш текущий Apache Proxy, находящийся в частной подсети.
Применение (Application):
В вашей ситуации, если вам нужно сохранить возможность обратного туннелирования SSH через HTTPS, заменив Apache Proxy, логика использования остается сложной с ALB. Вы можете рассмотреть комбинированное использование ALB и NLB. ALB может обрабатывать основной HTTP/HTTPS трафик, распределяя его между вашими сервисами, а NLB может работать с низкоуровневыми транспортными протоколами.
Даже с NLB, вам возможно потребуется сохранить какую-то часть существующей логики в виде Jump, Bastion Host или Proxy, способного принимать и обрабатывать SSH CONNECT туннели. Вы могли бы разместить Apache Proxy в частной подсети, где его защищенность будет обеспечиваться сетевым балансировщиком нагрузки NLB, который был бы настроен на маршрутизацию трафика, поступающего на порт 443, к этому серверу.
Таким образом, при текущем уровне функционала ALB не заменяет Apache Proxy для выполнения обратного туннелирования SSH через CONNECT метод. Это связано с тем, что ALB был предназначен для обработки и распределения трафика на уровне приложений (7-й уровень OSI) и не поддерживает функции, специфичные для транспортного уровня, такие как SSH CONNECT-туннелирование, это не отвечает вашим требованиям относительно единственного разрешенного порта связи.
В результате, лучшим подходом оставалось бы сохранение текущего Proxy сервера на EC2-инстансе в AWS с использованием NLB для обеспечения безопасности в публичной подсети.
Эти рекомендации помогут сохранить безопасность и существующую функциональность вашей системы, принося значительные выгоды от перехода в облако AWS за счет его масштабируемости и надежности. Вы всегда можете подключиться к AWS Solutions Architect для более специфического дизайна вашей архитектуры с учетом каждого компонента.