Идея динамических секретов
Почему «создать креды на 30 минут и забыть» безопаснее, чем «хранить пароль годами».
Динамический секрет — учётные данные, которые Vault создаёт в целевой системе по запросу, выдаёт на ограниченный срок и автоматически удаляет по истечении аренды.
Статический секрет — это пароль, который кто-то когда-то создал и который живёт, пока его не сменят вручную. Динамический секрет переворачивает модель: пароля не существует, пока он не понадобился, а как только аренда истекла — он удаляется из целевой системы. Это и есть та возможность, ради которой Vault чаще всего внедряют.
Сравнение моделей
| Статический секрет | Динамический секрет |
| один пароль на всех | уникальные креды каждому потребителю |
| живёт годами | живёт минуты/часы (аренда) |
| ротация вручную | новый креды при каждом запросе |
| отзыв = смена пароля везде | авто-отзыв по истечении аренды |
| утечка = долгий доступ | утечка = доступ на минуты |
Как это выглядит
Приложению нужен доступ к БД. Вместо чтения статического пароля оно запрашивает креды у Vault и получает свежесозданную пару:
vault read database/creds/readonly
{
"lease_id": "database/creds/readonly/abCD12",
"lease_duration": 3600,
"renewable": true,
"data": {
"username": "v-token-readonly-x7Yq2",
"password": "A1b2-randomly-generated"
}
}
Пользователь v-token-readonly-x7Yq2 только что создан в самой БД и будет удалён через час (lease_duration). Следующий запрос даст другого пользователя.
Почему это безопаснее
Главный выигрыш — сужение окна компрометации. Украденные динамические креды действуют считанные минуты или часы, а не вечно. Плюс появляется точная атрибуция: каждый потребитель ходит под своим уникальным пользователем, и по логам БД видно, кто именно что делал. И ротация становится бесплатной: она происходит сама при каждом новом запросе.
Как работает под капотом
За динамику отвечает движок секретов (database, aws, gcp и др.), который умеет создавать и удалять сущности в целевой системе. Для этого у движка есть собственные привилегированные креды (например, админ БД). При запросе движок выполняет в целевой системе команду создания пользователя, регистрирует аренду (lease) и возвращает креды клиенту. Когда аренда истекает или отзывается, движок выполняет команду удаления. Vault выступает посредником с правом создавать и убирать доступы.
[ Приложение ] | read creds v [ Vault: database engine ] --CREATE USER--> [ PostgreSQL ] | возвращает временные креды + lease v [ Приложение ] -- работает с БД под временным юзером -- ... аренда истекла ... [ Vault ] --DROP USER--> [ PostgreSQL ]
Частые ошибки
- Кэшировать динамические креды надолго — приложение должно уметь получить новые, а не держать одни.
- Не обрабатывать истечение аренды — после её конца креды перестанут работать, нужно запросить заново.
- Считать, что это «обычный пароль из Vault» — это эфемерная сущность с жизненным циклом.
Итог
- Динамический секрет создаётся по запросу, живёт ограниченно и удаляется по истечении аренды.
- Это сужает окно компрометации, даёт атрибуцию и бесплатную ротацию.
- Движок сам создаёт и удаляет сущности в целевой системе, используя свои привилегированные креды.