Защита S3, MinIO и WebDAV с помощью двухфакторной аутентификации: практическое руководство | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Защита S3, MinIO и WebDAV с помощью двухфакторной аутентификации: практическое руководство

19 мая 2026 8 мин. чтения

Статические ключи доступа к S3 API и пароли для веб-интерфейсов MinIO или WebDAV - это единый фактор аутентификации. Утечка ключа или успешный подбор пароля дает полный контроль над данными. API S3 и многие реализации WebDAV изначально не поддерживают двухфакторную аутентификацию (2FA). Эта статья предоставляет два практических метода для добавления второго фактора: централизованное управление через Identity Provider для MinIO и установка защитного прокси перед сервисом для любого S3-совместимого хранилища или WebDAV-сервера. Инструкции проверены в рабочих условиях и включают настройку политик доступа, тестирование с s3cmd и браузером.

Почему стандартной аутентификации недостаточно для S3 и WebDAV

Основной риск для S3-совместимых хранилищ - компрометация статических ключей доступа (Access Key и Secret Key). Эти ключи часто хранятся в конфигурационных файлах клиентов, CI/CD переменных или передаются в коде. Получив их, злоумышленник может читать, изменять или удалять данные без дополнительных проверок. Для веб-интерфейсов MinIO Console и WebDAV серверов угроза заключается в переборе паролей или использовании уязвимостей в форме входа.

Двухфакторная аутентификация добавляет временный, динамический компонент - одноразовый код из приложения-аутентификатора. Это делает доступ невозможным даже при утечке статического ключа или пароля. Однако внедрение 2FA в инфраструктуру хранения данных требует специфических подходов, поскольку многие сервисы не имеют встроенной поддержки этого механизма. Цель руководства - показать, как добавить второй фактор без перестройки рабочей инфраструктуры.

Два подхода к внедрению 2FA: как выбрать свой

Выбор метода зависит от вашего технологического стека, масштаба и допустимых изменений в системе.

Подход 1: Централизованное управление через Identity Provider (для MinIO)

Этот метод предполагает интеграцию MinIO с внешним сервисом управления идентификацией (IdP), например Keycloak или Authelia. MinIO делегирует процесс аутентификации этому провайдеру, который уже поддерживает 2FA через TOTP или другие методы. Преимущества включают единую точку управления пользователями и группами, централизованный аудит и возможность подключения других сервисов к тому же IdP. Для работы требуется MinIO Enterprise или версия Community с поддержкой внешнего IdP через конфигурацию OpenID Connect (OIDC). Этот подход оптимален для корпоративных сред, где уже используется централизованная система управления доступом.

Подход 2: Универсальный защитный прокси (для любого S3 и WebDAV)

Второй метод не требует изменений в конфигурации целевого сервиса. Защитный прокси-сервер, например Nginx с модулем auth_request или отдельный сервис Authelia, устанавливается перед S3 API или WebDAV эндпоинтом. Все запросы сначала направляются к прокси, который проверяет наличие валидной сессии с прошедшей 2FA. Только после успешной проверки трафик перенаправляется к бэкенду. Этот подход работает с любым S3-совместимым хранилищем (Amazon S3, MinIO, Ceph) и WebDAV сервером (TrueNAS, Apache, Nginx). Он идеально подходит для быстрого внедрения защиты в существующие системы или когда модификация сервиса невозможна.

Критерий Интеграция с Identity Provider Защитный прокси
Поддерживаемые протоколы OIDC, SAML HTTP Basic Auth, Cookies (через форму)
Сложность первоначальной настройки Высокая (нужен IdP) Средняя (настройка прокси и аутентификатора)
Влияние на клиентов Клиенты должны поддерживать OIDC (браузер, некоторые SDK) Прозрачно для клиентов (трафик идет через один endpoint)
Масштабируемость Высокая (централизованное управление) Средняя (прокси может стать узлом)
Лучший сценарий использования Корпоративная среда с несколькими сервисами и пользователями Быстрая защита legacy или самодельных систем, домашние решения

Пошаговая настройка 2FA для MinIO через внешний Identity Provider

Рассмотрим интеграцию MinIO с Keycloak как популярным opensource IdP.

Настройка Identity Provider (на примере Keycloak)

Разверните Keycloak. Для тестов можно использовать Docker:

docker run -d --name keycloak \
  -p 8080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:latest start-dev

В админ-консоли Keycloak (http://localhost:8080) выполните:

  1. Создайте новый Realm (например, minio-realm).
  2. В этом Realm создайте клиента (Client) типа OpenID Connect.
    • Client ID: minio-client
    • Root URL: http://your-minio-host:9000
    • Valid Redirect URIs: http://your-minio-host:9000/oauth_callback
    • Client Authentication: On
  3. В настройках клиента, в секции Authentication Flow, добавьте требование Condition - OTP (TOTP) в поток Browser.
  4. Создайте пользователя и назначьте ему роль.
  5. В секции Client Scopes убедитесь, что доступны roles и groups для mapping в MinIO.

Запишите ключевые параметры: Client ID, Client Secret и Issuer URL (обычно http://keycloak-host:8080/realms/minio-realm).

Конфигурация MinIO для работы с OIDC и привязка политик

Отредактируйте конфигурационный файл MinIO (config.json). Добавьте секцию identity_openid:

{
  "identity_openid": {
    "config_url": "http://keycloak-host:8080/realms/minio-realm/.well-known/openid-configuration",
    "client_id": "minio-client",
    "client_secret": "your-client-secret-from-keycloak",
    "claim_name": "groups",
    "claim_prefix": ""
  }
}

Параметр claim_name указывает атрибут из JWT токена, который MinIO будет использовать для определения политик пользователя (например, groups или roles). Затем создайте политики в MinIO, которые будут соответствовать значениям этого атрибута. Например, если токен содержит группу readers, создайте политику readonly и свяжите ее через конфигурацию или API MinIO.

После перезапуска MinIO вход в Console будет перенаправлять на Keycloak, где потребуется ввести логин, пароль и код из TOTP приложения.

Защита S3 API и WebDAV с помощью прокси с 2FA: инструкция

Этот метод использует Authelia как сервер аутентификации и Nginx как защитный прокси.

Настройка сервера аутентификации (Authelia)

Создайте базовый конфигурационный файл Authelia configuration.yml:

authentication_backend:
  file:
    path: /config/users_database.yml

jwt_secret: "your-very-long-random-secret"

default_redirection_url: "https://your-proxy-host/"

totp:
  issuer: "your-company"

access_control:
  default_policy: deny
  rules:
    - domain: "s3.your-domain.com"
      policy: one_factor
    - domain: "webdav.your-domain.com"
      policy: one_factor

Создайте файл пользователей users_database.yml:

users:
  john:
    password: "$argon2id$v=19$..." # Хеш пароля, сгенерированный Authelia
    displayname: "John Doe"
    email: john@example.com
    groups:
      - admin

После запуска Authelia зарегистрируйте пользователя через веб-интерфейс и сканируйте QR-код в приложение-аутентификатор (Google Authenticator, Aegis).

Конфигурация Nginx как защитного прокси

Конфигурация Nginx включает блоки для S3 API и WebDAV. Ключевой элемент - директива auth_request, которая проверяет каждый запрос через Authelia.

# Конфигурация для защиты S3 API (MinIO на порту 9000)
server {
    listen 443 ssl;
    server_name s3.your-domain.com;

    location /api/auth {
        internal;
        proxy_pass http://authelia:9091/api/verify;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URL $request_uri;
    }

    location / {
        auth_request /api/auth;
        auth_request_set $auth_status $upstream_status;
        error_page 401 =302 https://authelia.your-domain.com/?redirect=$request_uri;

        proxy_pass http://minio-server:9000;
        proxy_set_header Host $host;
        proxy_set_header Authorization $http_authorization; # Критично для S3
    }
}

# Конфигурация для защиты WebDAV (TrueNAS на порту 8080)
server {
    listen 443 ssl;
    server_name webdav.your-domain.com;

    location /api/auth {
        internal;
        proxy_pass http://authelia:9091/api/verify;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URL $request_uri;
    }

    location / {
        auth_request /api/auth;
        auth_request_set $auth_status $upstream_status;
        error_page 401 =302 https://authelia.your-domain.com/?redirect=$request_uri;

        proxy_pass http://truenas-webdav:8080;
        proxy_set_header Host $host;
    }
}

При попытке доступа к s3.your-domain.com или webdav.your-domain.com Nginx сначала выполнит внутренний запрос к Authelia для проверки сессии. Если сессии нет, клиент получит редирект на форму входа Authelia с требованием 2FA.

Адаптация для WebDAV в TrueNAS и других NAS

В TrueNAS SCALE или CORE сервис WebDAV обычно работает на отдельном порту (например, 8080). Найдите его в настройках служб (Services > WebDAV). После настройки прокси с Nginx и Authelia рекомендуется отключить прямой доступ к этому порту из внешней сети через правила файрвола или отключить службу на интерфейсе, который слушает публичный адрес. Все запросы должны поступать только через защищенный прокси на порту 443. WebDAV клиенты (Windows Explorer, davfs2) обычно поддерживают редиректы на аутентификацию, но могут требовать дополнительной настройки для передачи cookies.

Проверка работы и интеграция с клиентами

После настройки необходимо убедиться, что система работает корректно для разных клиентов.

Тестирование доступа через s3cmd и AWS CLI

Для метода с прокси, endpoint в конфигурации s3cmd должен указывать на адрес прокси, например https://s3.your-domain.com. При первом запросе, если сессии нет, команда завершится с ошибкой 401 или 302. Вам потребуется сначала пройти аутентификацию через браузер на том же домене, чтобы установить cookie сессии. После этого s3cmd сможет выполнять команды, передавая cookie или заголовки авторизации через прокси.

s3cmd --configure # Укажите новый endpoint
s3cmd ls s3://your-bucket

Для метода MinIO+IdP, если клиент поддерживает OIDC (например, через браузер), процесс прозрачен. Для CLI инструментов может потребоваться получение временного токена через отдельный процесс аутентификации с IdP.

Вход через веб-интерфейс и работа с WebDAV

Поток работы для пользователя:

  1. Пользователь открывает в браузере адрес веб-интерфейса MinIO Console или WebDAV ресурса.
  2. Nginx (или MinIO) перенаправляет его на страницу входа Keycloak или Authelia.
  3. Пользователь вводит логин и пароль.
  4. Система запрашивает одноразовый код из TOTP приложения.
  5. После успешной проверки пользователь возвращается к исходному интерфейсу MinIO или списку файлов WebDAV.

Для WebDAV, после аутентификации в браузере, можно подключить сетевой диск в Windows (через "Добавить сетевое расположение") или использовать команду mount в Linux с davfs2. Сессия cookie будет поддерживать доступ.

Детали настройки политик доступа и безопасность

Принцип наименьших привилегий обязателен. В IdP создавайте отдельные группы пользователей: admins (полный доступ), developers (чтение/запись в определенные бакеты), analysts (только чтение). Настройте в MinIO политики, соответствующие этим группам, ограничивая разрешения на уровне бакетов и объектов.

Для прокси-метода, правила доступа в Authelia можно детализировать по URL пути, защищая, например, только административные эндпоинты (/admin/). Секреты (JWT secret в Authelia, client secret в Keycloak) должны храниться как переменные окружения или в защищенных vault, не в файлах конфигурации. Логи Authelia и Nginx необходимо мониторить для обнаружения попыток несанкционированного доступа.

Распространенная проблема - рассинхронизация времени сервера и клиента для TOTP. Убедитесь, что все системы используют синхронизированное время (NTP). При потере сессии прокси вернет 401, и пользователь должен будет повторно пройти 2FA. Отказ прокси должен быть обработан: рассмотрите дублирование сервиса Authelia и использование высоконадежной балансировки для Nginx.

Для комплексной защиты инфраструктуры хранения данных, двухфакторная аутентификация должна быть частью многоуровневой стратегии. Рассмотрите также методы защиты от DDoS атак на серверах и современные многоуровневые подходы к безопасности. Если вы защищаете другие административные сервисы, такие как TrueNAS или Portainer, вам могут быть полезны готовые инструкции по настройке 2FA для этих систем.

Для автоматизации и масштабирования управления аутентификацией в крупной инфраструктуре рассмотрите специализированные сервисы, например AiTunnel, который предоставляет единый интерфейс для доступа к множеству API, включая модели ИИ, и может интегрироваться в ваши процессы безопасности.

Поделиться:
Сохранить гайд? В закладки браузера