HTTPS на экземпляре EC2, на котором запущен проект python - PullRequest
0 голосов
/ 11 июля 2020

У меня возникли значительные трудности с разрешением HTTPS в моем экземпляре EC2, который запускает проект python. Время ожидания запроса истекло (ERR_CONNECTION_TIMED_OUT). Однако HTTP работает нормально. Я предпринял следующие шаги.

  1. Я создал сертификат в ACM для следующих доменов: * .mywebsite.com и mywebsite.com

enter image description here

  1. Я настроил Route 53 следующим образом:

enter image description here

Routing policy on the A records is Simple.

  1. Я вошел в прослушиватель для моего балансировщика нагрузки для моего EC2 экземпляр и ИЗМЕНЕНО порт с 80 (HTTP) на 443 (HTTPS) и добавил мой сертификат.

Примечание. «Переадресовать» - это целевая группа, работающая на порту 80 (HTTP). Я прочитал, что это правильно.

enter image description here

  1. Затем я вошел во входящие правила для моей группы безопасности и добавил HTTPS

введите описание изображения здесь

На данный момент у меня есть следующие вопросы:

a) Учитывая, что это проект python / Django, включение HTTPS для EC2 возможно для этого через веб-сайт aws или мне нужно добавить файлы конфигурации и развернуть на моем экземпляре?

б) Нужно ли мне создавать целевую группу, работающую на HTTPS?

c) Нужны ли мне прослушиватели для моей балансировки нагрузки для порта 80 и порта 443 или только для порта 443?

d) В моей группе безопасности мне нужен порт 80 до go до 0.0.0.0/0 и :: 0 /?

e) Следует ли записывать A по DNS-имени балансировщика нагрузки или это должно быть CNAME моей среды?

Спасибо за вашу помощь! Как только мы получим здесь ответ, я напишу руководство и выложу его на YouTube.

1 Ответ

6 голосов
/ 11 июля 2020

Позвольте мне начать с небольшого обзора того, как выполняется запрос в этом случае.

Как вы правильно догадались, Балансировщик нагрузки, Балансировщик нагрузки приложения c может обрабатывать SSL-трафик c. Это также означает, что от балансировщика нагрузки к исходному серверу, упомянутой целевой группе в этом случае, будет передаваться только http-трафик c, а не https. Так что вам не нужно беспокоиться об обработке сертификатов на сервере. Затем ответ от исходного сервера снова упаковывается в туннель SSL и отправляется обратно клиенту с помощью ALB.

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

Это означает, что группа безопасности вашего балансировщика нагрузки должна иметь порт 443 (и, возможно, 80), открытый для всего мира , или вашим пользователям.

Между исходным сервером и ALB трафик c проходит через порт, на котором работает ваше приложение, это то, что группа безопасности сервера должна разрешать доступ к ALB.

Перефразируя, группа безопасности сервера (EC2) должна разрешать ALB на любом порту, на котором запущено приложение.

Примечание: Это не обязательно должно быть 80 или 443, это также может быть 8080, если ваша целевая группа знает об этом и пересылает запрос на этот порт.

Теперь, чтобы ответить на ваш вопрос ns:

a) Учитывая, что это проект python / Django, включение HTTPS для EC2 можно сделать через веб-сайт aws или мне нужно добавить файлы конфигурации и развернуть к моему экземпляру? Вы не обязаны этого делать. Как я уже упоминал, шифрование / дешифрование можно выгрузить в ALB. Подробнее об этом читайте в документации здесь .

б) Нужно ли мне создавать целевую группу, работающую на HTTPS? Это основано на предыдущем вопросе, нет необходимости. Экземпляр сервера приложений / EC2 не должен беспокоиться об этом.

c) Нужны ли мне прослушиватели для моей балансировки нагрузки для порта 80 и порта 443 или только для порта 443? Это зависит от вашего варианта использования. Базовая потребность - иметь только 443. Если вы хотите, чтобы пользователи по-прежнему заходили на сайт http, а затем перенаправлялись на более безопасную версию https, вы снова можете использовать для этого ALB. Подробнее об этом здесь .

d) В моей группе безопасности мне нужен порт 80 до go до 0.0.0.0/0 и :: 0 /?
Для ALB - да, но не для экземпляров EC2. Помните, что Ec2 никогда не общается напрямую с пользователями, только с ALB. Таким образом, вы можете более жестко контролировать трафик c на EC2.

e) Следует ли записывать A по DNS-имени балансировщика нагрузки или это должно быть CNAME моей среды? Используйте записи псевдонима. Им намного проще управлять, и AWS позаботится о сопоставлении. Подробнее об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...