Leasing и renewal: аренда секретов

Механизм, который связывает каждый динамический секрет со сроком и даёт Vault право его отозвать.

Lease (аренда) — привязанный к динамическому секрету объект с идентификатором и сроком, по истечении которого Vault автоматически отзывает секрет; аренду можно продлевать и отзывать досрочно.

Каждый динамический секрет приходит не один, а с арендой. Именно аренда превращает «выдать креды» в «выдать креды на время и потом убрать». Понимание leasing — ключ к корректной интеграции приложений.

Из чего состоит аренда

При выдаче динамического секрета ответ содержит lease_id и lease_duration:

{
  "lease_id": "database/creds/readonly/7gH2k",
  "lease_duration": 3600,
  "renewable": true,
  "data": { "username": "v-...", "password": "..." }
}

lease_id — уникальный идентификатор этой выдачи. lease_duration — сколько секунд секрет действителен. renewable — можно ли продлевать.

Продление аренды

Долгоживущему приложению невыгодно каждый час брать новые креды и переподключаться. Оно продлевает существующую аренду:

vault lease renew database/creds/readonly/7gH2k

Продление сдвигает срок, но не бесконечно — есть max_ttl аренды (как у токенов). Уперевшись в потолок, секрет придётся получить заново.

Отзыв аренды

# отозвать конкретную аренду
vault lease revoke database/creds/readonly/7gH2k

# отозвать ВСЕ аренды под префиксом (например, при инциденте)
vault lease revoke -prefix database/creds/readonly

Отзыв немедленно запускает удаление: для БД — DROP ROLE, для AWS — удаление пользователя/инвалидацию STS. Префиксный отзыв — мощный инструмент инцидент-реагирования: одной командой гасим все выданные движком креды.

Как работает под капотом

Vault ведёт реестр аренд (lease manager). У каждой аренды есть таймер. Когда он истекает или приходит revoke, Vault вызывает revocation-логику соответствующего движка, которая удаляет сущность в целевой системе. Аренды наследуют иерархию токена: отзыв токена отзывает все аренды, выданные под ним. Поэтому при логауте/отзыве токена приложения его динамические креды тоже исчезают — это согласованный жизненный цикл.

выдача creds --> lease создан, таймер=3600s
   |
   renew --> таймер сброшен (в рамках max_ttl)
   |
   таймер истёк ИЛИ revoke
   v
движок удаляет креды в целевой системе

Обязанность приложения

Корректное приложение должно: при старте получить секрет, периодически продлевать аренду до истечения (обычно в фоне), а при невозможности продлить — запросить новый секрет и переподключиться. Эту рутину обычно берёт на себя Vault Agent (следующий раздел), но понимать её надо.

Частые ошибки

  • Игнорировать lease_duration — креды протухнут, и приложение внезапно потеряет доступ.
  • Продлевать слишком поздно, после истечения — продлить уже нечего, нужен новый секрет.
  • Не отзывать аренды при выводе сервиса — временные юзеры висят до конца TTL зря.
  • Полагать, что revoke не трогает целевую систему — он реально удаляет юзера/ключ.

Итог

  • Каждый динамический секрет связан с арендой: lease_id + lease_duration.
  • Аренду продлевают (renew) до потолка и отзывают (revoke), в т.ч. префиксно при инцидентах.
  • Отзыв реально удаляет креды в целевой системе; аренды следуют за жизненным циклом токена.
Проверьте себя
1. Что описывает lease_duration в ответе на запрос динамического секрета?
AДлину пароля
BСколько времени секрет действителен до автоотзыва
CЧисло попыток логина
DВерсию KV
2. Что делает vault lease revoke -prefix для пути движка?
AПродлевает все аренды
BНемедленно отзывает все аренды под этим префиксом, удаляя креды в целевой системе
CУдаляет сам движок
DСоздаёт новый секрет
3. Что происходит с динамическими секретами при отзыве токена, под которым они выданы?
AНичего
BИх аренды тоже отзываются — согласованный жизненный цикл
CОни становятся статическими
DИх TTL удваивается