Использование CloudFront с внешним DNS-сервером, указывающим на экземпляр EC2

Я пытаюсь настроить облачный интерфейс с помощью своего экземпляра ec2. Домен находится на Dreamhost, и я добавил запись CNAME, указывающую на URL-адрес облачного интерфейса.

Я использую Lets Encrypt на своем экземпляре EC2. Если я использую свой эластичный IP-адрес и устанавливаю для него запись A на Dreamhost, он пересылается нормально, и все работает. Если я указываю запись CNAME на URL-адрес облачного интерфейса, я получаю ошибку 502.

Следуя руководству по устранению неполадок, которое здесь, Я проверил свой сертификат SSL с помощью онлайн-сервиса, и он показывает, что все в порядке.

Что мне не хватает? Нужно ли добавлять URL-адрес облачного интерфейса в мой сертификат или как?

Кроме того, я указываю сертификат SSL дистрибутива на сертификат, размещенный в AWS Certificate Manager, который, как мне кажется, в конечном итоге указывает на мое происхождение. Я указал сертификат на свой URL-адрес и добавил запись CNAME, чтобы подтвердить право собственности, и все это, похоже, работало нормально.

ОБНОВЛЕНИЕ:

Я подключил свой общедоступный URL-адрес ec2 к онлайн-проверке SSL и получил результат ниже. Возможно, это могло быть частью проблемы? Я получаю тот же результат, если ввожу свой эластичный IP. Похоже, что это могло быть виновником, но я понятия не имею, что делать дальше. Вернемся к гуглю ..

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

ОБНОВЛЕНИЕ 2:

Из того, что я читаю, мне нужно убедиться, что промежуточный сертификат установлен на моем экземпляре ec2. Я также узнал, что в Apache 2.4 файл fullchain.pem заменяет старый файл cert.pem как SSLCertificateFile.

Я изменил содержимое /etc/httpd/conf/httpd-le-ssl.conf следующим образом:

   <VirtualHost *:443>
      DocumentRoot "/var/www/html"
      ServerName "test.example.com"
      ServerAlias "test.example.com"
      Include /etc/letsencrypt/options-ssl-apache.conf
      SSLCertificateFile /etc/letsencrypt/live/test.example.com/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/test.example.com/privkey.pem
   </VirtualHost>

После изменения этого и перезапуска службы httpd я все еще получаю сообщение об ошибке на моем URL-адресе. Когда я подключаю test.example.com к проверке SSL, он показывает следующее:

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

Имейте в виду, что в первом опубликованном мной снимке экрана использовался мой эластичный IP-адрес, а не URL-адрес test.example.com, поэтому их нельзя сравнивать. К сожалению, у меня нет снимка экрана, на котором показано, как выглядел test.example.com до того, как я внес изменения, но я все еще получаю ошибку 502, так что, по-видимому, это не исправляет.

ОБНОВЛЕНИЕ 3:

Похоже, мои заголовки ответов показывают server: CloudFront, когда я перехожу на test.example.com, так что это шаг в правильном направлении. Раньше я этого совсем не понимал.

ОБНОВЛЕНИЕ 4:

Я загрузил openssl и смог получить следующую информацию. Странно, что цепочка сертификатов даже не показывает, позволяет шифрование в качестве источника сертификата.

Первоначально я установил свой экземпляр EC2, используя сертификат letsencrypt, используя test.example.com. Затем, когда я создал облачное распространение, я использовал диспетчер сертификатов для создания сертификата, указывающего на мой test.example.com. Теперь мне интересно, правильно ли я настроил это, поскольку на выходе openssl отображается только сертификат Amazon. Меня смущает взаимодействие между диспетчером сертификатов и возможностью шифрования сертификата, который, похоже, указывает на один и тот же URL-адрес. фу.

Я думаю, мне придется настроить эластичный балансировщик нагрузки и использовать сертификат ACM в ELB. Тогда я думаю, мне больше не понадобятся сертификаты Let's encrypt cert на экземпляре EC2?

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

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

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


comment
Что вы используете в качестве исходного доменного имени в конфигурации CloudFront? Системный ec2-x-x-x-x.*.amazonaws.com адрес или что-то еще?   -  person Michael - sqlbot    schedule 05.11.2018
comment
Как вы упомянули, я использую публичное доменное имя ec2.   -  person hyphen    schedule 05.11.2018
comment
@ Michael-sqlbot нужно ли мне вводить значение для пути происхождения?   -  person hyphen    schedule 05.11.2018
comment
Нет, скорее всего, вы этого не сделаете, но если бы вы это сделали, это не привело бы к ошибке 502. Перейдите к настройкам поведения кеша и внесите в белый список заголовок Host для пересылки в источник. Подождите не менее 5 минут, затем повторите попытку.   -  person Michael - sqlbot    schedule 05.11.2018
comment
Поэтому я переключил запись CNAME обратно на cloudfront (ранее я изменил ее на эластичный IP-адрес, чтобы продолжить тестирование), а затем я сделал то, что вы предложили, и больше не получаю ошибку 502. Однако, когда я смотрю статистику использования облачного интерфейса, я не вижу никаких запросов или чего-либо на сегодня, поэтому я не уверен, что это работает. Это было час назад, когда я внес эти изменения.   -  person hyphen    schedule 05.11.2018
comment
Для обновления требуется немного времени. Посмотрите заголовки ответов HTTP, чтобы убедиться, что трафик использует CloudFront, или журналы доступа к вашему веб-серверу, в которых не будет отображаться ваш IP-адрес - они будут отображать IP-адреса CloudFront. После подтверждения я отправлю ответ, чтобы объяснить, почему это необходимо и каковы альтернативы.   -  person Michael - sqlbot    schedule 05.11.2018
comment
Хорошо, это глупый вопрос, но он не отображается в заголовках ответов. Как просмотреть журналы доступа к серверу?   -  person hyphen    schedule 05.11.2018
comment
Я говорил о журналах доступа к веб-серверу на вашем экземпляре EC2 ... где бы они ни находились на веб-сервере, который вы запускаете, например /var/log/nginx. Заголовки ответов, которые видит браузер, должны включать Via: ... cloudfront и X-Cache: ... CloudFront.   -  person Michael - sqlbot    schedule 05.11.2018
comment
Я снова получаю ошибку 502. Не уверен, почему изменение DNS заняло так много времени.   -  person hyphen    schedule 05.11.2018
comment
@ Michael-sqlbot, пожалуйста, посмотрите мое обновление.   -  person hyphen    schedule 06.11.2018
comment
Простые шаги: придумайте новое имя хоста, например origin.example.com. Укажите EC2 в DNS. Настройте новый сертификат Lets Encrypt с этим новым именем. Убедитесь, что работаете с вашим браузером. Настройте это как исходное доменное имя в CloudFronr.   -  person Michael - sqlbot    schedule 07.11.2018


Ответы (2)


Если вы используете второй подход, на который указал @Kannaiyan, вам не нужно перемещать доменное имя в AWS. Просто создайте размещенную зону и скопируйте записи NS, созданные в этой зоне, своему провайдеру DNS. Затем вы можете легко подключить свое доменное имя, включая домен вершины, к распределению Cloudfront.

Вы можете проверить мой ответ здесь

person AndyFaizan    schedule 12.07.2019

Если вы хотите использовать собственный SSL с выделенным IP-адресом, AWS будет взимать с вас 600 долларов в месяц. CloudFront предоставит выделенный IP-адрес на периферии и использует ваш SSL для обслуживания с этим IP-адресом.

Вы также можете импортировать пользовательский SSL в свой менеджер AWS Cert, который затем можно использовать для назначения его конечной точке CloudFront. Единственный недостаток этого подхода заключается в том, что вам нужно снова обновить SSL во время обновления сертификата.

Другие альтернативы,

Действия со сторонним поставщиком DNS.

  1. Создайте запись CNAME с вашим провайдером DNS.
  2. Создайте сертификат безопасности AWS с помощью диспетчера сертификатов AWS, который может потребовать подтверждения домена с помощью CNAME или адреса электронной почты. Это БЕСПЛАТНО.
  3. Добавьте запись CNAME в свой дистрибутив CloudFront.
  4. После получения сертификата назначьте его конечной точке CloudFront.

Для запроса DNS на преобразование в IP потребуется дополнительный круговой обход.

CNAME (разрешить) -> DNS-имя хоста CloudFront (something.cloudfront.net) -> разрешить IP.

В качестве альтернативы (также лучший способ сделать это)

Если вы переместите свой DNS на Route 53, вы можете назначить CloudFront распределению, которое разрешит ваш обслуживающий домен в одном запросе DNS.

С приведенной выше настройкой я не нахожу необходимости в Lets Encrypt сертификате с EC2.

Дополнительную информацию о настраиваемых сертификатах SSL с AWS on CloudFront можно найти здесь .

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:

Подтвердите SSL:

  1. Укажите источник вашего облачного интерфейса на ведро S3.
  2. Убедитесь, что URL-адрес облачного интерфейса работает без проблем при подключении к корзине S3 с объектом.
  3. Подтвердите с помощью URL-адреса настраиваемого домена, чтобы убедиться, что настраиваемый сертификат SSL работает.
  4. Теперь измените свое происхождение на сервер EC2.
  5. Убедитесь, что вы зарегистрировали запрос и ответ для целей отладки.
  6. Еще раз подтвердите URL своего личного домена.
  7. Если вы получили 5XX, проверьте ответ от вашего сервера EC2.
person Kannaiyan    schedule 04.11.2018
comment
aws.amazon.com/cloudfront/custom-ssl-domains Вы не Не нужно платить 600 долларов без принуждения к использованию SSL, который не поддерживает SNI в браузере. Если вам нужно доставить контент в браузеры, которые не поддерживают SNI, если вы можете получить сертификат в ACM, все будет в порядке. - person JamesKn; 05.11.2018
comment
@JamesKn Обновил ответ, спасибо, что уловили это. Также добавлен способ импорта сертификатов SSL в AWS Certificate Manager и проблемы, связанные с ним. - person Kannaiyan; 05.11.2018
comment
Думаю, я успешно сделал то, что вы упомянули в начале своего ответа. Я импортировал свой сертификат Let's encrypt в ACM и использовал его в качестве настраиваемого сертификата для распространения Cloudfront. Тем не менее, я все еще получаю сообщение об ошибке 502, о котором не говорится в вашем ответе. - person hyphen; 05.11.2018
comment
Функция SSL без SNI за 600 долларов на 100% не имеет отношения к рассматриваемому вопросу, как и упоминание Route 53. - person Michael - sqlbot; 05.11.2018
comment
@hyphen добавлена ​​дополнительная информация для проверки. - person Kannaiyan; 06.11.2018
comment
@Kannaiyan, пожалуйста, посмотрите мое сообщение. - person hyphen; 06.11.2018
comment
Вы можете использовать ELB, это будет дорого. Если вы используете несколько EC2, я бы порекомендовал несколько записей A с проверкой работоспособности, это будет намного дешевле, чем ELB, если вам не нужны все функции ELB. Если вы переместите свои сертификаты в ACM, ваша жизнь станет проще с SSL. - person Kannaiyan; 07.11.2018