Сайт ↗
Разделы документации
Эксплуатация · 0.8.1

Смена секретов и обновление сертификатов

Как заменить ключи приложения, пароль PostgreSQL, доступ к S3 или registry и сертификаты без ручной правки файлов работающего окружения.

На этой странице

Для смены секретов используйте rotate-secrets: контроллер обновит файлы и использующие их компоненты согласованно. Запланируйте короткий перерыв в работе.

Работайте из корня проекта: Source — на VPS под пользователем deploy, Archive/Registry — на управляющем компьютере, prod-local — на своём компьютере.

1. Выберите действие

--kind Что меняется Что подготовить
auth Ключи подписи токенов приложения Новые значения создаются на сервере; JSON-файл не нужен
postgres Пароль БД и связанные настройки подключения Файл с новыми секретами не нужен
media Ключи доступа к изображениям в S3 media_access_key, media_secret_key, необязательный media_session_token
backup Ключи доступа к резервным копиям в S3 backup_access_key, backup_secret_key, необязательный backup_session_token
registry Доступ к скачиванию Docker-образов registry_username, registry_password
db-leaf Сертификат PostgreSQL, подписанный действующим центром сертификации (CA) Файл с новыми секретами не нужен
db-ca Центр сертификации PostgreSQL, доверие к нему и сертификат Файл с новыми секретами не нужен

Registry доступен только при текущем registry-релизе; media и backup — только для S3. Эти действия меняют доступ к тому же хранилищу, а не переносят данные.

Сначала выполните status --env production --json и убедитесь, что нет активной операции.

2A. Ключи приложения, пароль БД или её сертификаты

Для этих видов JSON с новыми значениями не нужен:

bash ./deploy/control rotate-secrets --env production \
  --kind auth --confirm production

Замените auth на postgres, db-leaf или db-ca, если требуется другое действие. После auth пользователям может понадобиться новый вход.

2B. Ключи S3 или registry

Получите новые ключи у провайдера, пока оставив старые действующими. Вне репозитория создайте файл:

umask 077
ROTATION_FILE="$HOME/admingen-media-rotation.json"
touch "$ROTATION_FILE"
chmod 600 "$ROTATION_FILE"
nano "$ROTATION_FILE"

Для media вставьте:

{
  "media_access_key": "NEW_ACCESS_KEY",
  "media_secret_key": "NEW_SECRET_KEY"
}

Для backup вместо этого используйте:

{
  "backup_access_key": "NEW_ACCESS_KEY",
  "backup_secret_key": "NEW_SECRET_KEY"
}

Для registry:

{
  "registry_username": "NEW_USERNAME",
  "registry_password": "NEW_TOKEN"
}

Выберите только один из трёх объектов; session token добавляйте, если он нужен провайдеру. Запустите соответствующий kind:

DEPLOY_SECRETS_FILE="$ROTATION_FILE" \
  bash ./deploy/control rotate-secrets --env production \
  --kind media --confirm production

Не передавайте значения ключей в аргументах команд или логах. После успеха проверьте нужную функцию: загрузку изображения, backup или доступ к образам. Затем отзовите старые ключи и удалите временный файл, если он больше не нужен.

Публичный HTTPS-сертификат

bash ./deploy/control certificates --env production --confirm production

Это обслуживание Nginx/Certbot, не сертификатов PostgreSQL. Для него должны работать DNS и доступ ACME. Prod-local использует свой локальный CA; его нужно добавить в доверенные на компьютере.

Если операция прервалась

bash ./deploy/control status --env production --json
bash ./deploy/control reconcile --env production --json

Обычный resume не поддерживает rotate-secrets. Выясните по журналу, какие значения уже применились, и продолжайте по инструкции восстановления. Не запускайте вторую ротацию параллельно. Abandon не возвращает прежние ключи у внешнего провайдера.