Панель управления MinIO зачастую содержит чувствительную для пользователей хранилища информацию, такую как ключи доступа, параметры хранилища, список бакетов и файлов. Кроме того, веб-панель позволяет выполнять административные действия, и если для доступа к данному ресурсу использовать протокол HTTP, весь трафик будет идти в открытом виде. В подобной конфигурации система подвергается опасности, когда любой, имеющий доступ к сети между пользователем и сервером, может увидеть логины, пароли или даже подменить ответы сервера. Данную проблему исправляет использование более безопасного протокола HTTPS. HTTPS шифрует соединение, гарантируя, что даже если трафик перехвачен, расшифровать его будет невозможно.
Более того, протокол HTTPS обеспечивает целостность данных, поскольку браузер проверяет, что ответы действительно приходят от вашего сервера, а не от злоумышленника. Таким образом, настройка HTTPS делает работу с MinIO более безопасной и защищает как конфиденциальность, так и подлинность соединения.
В статье разберём, как настроить доступ к веб-панели MinIO с использованием протокола HTTPS, даже если подключение к веб-интерфейсу хранилища осуществляется по IP-адресу сервера, на котором оно развёрнуто, а не по имени домена. В качестве основы для рассматриваемого хранилища будет использоваться виртуальный сервер, управляемый Ubuntu или Debian.
Как настроить доступ к веб-панели MinIO по протоколу HTTPS
Подключитесь к своему VPS по SSH и создайте каталог, в котором MinIO будет искать сертификаты:
$ sudo mkdir -p /etc/minio/certs
В данном каталоге создайте файл san.cnf:
$ sudo nano /etc/minio/certs/san.cnf
Файл san.cnf — конфигурационный файл для openssl, который используется при создании SSL-сертификата с указанием дополнительных параметров, в первую очередь, Subject Alternative Names (SAN). Файл san.cnf позволяет openssl понять, какие поля нужно включить в создаваемый сертификат. В нашем примере данный файл состоит из следующего:
[req]— блок параметров запроса сертификата (CSR):distinguished_name = ssl_conf— указывает, что данные о владельце сертификата берутся из секции[ssl_conf];x509_extensions = v3_req— указывает на то, что в сертификат нужно включить расширения из блока[v3_req], например,subjectAltName;prompt = no— определяет, чтоopensslне будет задавать вопросы в интерактивном режиме, а всю информацию будет брать из файла;
[ssl_conf]— блок с данными о владельце сертификата (subject):C = RU— rод страны в формате ISO 3166-1, в данном случае,RU— Россия;ST = Moscow— регион или область, здесь —Moscow;L = Moscow— город, здесь такжеMoscow;O = RUVDS— организация, например,RUVDS;OU = Organizational_Unit— наименование подразделения;CN = MinIO— основное имя, к которому будет привязан сертификат, при этом, в настоящее время почти все современные приложения, включая браузеры и MinIO, игнорируют CN при проверке IP-адреса или домена;
[v3_req]— блок, который подключает список альтернативных имён, указанных в секции[alt_names];[alt_names]— расширение Subject Alternative Name (SAN), в котором перечислены все адреса и домены, для которых сертификат будет действителен.
В данном случае, замените X.X.X.X на IP-адрес виртуального сервера, либо вставьте строку вида DNS.1 = vash-domain.ru, где вместо vash-domain.ru укажите доменное имя, привязанное к IP-адресу VPS.
[req]
distinguished_name = ssl_conf
x509_extensions = v3_req
prompt = no
[ssl_conf]
C = RU
ST = Moscow
L = Moscow
O = RUVDS
OU = Organizational_Unit
CN = MinIO
[v3_req]
subjectAltName = @alt_names
[alt_names]
IP.1 = X.X.X.X
По окончании внесения изменений сохраните их и закройте файл.
Создание SSL-сертификата
На следующем шаге перейдите в каталог, в котором MinIO будет искать сертификаты:
$ cd /etc/minio/certs/
Запустите команду, которая создаст самоподписанный SSL-сертификат и приватный ключ, используя настройки из файла san.cnf:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out public.crt -config san.cnf -extensions v3_req
Данная команда использует следующие опции:
req— сокращение от «certificate request»;-x509— определяет, что сразу будет создан самоподписанный сертификат (X.509), а не CSR-запрос (формат X.509 — стандарт сертификатов, используемый в HTTPS, TLS и др.);-nodes– означает «no DES», то есть не шифровать приватный ключ паролем;-days 365— устанавливает срок действия сертификата в 365 дней, по окончании которого сертификат нужно пересоздать;-newkey rsa:2048— предписывает создание новой пары ключей: приватного (private.key) и публичного, встроенного в сертификат (public.crt), с использованием RSA-шифрования с длиной ключа 2048 бит;-keyout private.key— указывает, что сохранить приватный ключ необходимо в файлеprivate.keyв текущем каталоге;-out public.crt— указывает, что сохранить публичный сертификат необходимо в файлев текущем каталоге;public.crt-config san.cnf— подключает конфигурационный файлsan.cnfиз текущей директории;-extensions v3_req— указывает, какие использовать расширения из конфигурации, в данном случае — это секция[v3_req].
Настройка доступа к MinIO с использованием созданного SSL-сертификата
После того, как команда завершит свою работу, измените владельца и группу содержимого каталога /etc/minio/ на пользователя и группу minio, чтобы MinIO, запущенный от имени этого пользователя, мог безопасно использовать, в том числе, только что созданные файлы приватного ключа и публичного сертификата:
$ sudo chown -R minio:minio /etc/minio/
Чтобы MinIO узнал о том, где находятся файлы приватного ключа и публичного сертификата, укажите расположение директории с ними в файле окружения. Для этого откройте для редактирования файл окружения:
$ sudo nano /opt/minio/config/minio.env
В файле окружения в параметр MINIO_OPTS добавьте значение --certs-dir /etc/minio/certs:
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://X.X.X.X:9001, где вместо X.X.X.X укажите IP-адрес виртуального сервера, либо привязанное к нему доменное имя.
Поскольку подключение к странице происходит с использованием самоподписанного сертификата, браузер предупреждает о том, что сертификат выдан не доверенным центром сертификации. При этом, шифрование на самоподписанном сертификате такое же надёжное, как и у доверенного ЦА, типа Let’s Encrypt. Отличие лишь в том, что отсутствует проверка подлинности сервера. И так как браузер пытается открыть страницу веб-панели MinIO, размещённую именно на вашем VPS, то в данном случае можно продолжить подключение.

Таким образом, браузер откроет веб-панель MinIO, доступ к которой осуществляется при помощи протокола HTTPS.

