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