Хранилище секретов

Общие сведения о Хранилище секретов

Termidesk Connect позволяет получать секреты из хранилищ на базе OpenBao или HashiCorp Vault.

Хранилище секретов представляет собой сервер со специализированным ПО, предназначенным для безопасного хранения чувствительной информации: ключей шифрования, логинов, паролей, токенов, сертификатов и т. д.

Termidesk Connect предоставляет возможность настройки параметров подключения к Хранилищу секретов, например к OpenBao, Hashicorp Vault или другому.

Настройка подключения к Хранилищу секретов выполняется одним из способов:

Настройка подключения к Хранилищу секретов осуществляется через объект openbao (см. подраздел Объект openbao).

Termidesk Connect поддерживает следующие типы Хранилищ секретов:

  • kv – статическое хранилище. Возвращает значение, соответствующее указанному ключу. Используется для хранения статических паролей, API-ключей, токенов и конфигурационных файлов;

  • ad – AD/LDAP. Позволяет создавать временные учетные записи. Используется для управления динамическими учетными данными (LDAP) и данными аутентификации (AD);

  • pki – PKI. Используется генерации TLS/SSL-сертификатов по запросу. Каждый успешный запрос на выдачу или подпись создает новый уникальный сертификат с собственным закрытым ключом. Ранее выданные сертификаты продолжают действовать до истечения их времени жизни.

Для получения данных из Хранилищ секретов используется специально сформированный URL в следующем формате:

<тип>://<путь>[?<параметры>]#<секрет>

где:

  • <тип> – тип Хранилища секретов (kv, ad или pki);

  • <путь> – путь к секрету;

  • <параметры> – опциональные параметры запроса;

  • <секрет> – имя запрашиваемого секрета.

Примеры формирования URL

Пример 1. Получение секрета из Хранилища секретов kv версии 1.

Если секрет создан командами:

secrets enable -version=1 -path=legacy kv
vault kv put legacy/snmp username="snm-user" auth_key="authkey" priv_key="privkey"

Выполнить HTTP-запрос для чтения секрета:

curl -H "X-Vault-Token: root-token" http://192.0.2.1:8200/v1/legacy/snmp

Ответ в формате JSON:

{
    "request_id": "780cb833-32b7-2dfa-1699-51027d56b542",
    "data": {
        "auth_key": "snmp-authkey",
        "priv_key": "snm-privkey",
        "username": "snm-user2"
    }
}

Правила формирования URL на основе запроса:

  • определить схему: kv://;

  • извлечь путь из URL HTTP-запроса http://192.0.2.1:8200/v1/legacy/snmp, исключив базовую часть http://192.0.2.1:8200/v1/: legacy/snmp;

  • добавить к схеме kv:// полученный путь legacy/snmp: kv://legacy/snmp;

  • указать имя требуемого ключа через символ #:

    • для ключа username: kv://legacy/snmp#username;

    • для ключа auth_key: kv://legacy/snmp#auth_key;

    • для ключа priv_key: kv://legacy/snmp#priv_key.

Пример 2. Получение секрета из Хранилища секретов kv версии 2.

Если секрет создан командой:

vault kv put secret/snmp username="snm-user" auth_key="authkey" priv_key="privkey"

Выполнить HTTP-запрос для чтения секрета:

curl -H "X-Vault-Token: root-token" http://192.0.2.1:8200/v1/secret/data/snmp

Ответ:

{
    "request_id": "780cb833-32b7-2dfa-1699-51027d56b542",
    "data": {
        "data": {
            "auth_key": "snmp-authkey",
            "priv_key": "snm-privkey",
            "username": "snm-user2"
        }
    }
}

Правила формирования URL на основе запроса:

Правила аналогичны kv версии 1, отличие только в пути.
  • определить схему: kv://;

  • извлечь путь из URL HTTP-запроса http://192.0.2.1:8200/v1/secret/data/snmp, исключив базовую часть http://192.0.2.1:8200/v1/: secret/data/snmp;

  • добавить к схеме kv:// полученный путь secret/data/snmp: kv://secret/data/snmp;

  • указать имя требуемого ключа через символ #:

    • для ключа username: kv://secret/data/snmp#username;

    • для ключа auth_key: kv://secret/data/snmp#auth_key;

    • для ключа priv_key: kv://secret/data/snmp#priv_key.

Пример 3. Получение сертификатов из Хранилища секретов pki.

Если PKI и роль настроены через команды:

# Включение PKI
vault secrets enable pki

# Создание роли для выпуска сертификатов
vault secrets enable pki
    vault write pki/roles/example-dot-com \
    allowed_domains="example.com" \
    allow_subdomains=true \
    allow_bare_domains=true \
    max_ttl=72h

Выполнить HTTP-запрос для генерации сертификата:

В теле HTTP-запроса передаются параметры сертификата в формате JSON: {"common_name": "app.example.com", "ttl": "24h"}.

curl -H "X-Vault-Token: token" \
-d '{"common_name": "app.example.com", "ttl": "24h"}' \
http://192.0.2.1:8200/v1/pki/issue/example-dot-com

Ответ:

{
    "request_id": "e86ed1f5-f7bb-1f6a-a864-6a5540c92191",
    "lease_id": "",
    "renewable": false,
    "lease_duration": 0,
        "data": {
        "certificate": "-----BEGIN CERTIFICATE....",
        "issuing_ca": "-----BEGIN CERTIFICATE-----...",
        "private_key": "-----BEGIN RSA PRIVATE KEY-----..."
    },
    "wrap_info": null,
    "warnings": null,
    "auth": null,
    "mount_type": "pki"
}

Правила формирования URL на основе запроса:

  • определить схему: pki://;

  • извлечь путь из URL HTTP-запроса http://192.0.2.1:8200/v1/pki/issue/example-dot-com, исключив базовую часть http://192.0.2.1:8200/v1/: pki/issue/example-dot-com;

  • добавить к схеме pki:// полученный путь pki/issue/example-dot-com: kv://secret/data/snmp;

  • добавить параметры из тела запроса после символа ?: pki://pki/issue/example-dot-com?common_name="app.example.com"&ttl="24h";

    Из JSON-формата {"common_name": "app.example.com", "ttl": "24h"} формируется строка параметров: common_name="app.example.com"&ttl="24h".

  • указать конкретный сертификат или ключ для получения через символ #:

    • для сертификата:

      pki://pki/issue/example-dot-com?common_name="app.example.com"&ttl="24h"#certificate
    • для закрытого ключа:

      pki://pki/issue/example-dot-com?common_name="app.example.com"&ttl="24h"#private_key
    • для сертификата УЦ:

      pki://pki/issue/example-dot-com?common_name="app.example.com"&ttl="24h"#issuing_ca

Настройка подключения к Хранилищу секретов из CLI

Для настройки Хранилища секретов используются команды:

  • указание URL-адреса для Хранилища секретов:

set openbao url <URL-адрес>
Пример значения параметра: http://192.0.2.10:8200
  • указание VRF для подключения к Хранилищу секретов (по умолчанию – default):

set openbao vrf <имя_VRF>
  • задание максимально допустимого времени (в секундах) ожидания ответа HTTP-запроса от API-сервера (по умолчанию – 60):

set openbao request-timeout <значение>
  • задание интервала (в секундах) повторной отправки HTTP-запроса при возникновении ошибки (по умолчанию – 10):

set openbao retry-interval <значение>
  • задание интервала (в секундах) обновления токена авторизации (по умолчанию – 3600):

set openbao renew-token-interval <значение>
  • задание интервала (в секундах) обновления секретов (по умолчанию – 1800):

set openbao renew-secret-interval <значение>
Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых значений секретов.
  • задание интервала (в секундах) обновления сертификатов (по умолчанию – 86400):

set openbao renew-cert-interval <значение>
Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых значений сертификатов.
  • (опционально) указание пространства имен (Namespace), заданного в Хранилище секретов:

set openbao ns <значение>
  • настройка параметров аутентификации Termidesk Connect в Хранилище секретов:

    • указание пути к методу аутентификации (auth method) в Хранилище секретов:

      set openbao auth mount <значение>
    • задание идентификатора роли (RoleID) для метода аутентификации AppRole:

      set openbao auth approle <значение>
    • указание пути к файлу, содержащему идентификатор секрета (SecretID) или токен для его раскрытия (unwrapping):

      set openbao auth secret-file <значение>
    • указание флага использования упакованного токена (wrapped-token) для идентификатора секрета (SecretID) (по умолчанию – true):

      set openbao auth wrapping-token <true/false>

      Возможные значения:

      • true – содержимое файла будет предварительно раскрыто (unwrapped) для получения действительного идентификатора секрета (SecretID);

      • false – содержимое файла будет упаковано (wrapped) для получения действительного идентификатора секрета (SecretID).

  • (опционально) настройка параметров SSL-подключения к Хранилищу конфигурации:

    • задание файла сертификата УЦ (указывается полный путь и имя файла с расширением):

      set openbao ssl ca-cert <имя_файла>
      Пример значения параметра: /dev/shm/server.cert.
    • задание файла сертификата (указывается полный путь и имя файла с расширением):

      set openbao ssl cert <имя_файла>
    • задание файла ключа (указывается полный путь и имя файла с расширением):

      set openbao ssl key <имя_файла>
  • применение заданных настроек:

commit
  • сохранение настроек:

write

Настройка подключения к Хранилищу секретов из WUI

Для отображения настроек подключения к Хранилищу секретов следует перейти «Настройки – Безопасность – Хранилище секретов».

Для настройки подключения к Хранилищу секретов следует активировать «Хранилище секретов» и заполнить данные, перечисленные в столбце «Параметр» следующей таблицы (см. таблицу Основные параметры настройки подключения к Хранилищу секретов).

Таблица 1. Основные параметры настройки подключения к Хранилищу секретов
Параметр Описание

Общие настройки

«URL»

URL-адрес Хранилища секретов.

Пример значения параметра: «\http://192.0.2.10:8200»

«VRF»

Имя VRF для подключения к Хранилищу секретов.

Значение по умолчанию: «default»

«Время ожидания ответа HTTP-запроса, с»

Максимально допустимое время (в секундах) ожидания ответа HTTP-запроса от API-сервера.

Значение по умолчанию: «60»

«Интервал повторной отправки HTTP-запроса, с»

Интервал (в секундах) повторной отправки HTTP-запроса при возникновении ошибки.

Значение по умолчанию: «10»

«Интервал обновления токена авторизации, с»

Интервал (в секундах) обновления токена авторизации.

Значение по умолчанию: «3600»

«Интервал обновления секретов, с»

Интервал (в секундах) обновления секретов.

Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых значений секретов.

Значение по умолчанию: «1800»

«Интервал обновления сертификатов, с»

Интервал (в секундах) обновления сертификатов.

Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых сертификатов.

Значение по умолчанию: «86400»

«Пространство имён в Vault Enterprise»

Пространство имен (Namespace), заданное в Хранилище секретов

Секция «Проверка токена»

«Путь к методу аутентификации в OpenBao»

Путь к методу аутентификации (auth method) в Хранилище секретов

«Идентификатор роли для метода аутентификации AppRole»

Идентификатор роли (RoleID) для метода аутентификации AppRole

«Полный путь к файлу с Secret ID или токеном для unwrapping»

Путь к файлу, содержащему идентификатор секрета (SecretID) или токен для его раскрытия (unwrapping)

«Wrapping Token»

Настройка использования упакованного токена (wrapped-token) для идентификатора секрета (SecretID).

При активации параметра содержимое файла будет предварительно раскрыто (unwrapped) для получения действительного идентификатора секрета (SecretID). При отключении параметра содержимое файла будет упаковано (wrapped) для получения действительного идентификатора секрета (SecretID)

Секция «SSL/TLS соединение»

«Полный путь к файлу ключа»

Полный путь к файлу сертификата УЦ (указывается полный путь и имя файла с расширением)

«Полный путь к файлу сертификата»

Полный путь к файлу сертификата (указывается полный путь и имя файла с расширением)

«Полный путь к файлу сертификата УЦ»

Полный путь к файлу ключа (указывается полный путь и имя файла с расширением)

Для применения параметров следует нажать экранную кнопку [Применить].

Объект openbao

Доступные команды объекта openbao приведены в таблице (см. таблицу Доступные команды объекта openbao).

Таблица 2. Доступные команды объекта openbao
Команда Описание

set openbao auth <параметр> <значение>

Настройка параметров аутентификации Termidesk Connect в Хранилище секретов, параметром может быть:

  • approle – идентификатор роли (RoleID) для метода аутентификации AppRole;

  • mount – путь к методу аутентификации (auth method) в Хранилище секретов;

  • secret-file – путь к файлу, содержащему идентификатор секрета (SecretID) или токен для его раскрытия (unwrapping);

  • wrapping-token – флаг использования упакованного токена (wrapped-token) для идентификатора секрета (SecretID) (по умолчанию – true). Возможные значения:

  • true – содержимое файла будет предварительно раскрыто (unwrapped) для получения действительного идентификатора секрета (SecretID);

  • false – содержимое файла будет упаковано (wrapped) для получения действительного идентификатора секрета (SecretID)

set openbao ns <значение>

Пространство имен (Namespace), заданное в Хранилище секретов

set openbao renew-cert-interval <значение>

Интервал (в секундах) обновления сертификатов (по умолчанию – 86400). Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых сертификатов

set openbao renew-secret-interval <значение>

Интервал (в секундах) обновления секретов (по умолчанию – 1800). Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых значений секретов

set openbao renew-token-interval <значение>

Интервал (в секундах) обновления токена авторизации (по умолчанию – 3600)

set openbao request-timeout <значение>

Максимально допустимое время (в секундах) ожидания ответа HTTP-запроса от API-сервера (по умолчанию – 60)

set openbao retry-interval <значение>

Интервал (в секундах) повторной отправки HTTP-запроса при возникновении ошибки (по умолчанию – 10)

set openbao ssl <параметр> <значение>

Настройка параметров SSL-подключения к Хранилищу конфигурации, параметром может быть:

  • ca-cert – файл сертификата УЦ (указывается полный путь и имя файла с расширением). Пример значения параметра: /dev/shm/server.cert;

  • cert – файл сертификата (указывается полный путь и имя файла с расширением);

  • key – файл ключа (указывается полный путь и имя файла с расширением)

set openbao url <значение>

URL-адрес Хранилища секретов. Пример значения параметра: \hhttp://192.0.2.10:8200

set openbao vrf <значение>

Имя VRF для подключения к Хранилищу секретов (по умолчанию – default)