Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
Описание механизма “пространства имен” в Stronghold
Под механизмом “пространства имен” (namespaces) подразумевается изолированная логическая область внутри Stronghold, которая предоставляет свои собственные:
- политики (policies),
- пути монтирования (mount paths),
- секреты,
- механизмы аутентификации (auth methods),
- токены и сессии.
Каждое пространство имен работает как отдельный виртуальный Stronghold, при этом все пространства имен управляются одним экземпляром Stronghold-сервера.
Свойства пространств имен в Stronghold
- Иерархия: пространства имен образуют “дерево”, корнем которого является root (/) пространство имен.
- Каждое пространство имен может иметь вложенные пространства имен, при этом это пространство будет являться родительским.
- Каждое пространство имен содержит изолированные экземпляры sys/, auth/, token/, cubbyhole/ и другие пути монтирования, если они созданы.
- Изоляция: пути монтирования, секреты, политики, токены и т.д. изолированы между пространствами имен.
- Администратор родительского пространства может управлять вложенными пространствами имен. Для пользователя область видимости ограничена своим и дочерними пространствами.
Операции с пространствами имён в Stronghold
Для создания нового пространства имён необходим иметь права на чтение и запись по
пути /namespaces в текущем пространстве имён. Новое пространство имён не может иметь путь, который уже
зарегистрирован за каким-либо из существующих.
Имя пространства имен это его полный путь относительно корневого пространства имен root (/).
Для обращения к созданному пространству имён через cli необходимо указывать параметр -namespace=<your_namespace_name>
Для обращения к созданному пространству имён через REST API необходимо указывать в запросе заголовок
X-Vault-Namespace=<your_namespace_name>
Создание пространства имён через cli Stronghold
d8 stronghold namespace create -namespace=<parent_namespace_name> -custom-metadata=key="value" <new_namespace_name>Пример ответа:
Key Value
--- -----
custom_metadata map[key:value]
id c88b1992-d9d3-4160-8283-77163a4e7fae
path <new_namespace_name>/Описание параметров:
-namespace - абсолютный путь в иерархии пространств имен, в котором будет создано новое вложенное пространство с
именем <new_namespace_name> (может быть не указано, в этом случае новое вложенное пространство создается в root).
Необязательный параметр.
-custom-metadata - информация, описывающая пространство имен, хранящаяся в формате key/value. Необязательный параметр.
Создание пространства имён через REST API Stronghold
$ curl --header "X-Stronghold-Token: $STRONGHOLD_TOKEN" \
--header "X-Vault-Namespace: <parent_namespace_name>" \
--request POST \
--data @payload.json \
$STRONGHOLD_ADDR/v1/sys/namespaces/<new_namespace_name> | jq -r ".data"Описание параметров:
-X-Vault-Namespace - абсолютный путь в иерархии пространств имен, в котором будет создано новое вложенное
пространство с именем <new_namespace_name> (может быть не указано, в этом случае новое вложенное пространство
создается в root). Необязательный параметр.
-data - информация, описывающая пространство имен, хранящаяся в формате key/value. Необязательный параметр.
Чтение пространства имён через cli Stronghold
d8 stronghold namespace lookup -namespace=<parent_namespace_name> <namespace_name>Пример ответа:
Key Value
--- -----
custom_metadata map[key:value]
id c88b1992-d9d3-4160-8283-77163a4e7fae
path <namespace_name>/Описание параметров:
-namespace - абсолютный путь в иерархии пространств имен, в котором будет произведено чтение вложенного пространства с
именем <namespace_name> (может быть не указано, в этом случае чтение вложенного пространства производится в root).
Необязательный параметр.
Чтение пространства имён через REST API Stronghold
$ curl --header "X-Stronghold-Token: $STRONGHOLD_TOKEN" \
--header "X-Vault-Namespace: <parent_namespace_name>" \
--request GET \
$STRONGHOLD_ADDR/v1/sys/namespaces/<namespace_name>Описание параметров:
-X-Vault-Namespace - абсолютный путь в иерархии пространств имен, в котором будет произведено чтение вложенного
пространства с именем <namespace_name> (может быть не указано, в этом случае чтение вложенного пространства
производится в root). Необязательный параметр.
Вывод списка пространств имён через cli Stronghold
d8 stronghold namespace list -namespace=<parent_namespace_name>Пример ответа:
Keys
----
ns1/
ns2/Описание параметров:
-namespace - абсолютный путь в иерархии пространств имен, в котором происходит поиск и вывод вложенных пространств (
может быть не указано, в этом случае поиск и вывод вложенных пространств происходит в root). Необязательный параметр.
Вывод списка пространств имён через REST API Stronghold
$ curl --header "X-Stronghold-Token: $STRONGHOLD_TOKEN" \
--header "X-Vault-Namespace: <parent_namespace_name>" \
--request LIST \
$STRONGHOLD_ADDR/v1/sys/namespacesОписание параметров:
-X-Vault-Namespace - абсолютный путь в иерархии пространств имен, в котором происходит поиск и вывод вложенных
пространств (может быть не указано, в этом случае поиск и вывод вложенных пространств происходит в root). Необязательный
параметр.
Удаление пространства имён через cli Stronghold
d8 stronghold namespace delete -namespace=<parent_namespace_name> -custom-metadata=key="value" <namespace_name>Описание параметров:
-namespace - абсолютный путь в иерархии пространств имен, в котором планируется удаление вложенного пространства с
именем <namespace_name> (может быть не указано, в этом случае пространство удаляется из root). Необязательный
параметр.
Удаление пространства имён через REST API Stronghold
$ curl --header "X-Stronghold-Token: $STRONGHOLD_TOKEN" \
--header "X-Vault-Namespace: <parent_namespace_name>" \
--request DELETE \
$STRONGHOLD_ADDR/v1/sys/namespaces/<namespace_name>Описание параметров:
-X-Vault-Namespace - абсолютный путь в иерархии пространств имен, в котором планируется удаление вложенного
пространства с именем <namespace_name> (может быть не указано, в этом случае пространство удаляется из root).
Необязательный параметр.
Блокировка API пространства имён (Namespace API Lock)
Механизм блокировки API пространства имён позволяет администратору временно заблокировать все API-запросы к определённому пространству имён и всем его дочерним пространствам. При блокировке генерируется одноразовый ключ разблокировки, который необходимо сохранить — он потребуется для снятия блокировки (альтернативно разблокировку можно выполнить с помощью root-токена без ключа).
Блокировка пространства имён через CLI Stronghold
Заблокировать текущее пространство имён и все его дочерние:
d8 stronghold namespace lockЗаблокировать конкретное дочернее пространство имён (например, ns1/ns2/):
d8 stronghold namespace lock ns1/ns2Пример ответа:
Key Value
--- -----
unlock_key 7Hk3xQ9mR2pN5vL8wY4tZaВажно: Сохраните значение
unlock_key— оно потребуется для разблокировки.
Блокировка пространства имён через REST API Stronghold
Заблокировать пространство имён <namespace_name> из корневого пространства:
$ curl --header "X-Stronghold-Token: $STRONGHOLD_TOKEN" \
--request POST \
$STRONGHOLD_ADDR/v1/sys/namespaces/api-lock/lock/<namespace_name> | jq -r ".data"Заблокировать текущее пространство имён (определяется заголовком X-Vault-Namespace):
$ curl --header "X-Stronghold-Token: $STRONGHOLD_TOKEN" \
--header "X-Vault-Namespace: <namespace_name>" \
--request POST \
$STRONGHOLD_ADDR/v1/sys/namespaces/api-lock/lock | jq -r ".data"Пример ответа:
{
"unlock_key": "7Hk3xQ9mR2pN5vL8wY4tZa"
}Разблокировка пространства имён через CLI Stronghold
Разблокировать текущее пространство имён с помощью ключа разблокировки:
d8 stronghold namespace unlock -unlock-key=<key>Разблокировать текущее пространство имён с помощью root-токена (ключ не требуется):
d8 stronghold namespace unlockРазблокировать конкретное дочернее пространство имён:
d8 stronghold namespace unlock -unlock-key=<key> ns1/ns2Разблокировка пространства имён через REST API Stronghold
Разблокировать с помощью ключа разблокировки:
$ curl --header "X-Stronghold-Token: $STRONGHOLD_TOKEN" \
--request POST \
--data '{"unlock_key": "<key>"}' \
$STRONGHOLD_ADDR/v1/sys/namespaces/api-lock/unlock/<namespace_name>Разблокировать с помощью root-токена (без ключа):
$ curl --header "X-Stronghold-Token: $STRONGHOLD_ROOT_TOKEN" \
--request POST \
$STRONGHOLD_ADDR/v1/sys/namespaces/api-lock/unlock/<namespace_name>Описание параметров API блокировки
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
<namespace_name> (путь) |
string | нет | Путь пространства имён для блокировки/разблокировки. Если не указан, операция применяется к текущему пространству (определяемому заголовком X-Vault-Namespace). |
unlock_key (тело запроса) |
string | нет | Ключ разблокировки, полученный при блокировке. Обязателен для разблокировки, если токен не является root-токеном. |
Пример: блокировка и разблокировка пространства имён
# Создаём пространство имён
d8 stronghold namespace create production
# Блокируем его
d8 stronghold namespace lock production
# Key Value
# --- -----
# unlock_key 7Hk3xQ9mR2pN5vL8wY4tZa
# Любые запросы к production теперь заблокированы:
d8 stronghold secrets list -namespace=production
# Error: API access to this namespace has been locked by an administrator...
# Разблокируем с ключом
d8 stronghold namespace unlock -unlock-key=7Hk3xQ9mR2pN5vL8wY4tZa production
# Доступ восстановлен
d8 stronghold secrets list -namespace=production