env-master

Ротация секретов

Замена значения без простоя и без ручной работы.

Четыре фазы

create → set → test → finish
  • create — создать новое значение в целевой системе (например, второго пользователя в PostgreSQL);
  • set — применить его там, где оно должно действовать;
  • test — убедиться, что оно работает;
  • finish — перенести метку current, чтобы потребители начали читать новое.

Автомат идемпотентный: прогон возобновляется с любой фазы, поэтому сбой на середине не оставляет систему в неопределённом состоянии.

Почему test нельзя пропустить

Ротация без проверки нового значения хуже её отсутствия: вы получаете уверенность вместо работающего доступа. Поэтому фаза обязательна, а неудачный прогон поднимает событие rotation.failed, вебхук и метрику.

Метка pending

Между create и finish новое значение уже сохранено под меткой pending. Это не деталь реализации: если процесс упадёт после создания пароля в базе, но до записи в env-master, пароль будет потерян — а он уже действует. Значение становится durable раньше, чем начинает применяться.

Потребители в этот момент по-прежнему читают current и ничего не замечают.

Откат

Одно действие: прежнее значение публикуется новой версией. История остаётся монотонной, повторный откат идёт вперёд, а не качает значение туда-обратно.

Что уже готово

Ротатор PostgreSQL по схеме двух пользователей — нулевой простой для потребителей. Каркас движка не завязан на конкретную СУБД: добавить ротатор значит реализовать четыре метода.