Описание механизма “пространства имен” в 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). Необязательный параметр.