Замена ключей, токенов и сертификатов
Ключи, токены и сертификаты нужно менять по расписанию и сразу, если есть
подозрение на утечку. Это руководство показывает, как заменить каждый из них в
Mockarty, какие меняются без остановки и что замена делает с данными и
соединениями, которые от них зависят.
Перед заменой ключа шифрования сделайте полную резервную копию — см.
Резервное копирование и восстановление.
TLS-сертификаты
Mockarty читает сертификаты из файлов: сертификат HTTPS (HTTPS_CERT_FILE,
HTTPS_KEY_FILE), сертификат порта, к которому подключаются раннеры и
резолверы, и сертификат портов брокеров для моков. Чтобы заменить сертификат,
замените файлы сертификата и ключа. Mockarty замечает изменение примерно за
десять секунд и использует новый сертификат для новых соединений — без
перезапуска. Уже открытые соединения сохраняют старый до переподключения.
Сначала записывайте новый ключ, а сертификат — последним, или заменяйте оба
файла разом (в Kubernetes так делает обновление Secret с сертификатом). Если
Mockarty прочитает файлы, пока новым оказался только один из них, он продолжит
отдавать прежний сертификат и попробует снова при следующем соединении.
Замена удостоверяющего центра для соединений раннеров
Когда раннеры и резолверы предъявляют клиентские сертификаты, узел
администрирования доверяет удостоверяющему центру из своего файла клиентских
CA. Заменить центр без разрыва соединений:
- Поместите в файл клиентских CA на узле администрирования и старый, и новый
центр. Файл перечитывается автоматически. - Выпустите новые клиентские сертификаты от нового центра и разверните их на
раннерах и резолверах. Заменённый сертификат подхватывается при следующем
соединении. - Когда ни один клиент не использует сертификат от старого центра, удалите его
из файла клиентских CA.
Центр, которым раннеры проверяют узел администрирования, меняйте так же:
сначала добавьте новый центр в файл доверия раннеров и перезапустите их, затем
замените сертификат узла администрирования.
Ключ шифрования персональных данных
Когда задан MOCKARTY_PII_ENCRYPTION_KEY, Mockarty шифрует им персональные
данные и сохранённые учётные данные. Замена без простоя:
-
Сгенерируйте новый ключ:
openssl rand -base64 32. -
Задайте новый ключ в
MOCKARTY_PII_ENCRYPTION_KEY, а текущий перенесите в
MOCKARTY_PII_ENCRYPTION_KEY_PREVIOUS. Можно перечислить несколько прежних
ключей через запятую. -
Перезапустите или плавно обновите узлы администрирования. Новые данные
шифруются новым ключом; записанные раньше остаются читаемыми через прежний. -
Перешифруйте сохранённые данные новым ключом с теми же настройками, что у
сервера:mockarty --pii-rotate --pii-rotate-dry-run # сначала посчитать, ничего не меняя mockarty --pii-rotateusers.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 работает: она меняет значение, только
если оно всё ещё точно такое, каким было прочитано. -
Когда итог сообщает, что все значения под текущим ключом, удалите
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-токены могут действовать одновременно, поэтому замена одного никогда не
ломает автоматизацию:
- Создайте новый токен в Панель администратора > API Tokens с датой
окончания действия. - Пропишите новый токен в CI-систему или скрипты.
- Когда старым токеном больше ничего не пользуется, отзовите его. Владелец
получит уведомление.
Если токен мог утечь, отзывайте его сразу: запросы с ним перестают работать
немедленно на всех узлах.
Токены раннеров
Токен, с которым подключается раннер, истекает через 90 дней после выпуска или
последней замены. Меняйте его заранее в Панель администратора > Интеграции:
- Сменить токен выпускает новый токен для того же подключения и сразу отключает
старый. Раннеры со старым токеном перестают работать, пока не получат новый,
поэтому используйте эту кнопку, когда раннеры можно обновить сразу или токен
утёк. - Без перерыва: создайте второе подключение с теми же настройками,
переведите раннеры на его токен по одному, затем удалите старое подключение.
Лицензия
Чтобы заменить лицензию, загрузите новую в панели лицензии в панели
администрирования. Она действует сразу — без перезапуска. См.
Лицензионная модель.