Это многостраничный печатный вид этого раздела. Нажмите что бы печатать.

Вернуться к обычному просмотру страницы.

Storage Хранилище данных

Storage (хранилище) в Authelia — это централизованное место для хранения критически важных данных, необходимых для работы системы.

Какие данные хранятся?

Тип данных Примеры Важность
Настройки пользователей Выбранная тема, язык интерфейса Низкая
2FA-данные TOTP-секреты, ключи WebAuthn Высокая
Журналы аутентификации Входы, попытки сброса пароля Средняя
OAuth2-данные Токены, authorization codes Высокая
Сессии (если не используется Redis) Активные сеансы пользователей Высокая

Поддерживаемые хранилища

Authelia работает с такими базами данных:

Хранилище Когда выбирать Особенности
PostgreSQL Production-среда Высокая производительность, поддержка сложных запросов
MySQL/MariaDB Уже есть инфраструктура MySQL Совместимость с большинством хостингов
SQLite Тестирование/разработка Не требует сервера, но не для продакшена
Redis (только для сессий) Высоконагруженные системы Только key-value, без SQL

Конфигурация

storage:
  encryption_key: 'a_very_important_secret'
  local: {}
  mysql: {}
  postgres: {}

Опции

encryption_key

Ключ шифрования, используемый для шифрования данных в базе данных. Мы шифруем данные, создавая контрольную сумму sha256 из указанного значения, и используем ее для шифрования данных с помощью 256-битного алгоритма AES-GCM.

Минимальная длина этого ключа - 20 символов.

Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов.

1 - PostgreSQL

PostgreSQL в Authelia выполняет роль основного хранилища данных, обеспечивая безопасное сохранение критически важной информации.

Какие данные хранятся в PostgreSQL?

Тип данных Примеры Важность
Учетные данные 2FA TOTP-секреты, ключи WebAuthn 🔥 Высокая
Журналы аутентификации Входы, попытки сброса пароля 🔍 Средняя
Настройки пользователей Язык, тема интерфейса 📌 Низкая
OAuth2-токены Access/refresh tokens 🔥 Высокая
Данные сессий (если не используется Redis) Активные сеансы ⚡ Высокая

Почему именно PostgreSQL?

Преимущества перед другими СУБД

Критерий PostgreSQL MySQL/SQLite Redis
Поддержка сложных запросов ✅ Да ❌ Ограничена ❌ Нет
Надежность транзакций ✅ ACID ✅ ACID ❌ Key-Value
Производительность ⚡ Высокая ⚡ Средняя ⚡ Максимальная
Масштабируемость ✅ Горизонтальная ✅ Вертикальная ✅ Кластеры
Безопасность 🔒 Row-Level Security 🔒 Базовые права 🔒 Нет

Пример конфигурации

Добавьте в configuration.yml:

storage:
  encryption_key: 'a_very_important_secret'
  postgres:
    address: 'tcp://127.0.0.1:5432'
    servers: []
    database: 'authelia'
    schema: 'public'
    username: 'authelia'
    password: 'mypassword'
    timeout: '5s'
    tls:
      server_name: 'postgres.rabrain.ru'
      skip_verify: false
      minimum_version: 'TLS1.2'
      maximum_version: 'TLS1.3'
      certificate_chain: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      private_key: |
        -----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----

Ключевые сценарии использования

Хранение секретов 2FA

  • TOTP: Секретные ключи (totp_secrets таблица)
  • WebAuthn: Публичные ключи устройств (webauthn_credentials)
-- Пример данных в PostgreSQL:
SELECT * FROM totp_secrets WHERE username = 'user@example.com';

Аудит безопасности

  • Логи входов (authentication_logs)
  • Попытки сброса пароля (identity_verification)

Масштабируемость

  • Поддержка репликации для отказоустойчивости
  • Возможность распределенной установки с несколькими нодами Authelia

Опции

encryption_key

Ключ шифрования, используемый для шифрования данных в базе данных. Мы шифруем данные, создавая контрольную сумму sha256 из указанного значения, и используем ее для шифрования данных с помощью 256-битного алгоритма AES-GCM.

Минимальная длина этого ключа - 20 символов.

Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов.

address

Настраивает адрес для сервера PostgreSQL. Сам адрес является коннектором, а схема должна быть либо схемой unix, либо одной из схем tcp.

storage:
  postgres:
    address: 'tcp://127.0.0.1:5432'
	
storage:
  postgres:
    address: 'tcp://[fd00:1111:2222:3333::1]:5432'
	
storage:
  postgres:
    address: 'unix:///var/run/postgres.sock'

servers

Здесь указывается список дополнительных резервных экземпляров PostgreSQL, которые будут использоваться в случае возникновения проблем с основным экземпляром, настроенным с помощью опций address и tls.

У каждого экземпляра сервера есть опции address и tls, которые имеют одинаковые требования и влияние, а также одинаковый синтаксис конфигурации. Это означает, что все остальные настройки, включая базу данных, схему, имя пользователя и пароль, должны быть такими же, как у основного экземпляра, и полностью реплицироваться.

storage:
  postgres:
    address: 'tcp://postgres1:5432'
    tls:
      server_name: 'postgres1.local'
    servers:
      - address: 'tcp://postgres2:5432'
        tls:
          server_name: 'postgres2.local'
      - address: 'tcp://postgres3:5432'
        tls:
          server_name: 'postgres3.local'

database

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

schema

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

username

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

password

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

Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов, и пароль пользователя был изменен на это значение.

timeout

Таймаут соединения SQL.

tls

Если этот параметр определен, он включает соединение через сокет TLS и дополнительно управляет параметрами проверки TLS-соединения для сервера PostgreSQL.

По умолчанию Authelia использует системный сертификат доверия для проверки TLS-соединений, а глобальная опция certificates_directory может быть использована для дополнения этого параметра.

2 - SQLite3

Если у вас нет SQL-сервера, вы можете использовать SQLite. Однако учтите, что при такой настройке вы не сможете запустить несколько экземпляров Authelia, поскольку база данных будет находиться в локальном файле.

Использование этого провайдера хранилища делает Authelia доступной для состояния. В сценариях высокой доступности важно использовать один из других провайдеров, и мы настоятельно рекомендуем использовать его в производственных средах, но это потребует от вас установки внешней базы данных, например PostgreSQL.

Пример конфигурации

Добавьте в configuration.yml:

storage:
  encryption_key: 'a_very_important_secret'
  local:
    path: '/config/db.sqlite3'

Опции

encryption_key

Ключ шифрования, используемый для шифрования данных в базе данных. Мы шифруем данные, создавая контрольную сумму sha256 из указанного значения, и используем ее для шифрования данных с помощью 256-битного алгоритма AES-GCM.

Минимальная длина этого ключа - 20 символов.

Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов.

path

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

3 - MySQL

MySQL в Authelia выполняет роль основного хранилища данных, обеспечивая безопасное сохранение критически важной информации.

Сравнение с PostgreSQL?

Преимущества перед другими СУБД

Критерий PostgreSQL MySQL/SQLite Redis
Поддержка сложных запросов ✅ Да ❌ Ограничена ❌ Нет
Надежность транзакций ✅ ACID ✅ ACID ❌ Key-Value
Производительность ⚡ Высокая ⚡ Средняя ⚡ Максимальная
Масштабируемость ✅ Горизонтальная ✅ Вертикальная ✅ Кластеры
Безопасность 🔒 Row-Level Security 🔒 Базовые права 🔒 Нет

Пример конфигурации

Добавьте в configuration.yml:

storage:
  encryption_key: 'a_very_important_secret'
  mysql:
    address: 'tcp://127.0.0.1:3306'
    database: 'authelia'
    username: 'authelia'
    password: 'mypassword'
    timeout: '5s'
    tls:
      server_name: 'mysql.rabrain.ru'
      skip_verify: false
      minimum_version: 'TLS1.2'
      maximum_version: 'TLS1.3'
      certificate_chain: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      private_key: |
        -----BEGIN PRIVATE KEY-----
        ...
        -----END PRIVATE KEY-----

Опции

encryption_key

Ключ шифрования, используемый для шифрования данных в базе данных. Мы шифруем данные, создавая контрольную сумму sha256 из указанного значения, и используем ее для шифрования данных с помощью 256-битного алгоритма AES-GCM.

Минимальная длина этого ключа - 20 символов.

Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов.

address

Настраивает адрес для сервера PostgreSQL. Сам адрес является коннектором, а схема должна быть либо схемой unix, либо одной из схем tcp.

storage:
  mysql:
    address: 'tcp://127.0.0.1:3306'
	
storage:
  mysql:
    address: 'tcp://[fd00:1111:2222:3333::1]:3306'
	
storage:
  mysql:
    address: 'unix:///var/run/mysqld.sock'

database

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

username

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

password

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

Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов, и пароль пользователя был изменен на это значение.

timeout

Таймаут соединения SQL.

tls

Если этот параметр определен, он включает соединение через сокет TLS и дополнительно управляет параметрами проверки TLS-соединения для сервера MySQL.

По умолчанию Authelia использует системный сертификат доверия для проверки TLS-соединений, а глобальная опция certificates_directory может быть использована для дополнения этого параметра.