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), в т.ч. префиксно при инцидентах.
- Отзыв реально удаляет креды в целевой системе; аренды следуют за жизненным циклом токена.