Рейтинг:0

Сбой безопасного подключения через веб-сокет к серверу, работающему на EC2

флаг us

У меня есть сервер веб-сокетов node.js, работающий на экземпляре EC2 на порту 8080. Обычные соединения с веб-сокетами (ws://) работают нормально, но когда я пытаюсь установить безопасное соединение (всс://), соединение через веб-сокет завершается сбоем.

Я понимаю, что запросы wss отправляются на порт 443, поэтому я использую ALB для пересылки запросов с порта 443 на порт 8080. Поскольку я очень новичок в AWS, я не знаю, правильно ли я это делаю. Вот что я сделал.

  1. Сервер Node.js прослушивает порт 8080 в экземпляре EC2.
  2. Это входящие правила безопасности для этого экземпляра EC2.

Правила безопасности входящего трафика

  1. Балансировщик нагрузки приложения с прослушивателем HTTPS: 443 Он перенаправляет его на мой экземпляр EC2 через порт 8080 по протоколу HTTPS. Я также прикрепил SSL-сертификат к ALB.

Я просто не могу понять, что я делаю неправильно. Любая помощь приветствуется.

ОБНОВИТЬ:

  1. Я создал две группы безопасности (ec2-sg и alb-sg) и настроил их так, чтобы ec2-sg получал трафик от alb-sg.

Правила безопасности для входящего трафика (alb-sg)

Правило безопасности исходящего трафика (alb-sg)

Правила безопасности для входящего трафика (ec2-sg)

Однако я не могу заставить его работать. Целевая группа проходит проверку работоспособности, я включил липкую сессию, но подключение через веб-сокет продолжает давать сбой. Обычное соединение ws, которое раньше работало, также перестало работать. Это наводит меня на мысль, что я что-то напутал с ALB (поскольку он работает без балансировщика нагрузки).

Обновление 2:

Я включил журналы доступа для своего балансировщика нагрузки. Вот журнал:

https 2021-10-08T08:55:39.157549Z приложение/alb-latest/3e73469ba9514449 167.94.138.60:32854 172.31.93.226:8080 -1 -1 -1 502 - 41 1215 
"GET https://3.208.76.74:443/ HTTP/1.1" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:144045735746:targetgroup/ec2-8080 -сервер/2cbf4f7eb51c201e 
"Root=1-6160078b-606aed86364c5e3f7db627f1" "-" "arn:aws:acm:us-east-1:144045735746:certificate/53a04011-1ea7-4689-b6c6-a7372e42191d" 0 2021-10:5163T009.Z:5163T09. 
"вперед" "-" "-" "172.31.93.226:8080" "-" "-" "-"

ALB Базовая конфигурация 1

ALB Базовая конфигурация 2

Слушатели ALB Я также включил привязку на уровне группы к целевой группе на 1 день.

Сведения о целевой группе

Tim avatar
флаг gp
Tim
Находятся ли ALB и экземпляр EC2 в одной группе безопасности? Как правило, у вас должно быть по одному SG для каждого, а EC2 SG должен разрешать вход из ALB SG.
Debabrata Mondal avatar
флаг us
@Tim Они были в одной группе безопасности, да. Я изменил это сейчас, но это все еще не работает. Не могли бы вы взглянуть на обновления, которые я разместил?
Tim avatar
флаг gp
Tim
Ваши группы безопасности выглядят нормально, хотя я не могу проверить такие вещи, как идентификаторы. Две вещи, которые нужно сделать: 1) Включить журналы доступа на ALB и нацелить и проверить, что запросы попадают на ALB и сервер - если это проще, вы можете установить стандартный веб-сервер на порт 80 для тестирования. Затем, как только это будет сделано, 2) отредактируйте свой пост, чтобы показать важные части конфигурации ALB.
Debabrata Mondal avatar
флаг us
@ Тим, я отредактировал сообщение. Вам нужна другая информация?
Tim avatar
флаг gp
Tim
Прочитайте мой последний комментарий еще раз. Не просто давайте нам логи, вам нужно их понять, проверить логи на веб-сервере и убедиться, что запрос проходит.Если это не так, вы можете настроить Nginx/Apache и попробовать его с более понятным протоколом, чтобы проверить, как все работает. Я думаю, вам лучше обратиться к профессионалу, мы можем помочь, но я думаю, что вам нужно больше помощи, чем мы можем дать.
флаг cn
Ваш ALB SG разрешает только исходящий порт 8080 для другого SG — он не сможет отправить ответ вашему клиенту. Удалите правило для исходящего трафика и пока сосредоточьтесь на правилах для входящего трафика — группы безопасности сохраняют состояние, поэтому исходящий трафик не требуется и добавляет сложности.
Debabrata Mondal avatar
флаг us
Спасибо @ shearn89, это имеет смысл!
Рейтинг:0
флаг cn

Просто скопируйте и вставьте мой комментарий в ответ на случай, если он решит проблему.

ALB SG разрешает только исходящий порт 8080 в другую SG. Это означает, что он не сможет отправить ответ клиенту, который будет прослушивать какой-то случайный порт, отличный от 8080. Лучший подход — удалить исходящие правила и сосредоточиться на входящих правилах — группы безопасности сохраняют состояние, поэтому исходящие правила не обязательно требуются и добавляют сложности!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.