KV версии 2 хранит несколько версий каждого секрета. Это позволяет откатить ошибочное изменение, защититься от одновременной перезаписи и управлять тем, сколько истории хранить.
Цель
Пройти полный жизненный цикл секрета: создать несколько версий, прочитать и откатить версию, ограничить хранение истории, включить check-and-set, удалить и восстановить версию и уничтожить её безвозвратно.
Предварительные требования
Для выполнения примера нужны:
- Токен Stronghold с правами на путь
secret/*. - Механизм секретов KV версии 2, смонтированный в
secret/(в режиме разработки он включён по умолчанию).
Шаг 1. Создайте версии секрета
Запишите секрет несколько раз, чтобы создать версии:
Каждая запись создаёт новую версию:
d8 stronghold kv put -mount=secret app/config username=app password=v1-pass d8 stronghold kv put -mount=secret app/config username=app password=v2-passКоманда
kv patchменяет только указанные поля и сохраняет остальные:d8 stronghold kv patch -mount=secret app/config password=v3-passПоле
usernameостаётся прежним,passwordполучает значениеv3-pass. Результат — версия 3.
Шаг 2. Прочитайте нужную версию
Прочитайте текущую версию, версию 1 и метаданные секрета:
d8 stronghold kv get -mount=secret app/config
d8 stronghold kv get -mount=secret -version=1 app/config
d8 stronghold kv metadata get -mount=secret app/configПервая команда возвращает текущую версию, вторая — версию 1. Третья показывает метаданные: текущую версию, время создания каждой версии и признаки удаления.
Шаг 3. Откатите версию
Откатите секрет к версии 1:
d8 stronghold kv rollback -mount=secret -version=1 app/configОткат не меняет историю: содержимое версии 1 записывается как новая версия 4.
Шаг 4. Ограничьте историю
Задайте количество хранимых версий и срок их жизни:
d8 stronghold kv metadata put -mount=secret -max-versions=5 -delete-version-after=720h app/configmax-versions— сколько версий хранить. Самая старая версия сверх лимита удаляется автоматически.delete-version-after— через какое время после создания версия помечается удалённой.
Шаг 5. Включите check-and-set
Check-and-set защищает от перезаписи, когда два клиента меняют секрет одновременно: запись проходит, только если клиент указал текущую версию.
Включите check-and-set для секрета:
d8 stronghold kv metadata patch -mount=secret -cas-required=true app/configЗапись без версии теперь отклоняется:
# Команда не задаёт параметр -cas, поэтому Stronghold отклоняет запись. d8 stronghold kv put -mount=secret app/config password=without-casЗапись с текущей версией проходит:
d8 stronghold kv put -mount=secret -cas=4 app/config username=app password=v5-passЕсли за это время секрет изменил другой клиент, версия не совпадёт, и запись будет отклонена.
Шаг 6. Удалите, восстановите и уничтожьте версию
Удалите последнюю версию, восстановите её и уничтожьте старые версии:
Мягкое удаление помечает последнюю версию удалённой, данные остаются в хранилище:
d8 stronghold kv delete -mount=secret app/configВосстановите версию:
d8 stronghold kv undelete -mount=secret -versions=5 app/configУничтожение удаляет данные версии безвозвратно:
d8 stronghold kv destroy -mount=secret -versions=1,2 app/config
Проверка
Просмотрите метаданные секрета:
d8 stronghold kv metadata get -mount=secret app/configВ выводе версии 1 и 2 помечены как уничтоженные (destroyed: true), версия 5 восстановлена и является текущей, max_versions равен 5, cas_required равен true.
Очистка
Удалите секрет вместе со всеми версиями и метаданными:
d8 stronghold kv metadata delete -mount=secret app/config