Files
state-corp-backend/docs/exchange-key-rotation.md
Aleksandr Meshchryakov 78412f9e3b
All checks were successful
State Corp Backend CI/CD / Quality gate (push) Successful in 3m19s
State Corp Backend CI/CD / Build linux/amd64 images once (push) Successful in 2m54s
State Corp Backend CI/CD / Refresh and release internal main (push) Has been skipped
State Corp Backend CI/CD / Release customer main (push) Has been skipped
State Corp Backend CI/CD / Release dev (push) Successful in 54s
fix(exchange): preserve old archives during server key rotation
2026-09-14 00:04:53 +02:00

37 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ротация ключа обмена
`EXCHANGE_SHARED_TOKEN` служит текущим ключом HTTP-доступа к загрузке и материалом
ключа шифрования пакетов. Его нельзя передавать frontend или публиковать в
runtime-config.js. Публичный маркер браузерной загрузки требует отдельной
серверной проверки JWT активного администратора; сам по себе он доступа не даёт.
При согласованной ротации Мостовик и State Corp получают новый общий ключ и новый
`EXCHANGE_KEY_ID` (у Мостовика — `STATE_CORP_EXCHANGE_KEY_ID`). Чтобы ранее
подготовленные архивы оставались доступны, State Corp может хранить одну прежнюю
пару только на сервере:
- `EXCHANGE_PREVIOUS_SHARED_TOKEN` — прежний ключ расшифровки;
- `EXCHANGE_PREVIOUS_KEY_ID` — точный `key_id` прежних пакетов.
Оба предыдущих параметра задаются вместе, предыдущий ID должен отличаться от
текущего. Неполная или неоднозначная конфигурация отклоняет импорт. Старый ключ
выбирается только для точного предыдущего `key_id`; перебора ключей при ошибке
расшифровки нет. При пустых предыдущих параметрах сохраняется прежнее поведение
с единственным текущим ключом, в том числе для контейнеров без `key_id`.
HTTP-загрузка всегда проверяет только текущий `EXCHANGE_SHARED_TOKEN`.
Предыдущий ключ не предоставляет доступа к API. При загрузке старого архива
с текущими правами действуют прежние правила проверки, атомарного импорта и
распознавания дубликатов; миграции и преобразование предметных записей не нужны.
Порядок применения: убрать секрет из браузерной конфигурации, дождаться окончания
активных задач отправителя, приватно сохранить текущую конфигурацию, установить
предыдущую пару у получателя и новую текущую пару у обоих участников, пересоздать
соответствующие процессы. Проверить отказ старого HTTP-ключа, загрузку текущим
ключом старого и нового архивов, а также повтор без изменения предметных данных.
Прежний ключ удаляют после согласованного срока хранения старых архивов; после
удаления такие архивы перестанут расшифровываться автоматически.
Проверки: `uv run pytest tests/apps/exchange/`. Настройки, ключи и старые архивы
не должны попадать в репозиторий, логи или публичные файлы.