Deckhouse Development Portal (DDP) позволяет безопасно сменить ключ шифрования (security.secretKey) без потери учётных данных и других зашифрованных значений. Операция выполняется из веб-интерфейса и перешифровывает все данные, которые хранятся с использованием текущего ключа.

Основания для ротации ключа

Выполните ротацию ключа шифрования, если необходимо заменить параметр модуля security.secretKey — например, по политике безопасности или после компрометации ключа.

Параметр задаётся в ModuleConfig development-platform (spec.settings.security.secretKey) или в настройках модуля в веб-интерфейсе Deckhouse Platform.

Не меняйте security.secretKey в настройках модуля до завершения перешифрования в веб-интерфейсе, иначе сохранённые значения станут недоступны.

Права доступа

Для запуска ротации требуется глобальное разрешение rotate:encryption-key.

Перешифровываемые данные

Операция затрагивает следующие категории данных:

  • «Учётные данные пользователей» — значения в PostgreSQL для типов с хранилищем «База данных».
  • «Учётные данные AI-провайдеров» — персональные реквизиты для AI-интеграций.
  • «Временные ответы действий» — зашифрованные временные ответы в записях выполнения действий.
  • «Секреты Vault» — значения учётных данных, хранящихся в HashiCorp Vault или Deckhouse Stronghold.
  • «Конфигурация Vault» — AppRole Role ID и AppRole Secret ID в настройках интеграции с Vault.
  • Пароли подключений реестра шаблонов. Отдельной строки в таблице результатов для них нет: они учитываются в строке «Итого».

Порядок выполнения

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

  2. Перейдите в раздел «Администрирование» → «Учётные данные».

  3. Нажмите «Ротация ключа шифрования».

  4. В поле «Старый ключ шифрования» введите текущий ключ (параметр модуля security.secretKey).

  5. В поле «Новый ключ шифрования» введите новый ключ. Требования к ключу те же, что при первоначальной настройке:

    • длина — 16, 24 или 32 печатаемых ASCII-символа;
    • ключ не должен состоять из одного повторяющегося символа;
    • ключ не должен совпадать с распространёнными значениями, например 1234567890123456 или passwordpassword;
    • новый ключ должен отличаться от старого.
  6. Нажмите «Перешифровать».

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

  8. Укажите новый ключ в параметре модуля security.secretKey: в ModuleConfig development-platform (spec.settings.security.secretKey) или в настройках модуля в веб-интерфейсе Deckhouse Platform.

    Пример фрагмента ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: development-platform
    spec:
      settings:
        security:
          secretKey: <NEW_SECRET_KEY>

    После изменения настроек модуля DDP Backend и воркеры DDP перезапускаются автоматически с новым ключом.

После перешифрования и до перезапуска DDP Backend с новым ключом сохранённые значения расшифровать нельзя.

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

Сессии в браузере и сессии имперсонации подписываются ключом security.secretKey. После смены ключа текущие сессии становятся недействительными: веб-интерфейс пытается обновить сессию через Dex, а если это не удаётся, перенаправляет пользователя на страницу входа. Активные сессии имперсонации завершаются.

Результаты операции

В таблице результатов для каждой категории данных указываются три счётчика:

  • «Успешно» — записи перешифрованы новым ключом.
  • «Пропущено» — записи, которые уже доступны с новым ключом (например, были перешифрованы ранее), и записи без сохранённого значения.
  • «Неуспешно» — запись не удалось перешифровать (чаще всего из-за неверного старого ключа или повреждённых данных).

Строка «Итого» содержит суммарные значения по всем категориям.

Если в столбце «Неуспешно» есть ненулевые значения, не меняйте ключ в настройках модуля до устранения причины ошибок. Проверьте корректность старого ключа и повторите операцию.