Vault Agent и auto-auth
Демон-помощник, который логинит приложение в Vault и подсовывает ему секреты, чтобы код этого не делал сам.
Vault Agent — клиентский демон, который сам аутентифицируется в Vault (auto-auth), хранит и продлевает токен и рендерит секреты в файлы по шаблонам, разгружая приложение.
Можно встроить логику логина и продления токенов в каждое приложение, но это дублирование и источник ошибок. Vault Agent выносит эту рутину в отдельный процесс рядом с приложением.
Что делает Agent
- auto-auth — сам логинится выбранным методом (AppRole, Kubernetes...) и поддерживает токен живым.
- кэш токена — отдаёт токен приложению, скрывая детали логина.
- templating — читает секреты и рендерит их в конфиг-файлы, обновляя при ротации.
Конфигурация auto-auth
auto_auth {
method "approle" {
config = {
role_id_file_path = "/etc/vault/role-id"
secret_id_file_path = "/etc/vault/secret-id"
}
}
sink "file" {
config = { path = "/run/vault/token" }
}
}
Agent читает RoleID/SecretID, логинится и кладёт полученный токен в «sink»-файл, откуда его берёт приложение. Продление токена — забота Agent.
Шаблоны секретов
Самый удобный паттерн — Agent сам подставляет секреты в конфиг приложения через шаблон (синтаксис Consul Template):
template {
destination = "/run/secrets/db.env"
contents = <<EOT
{{ with secret "database/creds/readonly" }}
DB_USER={{ .Data.username }}
DB_PASS={{ .Data.password }}
{{ end }}
EOT
}
Agent запрашивает динамические креды, пишет их в /run/secrets/db.env, а когда аренда подходит к концу — получает новые и перезаписывает файл (и может перезапустить/сигналить приложению). Приложение просто читает обычный файл.
Как работает под капотом
Agent — это полноценный Vault-клиент в режиме демона. auto-auth реализует цикл: логин → получить токен → следить за его TTL → продлевать заранее → при провале перелогиниться. Templating подписывается на секреты: для динамических — отслеживает аренду и обновляет файл до истечения; для KV — может периодически перечитывать. Так приложение всегда видит свежие секреты, ничего не зная про Vault API. Это превращает интеграцию из «перепиши приложение» в «положи рядом Agent».
Зачем это удобно
| Без Agent | С Agent |
| код логина в каждом приложении | логин вынесен в демон |
| приложение само продлевает аренду | Agent продлевает автоматически |
| знание Vault API в коде | приложение читает файл/env |
Частые ошибки
- Дублировать логин в коде, имея Agent — лишняя сложность и точки отказа.
- Класть sink-токен в мир-читаемый файл — права доступа к нему критичны.
- Не реагировать на обновление шаблона — приложение продолжит использовать протухшие креды.
Итог
- Vault Agent берёт на себя auto-auth, хранение и продление токена.
- Шаблоны рендерят секреты в файлы и обновляют их при ротации аренды.
- Приложение читает обычный файл/env и не знает про Vault API — простая интеграция.