Модуль доступен только в Deckhouse Enterprise Edition, лицензируется и оплачивается отдельно

Управление секретами

Механизм секретов Key/Value - это универсальное хранилище ключевых значений, используемое для хранения произвольных секретов в пределах настроенного физического хранилища Deckhouse Stronghold.

Секреты, записанные в Deckhouse Stronghold, шифруются и затем записываются во внутреннее хранилище. Внутренний механизм хранения данных не имеет доступа к незашифрованным значениям и не обладает средствами, необходимыми для их расшифровки без использования Deckhouse Stronghold.

Механизм секретов ключ/значение имеет версии 1 и 2. Разница в том, что v2 обеспечивает версионность секретов, а v1 - нет.

Для взаимодействия с механизмом секретов K/V используйте команду vault kv <подкоманда> [options] [args].

Доступные подкоманды перечислены в следующей таблице:

Подкоманда kv v1 kv v2 Описание
delete x x Удаление версий секретов, хранящихся в K/V
destroy x Постоянное удаление одной или нескольких версий секретов
enable-versioning x Включение версионности для существующего хранилища K/V v1
get x x Получение данных
list x x Перечислить данные или секреты
metadata x Взаимодействие с хранилищем ключей-значений Stronghold патч
patch x Обновление секретов без перезаписи существующих секретов
put x x Установка или обновление секретов (при этом происходит замена существующих секретов)
rollback x Откат к предыдущей версии секретов
undelete x Восстановление удаленной версии секретов

Получение справки по командам

Взаимодействовать с механизмом секретов ключ/значение можно с помощью команды vault kv.

Получите справку по команде:

vault kv -help
Usage: vault kv <subcommand> [options] [args]
This command has subcommands for interacting with Stronghold's key-value
store. Here are some simple examples, and more detailed examples are
available in the subcommands or the documentation.
Create or update the key named "foo" in the "secret" mount with the value
"bar=baz":
$ vault kv put -mount=secret foo bar=baz
Read this value back:
$ vault kv get -mount=secret foo
Get metadata for the key:
$ vault kv metadata get -mount=secret foo
Get a specific version of the key:
$ vault kv get -mount=secret -version=1 foo
The deprecated path-like syntax can also be used, but this should be avoided
for KV v2, as the fact that it is not actually the full API path to
the secret (secret/data/foo) can cause confusion:
$ vault kv get secret/foo
Please see the individual subcommand help for detailed usage information.
Subcommands:
delete Deletes versions in the KV store
destroy Permanently removes one or more versions in the KV store
enable-versioning Turns on versioning for a KV store
get Retrieves data from the KV store
list List data or secrets
metadata Interact with Stronghold's Key-Value storage
patch Sets or updates data in the KV store without overwriting
put Sets or updates data in the KV store
rollback Rolls back to a previous version of data
undelete Undeletes versions in the KV store

Записывание секрета

Перед началом работы ознакомьтесь со справкой по команде:

vault kv put -help

В справке приведены примеры команд, а также необязательные параметры, которые можно использовать.

Запишите ключ-значение secret в путь hello, с ключом foo и значением world, используя команду vault kv put против пути mount path secret, на котором установлен механизм управления секретами KV v2. Эта команда создаст новую версию секрета и заменит все ранее существовавшие данные по указанному пути, если они существуют.

vault kv put -mount=secret hello foo=world
== Secret Path ==
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2022-06-15T19:36:54.389113Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1

Важно, чтобы путь монтирования к механизму секретов KV v2 был указан с параметром -mount=secret, иначе данный пример не будет работать. Путь монтирования secret (который был автоматически задан при запуске сервера Deckhouse Stronghold в режиме -dev) - это место, где можно читать и записывать произвольные секреты.

С помощью kv put можно записывать несколько фрагментов данных.

vault kv put -mount=secret hello foo=world excited=yes
== Secret Path ==
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2022-06-15T19:49:06.761365Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 2

Обратите внимание, что версия теперь равна 2. В примерах этого руководства для отправки секретов в Stronghold используется ввод <ключ>=<значение>. Однако отправка данных в составе команды CLI часто попадает в историю оболочки в незашифрованном виде.

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

Cекреты могут быть получены с помощью vault kv get.

vault kv get -mount=secret hello
== Secret Path ==
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2022-01-15T01:40:09.888293Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 2
===== Data =====
Key Value
--- -----
excited yes
foo world

Deckhouse Stronghold возвращает последнюю версию (в данном случае версию 2) секретов по адресу secret/hello.

Чтобы вывести только значение заданного поля, используйте флаг -field=<имя_ключа>.

vault kv get -mount=secret -field=excited hello
yes

Необязательный JSON-вывод может быть очень полезен для скриптов. Например, с помощью jq можно получить значение извлеченного секрета:

vault kv get -mount=secret -format=json hello | jq -r .data.data.excited
yes

Удаление секрета

Удалить секрет можно с помощью команды vault kv delete.

vault kv delete -mount=secret hello
Success! Data deleted (if it existed) at: secret/data/hello

Для проверки, попробуйте прочитать секрет, который только что удалили:

vault kv get -mount=secret hello
== Secret Path ==
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2022-01-15T01:40:09.888293Z
custom_metadata <nil>
deletion_time 2022-01-15T01:40:41.786995Z
destroyed false
version 2

На выходе отображаются только метаданные со временем удаления (deletion_time). Сами данные после удаления недоступны. Обратите внимание, что параметр destroyed со значением false указывает на возможность восстановления удаленных данных, если удаление произошло случайно.

vault kv undelete -mount=secret -versions=2 hello
Success! Data written to: secret/undelete/hello

Теперь данные восстановлены, как представлен на примере:

vault kv get -mount=secret hello
======= Metadata =======
Key Value
--- -----
created_time 2022-01-15T01:40:09.888293Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 2
===== Data =====
Key Value
--- -----
excited yes
foo world