Команда d8 stronghold утилиты Deckhouse CLI — клиент Stronghold. Подкоманды и флаги совпадают с CLI HashiCorp Vault. Подробнее — в разделе «Совместимость с HashiCorp Vault».

При standalone-установке те же подкоманды доступны через исполняемый файл stronghold:

# Формат команды в Deckhouse Platform (DP).
d8 stronghold <COMMAND> [флаги] [аргументы]
# Формат команды в Linux.
stronghold <COMMAND> [флаги] [аргументы]

Справку по любой подкоманде выводит флаг -help, например d8 stronghold kv put -help.

Подключение к серверу

Переменные окружения

ПеременнаяНазначениеПример
STRONGHOLD_ADDRАдрес сервера Strongholdexport STRONGHOLD_ADDR=https://stronghold.example.com
STRONGHOLD_TOKENТокен, с которым выполняются запросы. Переопределяет токен, сохранённый командой loginexport STRONGHOLD_TOKEN=<TOKEN>
STRONGHOLD_CACERTПуть к CA-сертификату для проверки TLS-сертификата сервераexport STRONGHOLD_CACERT=/opt/stronghold/tls/stronghold-ca.pem

Клиент также читает переменные, которые задают параметры подключения. Перед запуском любая переменная STRONGHOLD_* копируется в одноимённую VAULT_*, поэтому все переменные ниже можно задавать с любым из двух префиксов. Если заданы обе, действует STRONGHOLD_*.

ПеременнаяНазначение
STRONGHOLD_NAMESPACEПространство имён, в котором выполняются команды (Stronghold EE)
STRONGHOLD_CAPATHКаталог с CA-сертификатами
STRONGHOLD_CLIENT_CERT, STRONGHOLD_CLIENT_KEYКлиентский сертификат и ключ для взаимного TLS
STRONGHOLD_TLS_SERVER_NAMEИмя сервера для проверки TLS-сертификата (SNI)
STRONGHOLD_SKIP_VERIFYОтключить проверку TLS-сертификата сервера. Клиент в этом случае не обнаружит подмену сервера
STRONGHOLD_CLIENT_TIMEOUTТайм-аут запросов клиента
STRONGHOLD_MAX_RETRIESМаксимальное число повторов запроса при ошибках
STRONGHOLD_WRAP_TTLВремя жизни для обёртывания ответа
STRONGHOLD_MFAДанные MFA для запроса
STRONGHOLD_FORMATФормат вывода по умолчанию, например json

Адрес сервера Stronghold в DP можно получить из объекта Ingress:

export STRONGHOLD_ADDR=https://$(d8 k -n d8-stronghold get ing stronghold -o json | jq -r '.spec.rules[0].host')

Общие флаги

ФлагНазначение
-address=<URL>Адрес сервера. Переопределяет STRONGHOLD_ADDR, например для обращения к secondary-кластеру
-namespace=<PATH>Пространство имён, в котором выполняется команда (Stronghold EE)
-format=<FORMAT>Формат вывода, например json
-field=<FIELD>Вывести только значение указанного поля ответа (для read, write, kv get и других)
-helpСправка по команде

Флаги подключения к серверу:

ФлагНазначение
-ca-cert=<PATH>Файл с CA-сертификатом для проверки сертификата сервера. Имеет приоритет над -ca-path
-ca-path=<PATH>Каталог с CA-сертификатами
-tls-skip-verifyОтключить проверку TLS-сертификата сервера. Клиент в этом случае не обнаружит подмену сервера
-output-curl-stringНе выполнять запрос, а вывести эквивалентную команду curl

Сервер и состояние

КомандаНазначениеПодробнее
server -config=<FILE>Запустить сервер Stronghold с указанным конфигурационным файлом (standalone). В DP сервером управляет модуль strongholdУстановка, настройка
statusПоказать состояние сервера: инициализация, Sealed, тип seal, режим HA, индексы RaftНастройка доступа
versionПоказать версию и редакцию Stronghold—
monitor -log-level=<LEVEL>Вывести журналы узла в реальном времениЖурналы
d8 stronghold status

operator

Команды обслуживания кластера. Требуют привилегированного токена или ключей распечатывания.

КомандаНазначениеКлючевые флагиПодробнее
operator initИнициализировать хранилище и получить доли ключа и root-токен. В DP выполняется модулем автоматически-key-shares, -key-thresholdУстановка
operator unsealВвести долю ключа распечатывания. Выполните столько раз, сколько задано -key-threshold—Seal и unseal
operator sealЗапечатать узел—Seal и unseal
operator rekeyСменить ключи распечатывания или восстановления-init, -nonce, -verifySeal и unseal
operator generate-rootСгенерировать новый root-токен по кворуму ключей-init, -nonce, -decode, -otpТокены
operator step-downЗаставить активный узел HA уступить роль—Переключение с EE на CSE
operator raft list-peersПоказать узлы Raft и их роли—Восстановление кворума Raft
operator raft joinПрисоединить узел к кластеру Raft-non-voterНастройка
operator raft autopilot stateПоказать состояние автопилота Raft—Мониторинг
operator raft snapshot save <FILE>Сохранить снимок Raft-хранилища—Создание снимка
operator raft snapshot restore <FILE>Восстановить хранилище из снимка-forceВосстановление
operator raft snapshot inspect <FILE>Проверить содержимое и консистентность снимка-validate, -depth, -filter, -formatПроверка снимка

Команда operator seal запечатывает сервер, а operator rotate выполняет ротацию ключа шифрования хранилища. Подробнее — в разделе «Управление ключами».

d8 stronghold operator raft snapshot save stronghold-$(date +%F_%H-%M).snap

Аутентификация

КомандаНазначениеКлючевые флагиПодробнее
loginВойти в Stronghold и сохранить токен-method, -path, -no-printНастройка доступа
auth enable <TYPE>Включить метод аутентификации-pathМетоды аутентификации
auth listПоказать включённые методы аутентификации-formatМетоды аутентификации
auth tune <PATH>Изменить параметры метода аутентификациинапример, -user-lockout-disableuserpass
d8 stronghold login -method=oidc -path=oidc_deckhouse -no-print

token

КомандаНазначениеКлючевые флагиПодробнее
token createСоздать токен-policy, -period, -orphan, -no-default-policy, -namespaceТокены
token renew [<TOKEN>]Продлить срок действия токена—Токены
token revoke <TOKEN>Отозвать токен и его дочерние токены-accessorТокены
d8 stronghold token create -policy=myapp-read -period=24h

policy

КомандаНазначениеПодробнее
policy write <NAME> <FILE>Создать или обновить ACL-политику. Вместо файла можно передать - и прочитать политику из stdinПолитики
d8 stronghold policy write myapp-read - <<'POLICY'
path "secret/data/myapp/*" {
  capabilities = ["read"]
}
POLICY

secrets

КомандаНазначениеКлючевые флагиПодробнее
secrets enable <TYPE>Подключить механизм секретов-path, -version (для kv)Механизмы секретов
secrets listПоказать подключённые механизмы секретов-formatМеханизмы секретов
secrets tune <PATH>Изменить параметры mount-max-lease-ttlPKI
secrets disable <PATH>Отключить механизм секретов и удалить его данные—Механизмы секретов
d8 stronghold secrets enable -path=secret -version=2 kv

kv

КомандаНазначениеКлючевые флагиПодробнее
kv put <PATH> <KEY>=<VALUE>Записать секрет-mountKV2
kv get <PATH>Прочитать секрет-mount, -version, -fieldKV2
kv patch <PATH> <KEY>=<VALUE>Частично обновить секрет-mountKV2
kv list <PATH>Показать ключи по пути-mountKV
kv delete <PATH>Удалить последнюю версию секрета (KV2 — с возможностью восстановления)-mount, -versionsKV2
kv undelete <PATH>Восстановить удалённые версии-mount, -versionsKV2
kv destroy <PATH>Безвозвратно удалить версии-mount, -versionsKV2
kv metadata get|put|patch|delete <PATH>Работа с метаданными секрета KV2-mount, -custom-metadataKV2
kv enable-versioning <PATH>Перевести хранилище KV1 на KV2—KV2
d8 stronghold kv put -mount=secret myapp/db password=s3cr3t
d8 stronghold kv get -mount=secret -field=password myapp/db

Универсальные команды

Работают с любым путём API: механизмами секретов, методами аутентификации и системным бэкендом sys/.

КомандаНазначениеКлючевые флаги
read <PATH>Прочитать данные-field, -format, -address
write <PATH> [<KEY>=<VALUE>...]Записать данные или выполнить операцию-f/-force (запрос без данных), -field
list <PATH>Показать ключи по пути-format
delete <PATH>Удалить данные по пути—
path-help <PATH>Показать справку по путям механизма—
d8 stronghold write -f transit/keys/orders/rotate
d8 stronghold read -address="${SECONDARY_ADDR}" sys/replication/dr/status
d8 stronghold path-help pki

lease

КомандаНазначениеКлючевые флагиПодробнее
lease renew <LEASE_ID>Продлить аренду-incrementАренды
lease revoke <LEASE_ID>Отозвать аренду-prefixАренды
d8 stronghold lease revoke -prefix database/creds/myapp/

audit

Аудит доступен во всех редакциях Stronghold.

КомандаНазначениеПодробнее
audit enable <TYPE> [параметры]Включить аудит-устройство file, syslog или socketАудит
audit listПоказать включённые аудит-устройстваАудит
audit disable <PATH>Отключить аудит-устройствоАудит
d8 stronghold audit enable file file_path=/var/log/stronghold_audit.log

namespace

Пространства имён доступны в Stronghold EE.

КомандаНазначениеКлючевые флагиПодробнее
namespace create <NAME>Создать пространство имён-namespace (родительское)Пространства имён
namespace listПоказать дочерние пространства имён-namespaceПространства имён
namespace lookup <NAME>Показать сведения о пространстве имён-namespaceПространства имён
namespace delete <NAME>Удалить пространство имён-namespaceПространства имён
namespace lock [<PATH>]Заблокировать Namespace API—Пространства имён
namespace unlock [<PATH>]Разблокировать Namespace API-unlock-keyПространства имён
d8 stronghold namespace create team-a

plugin

КомандаНазначениеКлючевые флагиПодробнее
plugin register <TYPE> <NAME>Зарегистрировать внешний плагин в каталоге-sha256, -versionПлагины в Standalone, плагины в DP
plugin deregister <TYPE> <NAME>Удалить плагин из каталога—Плагины
d8 stronghold plugin register -sha256="${PLUGIN_SHA}" secret my-custom-plugin