Google с августа 2016 использует HTTPS как один из сигналов ранжирования. Amazon раздает своим пользователям бесплатные сертификаты. Эти два фактора заставили меня искать способ включения HTTPS для моего блога на S3. Решение довольно простое: спрятать S3 за CloudFront.

Прежде чем начать

CloudFront - это кэширующий прокси сервер. При работе с ним нужно запастись терпением. Каждая ошибка в настройках - это ожидание 20-25 минут, пока исправления раскатятся по серверам.

Мой опыт основан на прикручивании HTTPS к моему блогу на английском. Мой опыт релевантен для любого статичного сайта, который хостится на S3, вне зависимости от того как он сделан: с помощью Jekyll или Pelican, или другим генератором, или вообще руками.

Шаг #1. Запрашиваем сертификат в ACM

Перейдите в консоль ACM и запросите сертификат. Надеюсь, что у вас есть доступ к почтовым ящикам владельца и контактов домена. Amazon отправит на эти адреса письмо со ссылкой на верификацию.

Важно! Если используете домен без www (domain.com) как я, запрашивайте сертификат для domain.com без "www." или "*." перед ним.

Шаг #2. Создаем CloudFront distribution

Идем в консоль CloudFront и выбираем "Create new Distribution".

Первым делом указываем метод доставки контента. Нужно выбрать Web.

Delivery method

На втором экране выбираем бакет S3 с контентом сайта в поле Origin Domain Name. Возможно следует выставить "Restrict Bucket Access" в Yes. Но я не проверял.

Origin domain name

Мотаем дальше до "Default Cache Behavior Settings". Меняем "Viewer Protocol Policy" на "Redirect HTTP to HTTPS".

Protocol policy

В блоке "Distribution Settings" вводим имя домена в Alternate Domain Names и выбираем Custom SSL Certificate (если ни одного сертификата нет, то возвращаемся к шагу #1).

Distribution settings

И последнее, необходимо ввести "index.html" в поле Default Root Object.

Default root object

Теперь можно включить distribution. Можно сходить попить кофе. Запуск займет 20-25 минут.

Шаг #3. Меняем зоны в Route 53.

После диплоя distribution можно менять настройки Route 53. Нужно выставить правильную запись типа A, которая будет указывать на соответствующий URL CloudFront.

Все. Теперь блог работает через HTTPS.

TODO

Осталась пара штук, которые надо бы решить:

  1. Я не знаю как настроить редирект с www.domain.com на domain.com.
  2. CloudFront - это кэширующий прокси. Вам придется заботиться о инвалидации кэша после обновления контента. Пока я не нашел хорошего варианта для использования вместе с Pelican.


c