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 — простая интеграция.
Проверьте себя
1. Что делает auto-auth в Vault Agent?
AШифрует данные
BСам аутентифицируется в Vault и поддерживает токен живым
CСоздаёт движки секретов
DРаспечатывает Vault
2. Что делают шаблоны (templating) Vault Agent?
AГенерируют политики
BРендерят секреты в файлы и обновляют их при ротации аренды
CСоздают unseal-ключи
DПодписывают сертификаты
3. Чем выгодна интеграция через Vault Agent?
AПриложение должно знать Vault API
BЛогин и продление выносятся в демон, а приложение просто читает файл/env
CОна требует root-токена
DОна отключает аудит