Ротация секретов
Замена значения без простоя и без ручной работы.
Четыре фазы
create → set → test → finish
- create — создать новое значение в целевой системе (например, второго пользователя в PostgreSQL);
- set — применить его там, где оно должно действовать;
- test — убедиться, что оно работает;
- finish — перенести метку
current, чтобы потребители начали читать новое.
Автомат идемпотентный: прогон возобновляется с любой фазы, поэтому сбой на середине не оставляет систему в неопределённом состоянии.
Почему test нельзя пропустить
Ротация без проверки нового значения хуже её отсутствия: вы получаете уверенность
вместо работающего доступа. Поэтому фаза обязательна, а неудачный прогон
поднимает событие rotation.failed, вебхук и метрику.
Метка pending
Между create и finish новое значение уже сохранено под меткой pending.
Это не деталь реализации: если процесс упадёт после создания пароля в базе, но
до записи в env-master, пароль будет потерян — а он уже действует. Значение
становится durable раньше, чем начинает применяться.
Потребители в этот момент по-прежнему читают current и ничего не замечают.
Откат
Одно действие: прежнее значение публикуется новой версией. История остаётся монотонной, повторный откат идёт вперёд, а не качает значение туда-обратно.
Что уже готово
Ротатор PostgreSQL по схеме двух пользователей — нулевой простой для потребителей. Каркас движка не завязан на конкретную СУБД: добавить ротатор значит реализовать четыре метода.