Значения секретов никогда не записываются в config.yaml.
Файл конфигурации содержит только имена переменных окружения или пути к файлам:
| Ключ | Назначение |
|---|---|
database.password_env | Имя переменной с паролем PostgreSQL |
auth.bootstrap_admin.password_env | Имя переменной с паролем первого администратора |
server.proxy_auth.secret_env | Имя переменной с секретом обратного прокси |
security.secret_key_file | Путь к файлу ключей шифрования |
Если ключ *_env задан, а сама переменная пуста или отсутствует,
сервер не стартует — сообщение об ошибке называет переменную.
Файл ключей шифрования
security.secret_key_file — обязательный параметр:
без файла ключей сервер не запускается.
Ключом шифруются секреты, которые хранятся в базе данных:
учётные данные внешних реестров proxy-репозиториев
и служебный ключ подписи загрузок образов контейнеров.
Пароли пользователей и токены хранятся хешами и этим ключом не шифруются.
Формат файла:
active: 1
keys:
- id: 1
key: "<base64-значение 32 байт>"Значение генерируется командой openssl rand -base64 32.
Права доступа к файлу сервер не проверяет —
ограничьте их средствами системы развёртывания.
Файл ключей — часть данных инстанса. При его утере сервер не запустится, а сохранённые учётные данные внешних реестров будут безвозвратно потеряны. Не перегенерируйте файл при развёртывании: если инструмент деплоя создаёт секрет заново при каждом обновлении, все серверы перестанут стартовать. Резервируйте файл вместе с базой данных (Резервное копирование).
Ротация ключа
Ротация выполняется в три фазы, с перезапуском серверов после первых двух:
- Добавление. Добавьте новый ключ в
keysсо следующимid, не меняяactive. Разверните файл на все серверы и перезапустите их. - Переключение. Смените
activeнаidнового ключа, разверните и перезапустите. Новые записи шифруются новым ключом; служебный ключ загрузки образов перешифровывается автоматически при старте. - Перешифрование учётных данных. Откройте «Изменить» каждого proxy-репозитория с сохранёнными учётными данными внешнего реестра и введите пароль или токен заново — только так они пересохраняются под новым ключом. Автоматически это не происходит.
Пока перешифрованы не все записи, сервер при старте пишет предупреждение
secrets: upstream credentials still sealed under a non-primary key
с числом таких записей в поле stragglers.
Старый ключ удаляйте из файла только после того, как предупреждение исчезло.
Если удалить старый ключ, не выполнив третью фазу, репозитории с сохранёнными учётными данными перестанут работать: каждый запрос к ним будет завершаться ошибкой, а вернуть секреты можно будет только вводом заново.
Все серверы инстанса обязаны использовать один и тот же файл ключей.