Настроим сертификат и полноценный доступ по https
с валидным сертификатом к опубликованному в виде сайта
бакету Yandex S3. Сертификат будем получить на домен, который находится за
пределами Yandex.Cloud через Let’s Encrypt.
Что именно происходит
Если мы откроем настройка сайта для бакета, то увидим такую картину:
Как вино ссылка будет указана с протоколом http
, так как в название бакета использован домен и в нем присутствует
разделитель в виде точки (.
). Из-за этого открыть сайт без предупреждений браузера не получится:
|
|
По этой же причине, если настроить обязательную проверку сертификаты, в Cloudflare сайт так же не будет открываться. Все
это связано с тем, что сертификат, который используется для показа бакета в виде сайта имеет только одно доступное для
показа имя *.website.yandexcloud.net
.
Сертификат
Yandex дает возможность выписывать Let’s Encrypt сертификаты:
После чего нужно будет выполнить проверку прав. Благо для этого есть возможность указать CNAME
запись у своего
любимого DNS провайдера, без переноса домена в Yandex.
После чего нужно будет вписать полученный CNAME у своего провайдера и ждать. Процесс совсем не быстрый, в моем случае
прошло около 15 минут. Далее сертификат будет обновляться самим Yandex-ом, при условии живой CNAME
.
Теперь этот сертификат можно смело привязать к сайту в S3:
Неочевидная польза
Если после этого открыть настройки сайта, то ссылка так и останется http
:
Это немного сбивает с толку, видимо это связано с тем, что домен находится вне Yandex-а. Но если попытаться проверить
доступность сайта руками. Для этого пригодится параметр --connect-to
в curl
:
|
|
То есть S3 понимает, что по домену some.website
нужно отдавать вебсайт с бакета, у которого есть сертификат на
some.website
. Просто это нигде не отображается визуально. Теперь в настройках Cloudflare можно включить проверку
сертификата источника и проксировать все через https
.
При этом сертификаты на обоих уровнях теперь будут обновляться автоматически.