Значения секретов никогда не записываются в 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. Права доступа к файлу сервер не проверяет — ограничьте их средствами системы развёртывания.

Файл ключей — часть данных инстанса. При его утере сервер не запустится, а сохранённые учётные данные внешних реестров будут безвозвратно потеряны. Не перегенерируйте файл при развёртывании: если инструмент деплоя создаёт секрет заново при каждом обновлении, все серверы перестанут стартовать. Резервируйте файл вместе с базой данных (Резервное копирование).

Ротация ключа

Ротация выполняется в три фазы, с перезапуском серверов после первых двух:

  1. Добавление. Добавьте новый ключ в keys со следующим id, не меняя active. Разверните файл на все серверы и перезапустите их.
  2. Переключение. Смените active на id нового ключа, разверните и перезапустите. Новые записи шифруются новым ключом; служебный ключ загрузки образов перешифровывается автоматически при старте.
  3. Перешифрование учётных данных. Откройте «Изменить» каждого proxy-репозитория с сохранёнными учётными данными внешнего реестра и введите пароль или токен заново — только так они пересохраняются под новым ключом. Автоматически это не происходит.

Пока перешифрованы не все записи, сервер при старте пишет предупреждение secrets: upstream credentials still sealed under a non-primary key с числом таких записей в поле stragglers. Старый ключ удаляйте из файла только после того, как предупреждение исчезло.

Если удалить старый ключ, не выполнив третью фазу, репозитории с сохранёнными учётными данными перестанут работать: каждый запрос к ним будет завершаться ошибкой, а вернуть секреты можно будет только вводом заново.

Все серверы инстанса обязаны использовать один и тот же файл ключей.