Документация Замена ключей, токенов и сертификатов

Замена ключей, токенов и сертификатов

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

Перед заменой ключа шифрования сделайте полную резервную копию — см.
Резервное копирование и восстановление.

TLS-сертификаты

Mockarty читает сертификаты из файлов: сертификат HTTPS (HTTPS_CERT_FILE,
HTTPS_KEY_FILE), сертификат порта, к которому подключаются раннеры и
резолверы, и сертификат портов брокеров для моков. Чтобы заменить сертификат,
замените файлы сертификата и ключа. Mockarty замечает изменение примерно за
десять секунд и использует новый сертификат для новых соединений — без
перезапуска. Уже открытые соединения сохраняют старый до переподключения.

Сначала записывайте новый ключ, а сертификат — последним, или заменяйте оба
файла разом (в Kubernetes так делает обновление Secret с сертификатом). Если
Mockarty прочитает файлы, пока новым оказался только один из них, он продолжит
отдавать прежний сертификат и попробует снова при следующем соединении.

Замена удостоверяющего центра для соединений раннеров

Когда раннеры и резолверы предъявляют клиентские сертификаты, узел
администрирования доверяет удостоверяющему центру из своего файла клиентских
CA. Заменить центр без разрыва соединений:

  1. Поместите в файл клиентских CA на узле администрирования и старый, и новый
    центр. Файл перечитывается автоматически.
  2. Выпустите новые клиентские сертификаты от нового центра и разверните их на
    раннерах и резолверах. Заменённый сертификат подхватывается при следующем
    соединении.
  3. Когда ни один клиент не использует сертификат от старого центра, удалите его
    из файла клиентских CA.

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

Ключ шифрования персональных данных

Когда задан MOCKARTY_PII_ENCRYPTION_KEY, Mockarty шифрует им персональные
данные и сохранённые учётные данные. Замена без простоя:

  1. Сгенерируйте новый ключ: openssl rand -base64 32.

  2. Задайте новый ключ в MOCKARTY_PII_ENCRYPTION_KEY, а текущий перенесите в
    MOCKARTY_PII_ENCRYPTION_KEY_PREVIOUS. Можно перечислить несколько прежних
    ключей через запятую.

  3. Перезапустите или плавно обновите узлы администрирования. Новые данные
    шифруются новым ключом; записанные раньше остаются читаемыми через прежний.

  4. Перешифруйте сохранённые данные новым ключом с теми же настройками, что у
    сервера:

    mockarty --pii-rotate --pii-rotate-dry-run   # сначала посчитать, ничего не меняя
    mockarty --pii-rotate
    
      users.email: re-encrypted 1840, already current 12
      users.full_name: re-encrypted 7, already current 0
    Total: re-encrypted 1847, already current 12, refused 0, unreadable 0.
    Every stored value is under the current key. You can remove MOCKARTY_PII_ENCRYPTION_KEY_PREVIOUS.
    

    Команду можно запускать, пока Mockarty работает: она меняет значение, только
    если оно всё ещё точно такое, каким было прочитано.

  5. Когда итог сообщает, что все значения под текущим ключом, удалите
    MOCKARTY_PII_ENCRYPTION_KEY_PREVIOUS и перезапустите.

Три результата требуют внимания:

  • refused — база не разрешает менять эти строки. Постоянные записи журнала
    аудита сохраняют ключ, которым были записаны, поэтому держите прежний ключ
    настроенным, пока храните эти записи.
  • unreadable — эти значения не открывает ни один настроенный ключ: они
    записаны ключом старше прежних. Добавьте тот ключ в
    MOCKARTY_PII_ENCRYPTION_KEY_PREVIOUS и запустите команду снова.
  • changed while running — Mockarty изменил эти значения, пока команда
    работала, и команда их не тронула. Запустите её снова; держите прежний ключ,
    пока запуск не сообщит, что все значения под текущим ключом.

Храните в хранилище секретов каждый использованный ключ с датами его
использования: восстановление старой резервной копии требует ключа того времени.

Перец для поиска

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

Ключ учётных данных хаос-кластеров

CHAOS_ENCRYPTION_KEY защищает учётные данные Kubernetes подключённых
хаос-кластеров. Сохранённые учётные данные нельзя перенести на новый ключ:
после его смены подключите кластеры заново, чтобы их учётные данные сохранились
под новым ключом.

API-токены

API-токены могут действовать одновременно, поэтому замена одного никогда не
ломает автоматизацию:

  1. Создайте новый токен в Панель администратора > API Tokens с датой
    окончания действия.
  2. Пропишите новый токен в CI-систему или скрипты.
  3. Когда старым токеном больше ничего не пользуется, отзовите его. Владелец
    получит уведомление.

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

Токены раннеров

Токен, с которым подключается раннер, истекает через 90 дней после выпуска или
последней замены. Меняйте его заранее в Панель администратора > Интеграции:

  • Сменить токен выпускает новый токен для того же подключения и сразу отключает
    старый. Раннеры со старым токеном перестают работать, пока не получат новый,
    поэтому используйте эту кнопку, когда раннеры можно обновить сразу или токен
    утёк.
  • Без перерыва: создайте второе подключение с теми же настройками,
    переведите раннеры на его токен по одному, затем удалите старое подключение.

Лицензия

Чтобы заменить лицензию, загрузите новую в панели лицензии в панели
администрирования. Она действует сразу — без перезапуска. См.
Лицензионная модель.