Как настроить HTTPS-доступ к MinIO в Debian

При работе с S3-хранилищем по сети передаются не только загружаемые и скачиваемые файлы, но и учётные данные доступа, API-ключи, токены аутентификации. Без шифрования данная информация передаётся в открытом виде и может быть перехвачена злоумышленником в любой точке между сервером и клиентом. Это особенно критично при работе хранилища на виртуальном выделенном сервере, поскольку доступ к нему осуществляется прямо из сети интернет. Данную уязвимость можно закрыть при помощи шифрования трафика с использованием протокола HTTPS – более безопасного по сравнению с HTTP, шифрование в котором отсутствует.

Организация доступа к веб-ресурсу через HTTPS фактически заключается в настройке шифрования и дешифровки трафика при помощи SSL/TLS-сертификата от доверенного центра сертификации, например, Let’s Encrypt. Получение и настройка сертификата выполняется на стороне веб-сервера, через который происходит обмен данными между сервисом, например, S3-хранилищем MinIO, и клиентом, подключающимся к нему из сети. В такой конфигурации веб-сервер выполняет функции обратного прокси-сервера. Используя установленный сертификат, обратный прокси расшифровывает данные, передаёт их сервису, затем получает от сервиса ответ, зашифровывает его и отправляет клиенту.

Одним из наиболее удобных инструментов настройки обратного прокси является использование в его качестве веб-сервера Caddy. Caddy умеет автоматически и без дополнительной настройки получать и обновлять SSL/TLS-сертификаты от Let’s Encrypt. MinIO также может работать с HTTPS-трафиком, но настройка его работы с сертификатами добавляет сложности. В таком случае придётся следить за сроками действия сертификатов, вручную их обновлять и перезапускать сервис при обновлении. Всего этого можно избежать при помощи обратного прокси на Caddy.

В статье разберём, как настроить HTTPS-доступ к S3-хранилищу MinIO, установленному на VPS, работающем под управлением Debian.

Настройка домена и поддоменов

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

Также в ранее описанной установке MinIO на Debian для доступа к S3-хранилищу были использованы TCP-порты:

  • 9000 – для работы с MinIO через API;
  • 9001 – для подключения к графическому интерфейсу хранилища через браузер.

Таким образом, для получения SSL-сертификата для MinIO в нашем примере мы будем использовать домен vash-domain.ru, при помощи A-записи направленный на IP-адрес тестовой виртуальной машины. Вместо портов 9000 и 9001 мы настроим доступ к S3-хранилищу через поддомены minio.vash-domain.ru и console.vash-domain.ru соответственно. Добавить подобные поддомены к доменному имени можно также на сайте-регистраторе основного домена.

Как настроить HTTPS-доступ к S3-хранилищу MinIO в Debian

Для настройки обратного прокси на основе Caddy необходимо, во-первых, установить данный веб-сервер. Для этого систему следует подготовить. Сначала установите утилиту curl, которая нужна для скачивания файлов по HTTP/HTTPS, а также утилиту gpg – GNU Privacy Guard, используемую для работы с криптографическими ключами и проверки цифровых подписей пакетов. Изначально данные утилиты отсутствуют в чистом образе Debian.

$ sudo apt install curl gpg

По окончании установки загрузите публичный GPG-ключ репозитория Caddy и добавьте его в систему:

$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

Затем добавьте сам репозиторий Caddy в список источников пакетов системы:

$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

После чего обновите списки пакетов:

$ sudo apt update

И, наконец, проинсталлируйте непосредственно Caddy:

$ sudo apt install caddy

Во время установки в системе будет создана и запущена служба веб-сервера Caddy. Чтобы убедиться в том, что служба работает, выведите на экран её текущее состояние:

$ systemctl status caddy

Вывод команды не должен содержать сообщений о каких-либо ошибках.

Вывод текущего состояния Caddy

Настройка обратного прокси Caddy

Настройка Caddy заключается во внесении изменений в его основной конфигурационный файл:

$ sudo nano /etc/caddy/Caddyfile

Удалите все строки в данном файле, после чего скопируйте туда следующие два блока. Первый из них относится к настройкам проксирования запросов на порт 9000, где работает API MinIO. Второй – к настройкам проксирования на порт 9001, где запущена веб-консоль MinIO. Данными блоками в конфигурации Caddy будет осуществлена привязка TCP-порта 9000 к доменному имени minio.vash-domain.ru, и TCP-порта 9001 – к console.vash-domain.ru.

# API MinIO
minio.vash-domain.ru {
    reverse_proxy localhost:9000 {
        header_up Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
}

# Веб-консоль MinIO
console.vash-domain.ru {
    reverse_proxy localhost:9001 {
        header_up Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
}

Также необходимо отредактировать файл окружения:

$ sudo nano /opt/minio/config/minio.env

В частности, добавьте в него две строки, содержащие параметры с привязкой MinIO к доменным именам, предназначенным для работы с хранилищем через API и через веб-интерфейс:

MINIO_ROOT_USER=minio_user
MINIO_ROOT_PASSWORD=MinIO_P@ssw0rd
MINIO_VOLUMES="/opt/minio/data"
MINIO_OPTS="--console-address :9001"
MINIO_SERVER_URL="https://minio.vash-domain.ru"
MINIO_BROWSER_REDIRECT_URL="https://console.vash-domain.ru"

После внесения изменений перезагрузите конфигурацию systemd:

$ sudo systemctl daemon-reload

Затем перезапустите службу MinIO:

$ sudo systemctl restart minio

Во время следующего своего рестарта Caddy создаст запрос в Let’s Encrypt для получения SSL-сертификата для доменов, указанных в Caddyfile. При этом для подтверждения владения доменами центр сертификации использует различные методы. Наиболее распространенным и используемым Caddy по умолчанию является HTTP-01 Challenge. Применяя его Let’s Encrypt подключается к серверу по HTTP, чтобы найти специальный файл с токеном. Поэтому для успешного прохождения проверки доступ к серверу для протокола HTTP должен быть открыт. Также необходимо открыть доступ для протокола HTTPS. С его использованием будет осуществляться подключение к S3-хранилищу после установки сертификата.

Чтобы обеспечить доступ к серверу через HTTP и HTTPS, добавьте в брандмауэр UFW разрешающие правила для данных протоколов:

$ sudo ufw allow http

$ sudo ufw allow https

После чего перезапустите службу Caddy:

$ sudo systemctl restart caddy

В результате успешной установки SSL-сертификата обратный прокси обеспечит доступ к API MinIO и веб-консоли MinIO через HTTPS. Чтобы это проверить, подключитесь к веб-интерфейсу S3-хранилища. Для чего откройте браузер и перейдите на https://console.vash-domain.ru, где вместо console.vash-domain.ru укажите имя поддомена, соответствующее настроенному вами для веб-консоли MinIO.

Подключение к веб-консоли MinIO по HTTPS

Сообщение вида Подключение защищено должно свидетельствовать об успешном соединении браузера с сайтом S3-хранилища.

Вам также может понравиться