Взаимодействуя с сервером, веб-панель MinIO передаёт логины и пароли пользователей, подтверждает подлинность сервера и обеспечивает совместимость с браузерами и клиентами. При использовании протокола HTTP, эти данные передаются в открытом виде и могут подвергнуться перехвату, например, на уровне сети провайдера, роутера или корпоративного прокси. В то же время, более безопасный протокол HTTPS умеет шифровать весь трафик между браузером и сервером, исключая утечку логина и пароля, а также гарантируя целостность данных при их передаче.
Настройка доступа к веб-панели MinIO с использованием HTTPS заключается в установке на сервере, где развёрнут MinIO, SSL-сертификата и последующем его подключении в настройках, отвечающих за взаимодействие клиента и сервера. При этом устанавливаемый сертификат может быть как самоподписанным, так и выпущенным доверенным Центром сертификации, например, Let’s Encrypt.
В отличие от самоподписанного сертификат от Let’s Encrypt включён во все основные хранилища доверенных корней, автоматически обновляется по окончании срока действия и гарантирует, что сервер действительно владеет используемым доменным именем. При этом, установка SSL-сертификата возможна только на сервер, к IP-адресу которого привязано имя домена. Данная привязка производится при помощи настройки соответствующей DNS-записи — A-записи, которая отвечает за соответствие доменного имени и IP-адреса узла. Такую настройку можно произвести либо на сайте-регистраторе домена, либо во вкладке Домены на сайте RUVDS.

В статье разберём, как настроить HTTPS-доступ к веб-панели MinIO при помощи SSL-сертификата от Let’s Encrypt.
Как настроить HTTPS-доступ к веб-панели MinIO при помощи SSL-сертификата от Let’s Encrypt
Для получения и продления SSL-сертификатов Let’s Encrypt удобно использовать утилиту CertBot. Задача утилиты — полностью автоматизировать процесс выдачи сертификата, чтобы администратору не пришлось вручную генерировать запросы, отправлять их в Центр сертификации и устанавливать полученные файлы. Certbot проверяет действительность владения доменом, получает от Let’s Encrypt SSL-сертификат и размещает его в определённых каталогах.
Установка утилиты CertBot и получение SSL-сертификата
Первым шагом при настройке HTTPS-доступа обновите списки пакетов в системе и установите утилиту CertBot:
$ sudo apt update
$ sudo apt install certbot
Для проверки того, что что вы действительно владеете доменом, который будет задействован в установке SSL-сертификата, CertBot использует так называемый HTTP-01 challenge. При данном способе проверки утилита запускает временный мини-веб-сервер и создаёт в нём специальный файл в каталоге /.well-known/acme-challenge/. Созданный файл содержит уникальный токен, который запрашивает Let’s Encrypt. Если сервер корректно отдаёт этот токен, Let’s Encrypt понимает, что запрос на SSL-сертификат действительно пришёл от владельца домена, потому что только он может разместить файл по данному пути. Этот механизм требует того, чтобы на сервере был открыт доступ по протоколу HTTP, потому что именно через него производится данная проверка.
Чтобы открыть доступ к серверу для протокола HTTP, добавьте в брандмауэр UFW соответствующее разрешающее правило:
$ sudo ufw allow http
Следующей командой запросите у Let’s Encrypt выпуск SSL-сертификата для указанного домена. Здесь вместо your-site-name.ru укажите доменное имя, привязанное к вашему серверу:
$ sudo certbot certonly --standalone -d your-site-name.ru
В процессе выполнения команды CertBot попросит указать ваш Email для отправки уведомлений, а также для получения от Центра сертификации сообщений, связанных с безопасностью и изменениями в правилах использования. Затем CertBot попросит согласиться с условиями пользовательского соглашения. После чего необходимо будет выдать разрешение на передачу вашего Email некоммерческой организации Electronic Frontier Foundation, разрабатывающей Certbot. В результате в Центре сертификации будет запрошен SSL-сертификат. При успешной валидации домена утилита разместит файлы приватного ключа и полного сертификата в каталог /etc/letsencrypt/live/your-site-name.ru/.

Как настроить HTTPS-доступ к веб-панели MinIO
На данный момент полученный SSL-сертификат никак не связан с самим сервисом MinIO. Для того, чтобы настроить такую связь, создайте каталог, в котором MinIO будет искать файлы сертификата:
$ sudo mkdir -p /etc/minio/certs
После чего скопируйте файлы приватного ключа и сертификата в созданный каталог:
$ sudo cp /etc/letsencrypt/live/your-site-name.ru/fullchain.pem /etc/minio/certs/public.crt
$ sudo cp /etc/letsencrypt/live/your-site-name.ru/privkey.pem /etc/minio/certs/private.key
Поскольку служба MinIO работает под именем учётной записи minio, необходимо предоставить данному пользователю доступ к директории, в которой находятся файлы сертификата. Для этого измените владельца и группу каталога /etc/minio/certs/ и всех файлов внутри него на пользователя и группу minio:
$ sudo chown -R minio:minio /etc/minio/certs
Затем необходимо внести изменения в файл окружения, содержащий параметры конфигурации MinIO:
$ sudo nano /opt/minio/config/minio.env
Значение переменной MINIO_OPTS дополните ещё одним параметром, позволяющим передавать дополнительные аргументы при запуске MinIO и указывающим службе путь к расположению файлов сертификата:
MINIO_ROOT_USER=miniouser
MINIO_ROOT_PASSWORD=P@ssw0rd
MINIO_VOLUMES="/mnt/datastore"
MINIO_OPTS="--certs-dir /etc/minio/certs --console-address :9001"
Закройте файл окружения с сохранением изменений и обновите конфигурацию системы инициализации systemd:
$ sudo systemctl daemon-reload
После чего перезапустите службу MinIO:
$ sudo systemctl restart minio
Убедитесь, что служба работает без ошибок:
$ systemctl status minio

Если ошибок нет, откройте браузер и проверьте доступ к панели управления MinIO через HTTPS. Сообщение в строке навигации о защищённости подключения должно свидетельствовать о корректной установке SSL-сертификата.

Как настроить автоматическое обновление SSL-сертификата
Обычно Let’s Encrypt выдаёт сертификаты на 90 дней. При этом утилита CertBot создаёт задание в планировщике, которое автоматически их продлевает. Чтобы убедиться в этом, проверьте наличие задания следующей командой:
$ systemctl list-timers | grep certbot
Из вывода видно, что такое задание действительно присутствует в планировщике.

Протестировать обновление SSL-сертификата можно, запустив команду:
$ sudo certbot renew --dry-run

Если команда выполняется успешно, значит, сертификат будет продлеваться и обновляться автоматически без ручных действий.
После каждого обновления сертификата необходимо перезапускать службу MinIO. Чтобы это действие также выполнялось в автоматическом режиме и новый сертификат применялся сразу и без ручного вмешательства, создайте скрипт-хук, который CertBot будет запускать после успешного обновления SSL-сертификата:
$ sudo nano /etc/letsencrypt/renewal-hooks/deploy/restart-minio.sh
В создаваемый скрипт вставьте следующие строки:
#!/bin/bash
echo "[$(date)] Restarting MinIO after certificate renewal..." >> /var/log/minio-renew.log
systemctl restart minio
Закройте файл, сохранив изменения, и сделайте его исполняемым:
$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart-minio.sh
Чтобы проверить работу скрипта, запустите тест, который заставит CertBot считать, что сертификат вот-вот истекает:
$ sudo certbot renew --force-renewal
Убедиться в том, что после обновления произошёл перезапуск службы, можно через просмотр соответствующего лога:
$ cat /var/log/minio-renew.log
В нём должна появиться подобная запись:

