Назад | Перейти на главную страницу

не уверен, как правильно обрабатывать слушателей / группы + проверка работоспособности в балансировщике нагрузки на aws

Я пытаюсь осмыслить балансировщик нагрузки приложений AWS. У меня немного сложная ситуация, когда я запускаю экземпляр ec2 с сервером nodejs, который мне в конечном итоге нужен только для https. Поэтому сначала я настраиваю прослушиватель на 443, у которого есть проверка работоспособности на порту 443, и перенаправляю в группу, у которой мой экземпляр ec2 является целью.

У меня есть кулинарная книга для шеф-повара, которая автоматизирует настройку ящика, настройку моего сервера nodejs и, наконец, получение / настройку сертификата SSL (с помощью acmetool). Для того, чтобы это работало, в коробке должны быть открыты порты 402, 4402 и 80.

Итак, чтобы заставить это работать, мне понадобились слушатели для 402, 4402 и 80, а затем --- что требовало создания отдельных групп с каждым из этих портов? (здесь я начал путаться) ... и затем у каждой из этих групп есть своя собственная проверка работоспособности --- так что тогда я понял, что я не могу пройти проверку на порт 443, если у меня изначально не будет сертификат SSL ... Это заставило меня создать еще один прослушиватель и группу на порту 12345, а затем заставить мой сервер nodejs отвечать на проверку работоспособности на 12345 ... Что казалось странным, потому что я в основном использую два сервера nodejs, один в 12345 ТОЛЬКО для проверки работоспособности, а другой на 443 для моего настоящего приложения.

Мне пришлось использовать 12345, потому что в acmetool есть демон «перенаправления», который прослушивает порт 80 и перенаправляет все запросы на 443, за исключением запросов, которые он получает для своих запросов SSL, которые он выполняет для выдачи / обновления сертификата.

Итак ... моя проблема в том, что мне кажется, что у меня есть все эти группы, которые теперь имеют одинаковую конечную точку проверки работоспособности на порту 12345 ... Что кажется очень неэффективным, поскольку я могу только предположить, что это означает, что балансировщик нагрузки работает для проверки связи с той же конечной точкой n раз, по одному для каждой группы. Это заставило меня подумать, что я, должно быть, все делаю неправильно.

Я согласен с вами, что вы делаете это неправильно. Я бы поступил следующим образом:

  • ALB прослушивает порт 443, прерывая трафик SSL.
  • Используйте Amazon ACM, чтобы сгенерировать сертификат и прикрепить его к прослушивателю HTTPS.
  • Целевая группа ALB отправляет незашифрованный трафик на порт 80 экземпляра.
  • Группа безопасности для экземпляров разрешает доступ только к порту 80 из вашего ALB.

Таким образом, путь запроса вашего клиента:

Клиент -> [HTTPS] -> ALB -> [HTTP] -> Экземпляр

Этим достигается несколько вещей:

  1. Предотвращает необходимость управления сертификатами SSL в отдельных экземплярах. Ваше приложение по-прежнему может определить, что клиент зашифрован с помощью X-Forwarded-Proto заголовок, который ALB отправляет вам в своем запросе (и поскольку у вас будет только прослушиватель HTTPS, значение этого заголовка всегда будет https.
  2. Поскольку группа безопасности ограничивает трафик порта 80, исходящий только от ALB, вы можете быть уверены, что никто не сможет получить доступ к порту 80 вашего экземпляра. Если ваши экземпляры даже не имеют общедоступных IP-адресов, это еще одна дополнительная защита.
  3. Сертификаты Amazon ACM бесплатны и имеют дополнительное преимущество, заключающееся в том, что Amazon позаботится об обработке и обновлении закрытого ключа за вас (если вы аутентифицируетесь с помощью DNS). Это снимает еще одну головную боль.

Единственное предостережение в том, что ваш трафик, когда он покидает балансировщик нагрузки, предназначенный для ваших экземпляров, теперь не зашифрован. Обычно это нормально, если у вас нет оснований для соответствия требованиям, чтобы весь трафик оставался в зашифрованном состоянии на всех этапах.

В этом случае возможно (по-видимому, я никогда не делал этого сам) использовать самоподписанный сертификат в ваших экземплярах. В этом случае вы можете создать сертификат, который действует в течение длительного периода времени (может быть, 3 года), и использовать раздел SSL-сертификатов приложения Opsworks для загрузки его частей. Затем он станет доступен в пакете данных приложения на экземпляре, где вы можете извлечь части сертификата SSL и установить их в свое приложение до запуска службы. Затем настройте целевую группу для маршрутизации трафика на HTTPS / 443 на вашем экземпляре и соответствующим образом измените проверки работоспособности и группы безопасности.