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 может быть использована для дополнения этого параметра.