3.6 KiB
Ротация ключа обмена
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/. Настройки, ключи и старые архивы
не должны попадать в репозиторий, логи или публичные файлы.