Статические секреты: KV put и get

Базовая операция Vault: положить пару ключ-значение и потом её прочитать.

KV (Key-Value) движок — простейший движок секретов Vault для хранения произвольных статических данных в виде пар «ключ-значение» по путям.

С KV начинают почти все: это знакомая модель «папка → файл с полями». В dev-режиме KV-движок уже смонтирован на пути secret/.

Запись секрета

Команда kv put кладёт по пути одно или несколько полей сразу:

vault kv put secret/myapp/database \
  username="app_user" \
  password="S3cr3t!" \
  host="db.internal"

Путь secret/myapp/database вы придумываете сами — Vault не навязывает структуру. Хорошая практика — группировать по приложению и назначению.

Чтение секрета

vault kv get secret/myapp/database

Вывод:

===== Data =====
Key         Value
---         -----
host        db.internal
password    S3cr3t!
username    app_user

Чаще нужно достать одно поле — для подстановки в скрипт. Флаг -field печатает голое значение без оформления:

vault kv get -field=password secret/myapp/database

Машиночитаемый вывод

Для скриптов удобен JSON:

vault kv get -format=json secret/myapp/database
{
  "data": {
    "data": {
      "host": "db.internal",
      "password": "S3cr3t!",
      "username": "app_user"
    },
    "metadata": { "version": 1, "destroyed": false }
  }
}

Обратите внимание на вложенность data.data — это особенность KV версии 2, о ней отдельный урок.

Просмотр и удаление

# какие пути лежат под secret/myapp/
vault kv list secret/myapp/

# удалить последнюю версию (мягко)
vault kv delete secret/myapp/database

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

Каждая команда CLI превращается в HTTP-запрос к API. kv put — это POST на путь данных, kv getGET. Полученные поля Vault шифрует барьером и кладёт в storage. Никакой «специальной БД секретов» нет — те же зашифрованные записи в общем хранилище.

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

  • Использовать kv put для частичного обновления — он перезаписывает весь путь, затирая поля, которые вы не указали. Для добавления поля есть kv patch.
  • Парсить человекочитаемый вывод в скриптах — берите -field или -format=json.
  • Класть в KV то, что лучше выдавать динамически (креды БД) — статический KV не ротируется сам.

Итог

  • KV хранит статические секреты как пары «ключ-значение» по произвольным путям.
  • kv put пишет, kv get читает; -field и -format=json — для скриптов.
  • kv put перезаписывает путь целиком; для частичных правок есть kv patch.
Проверьте себя
1. Что делает vault kv put по уже существующему пути?
AДобавляет новые поля, сохраняя старые
BПерезаписывает путь целиком указанными полями
CНичего, выдаёт ошибку
DСоздаёт копию
2. Какой флаг печатает голое значение одного поля для подстановки в скрипт?
A-raw
B-field=имя
C-only
D-plain
3. Почему vault kv get -format=json показывает вложенность data.data?
AЭто ошибка вывода
BТак устроен KV версии 2: значения лежат под ключом data
CJSON всегда дублирует ключи
DЭто поле метаданных