Хранилище секретов
Общие сведения о Хранилище секретов
Termidesk Connect позволяет получать секреты из хранилищ на базе OpenBao или HashiCorp Vault.
Хранилище секретов представляет собой сервер со специализированным ПО, предназначенным для безопасного хранения чувствительной информации: ключей шифрования, логинов, паролей, токенов, сертификатов и т. д.
Termidesk Connect предоставляет возможность настройки параметров подключения к Хранилищу секретов, например к OpenBao, Hashicorp Vault или другому.
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-запроса передаются параметры сертификата в формате |
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
-
Настройка подключения к Хранилищу секретов
Настройка подключения к Хранилищу секретов выполняется одним из способов:
-
из интерфейса командной строки Termidesk Connect;
-
из веб-интерфейса Termidesk Connect (см. подраздел Веб. Хранилище секретов).
Для настройки Хранилища секретов выполнить:
Описание параметров также приведено в подразделе Объект openbao.
|
-
указание URL-адреса для Хранилища секретов:
Пример значения параметра: http://192.0.2.10:8200
|
set openbao url <URL-адрес>
-
указание 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):
| Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых значений секретов. |
set openbao renew-secret-interval <значение>
-
задание интервала (в секундах) обновления сертификатов (по умолчанию –
86400):
| Termidesk Connect с заданной периодичностью будет отправлять запросы в Хранилище секретов для получения новых значений сертификатов. |
set openbao renew-cert-interval <значение>
-
(опционально) указание пространства имен (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):Возможные значения:
-
true– содержимое файла будет предварительно раскрыто (unwrapped) для получения действительного идентификатора секрета (SecretID); -
false– содержимое файла будет упаковано (wrapped) для получения действительного идентификатора секрета (SecretID).
set openbao auth wrapping-token <true/false> -
-
-
(опционально) настройка параметров SSL-подключения к Хранилищу конфигурации:
-
задание файла сертификата УЦ (указывается полный путь и имя файла с расширением):
Пример значения параметра: /dev/shm/server.cert.set openbao ssl ca-cert <имя_файла> -
задание файла сертификата (указывается полный путь и имя файла с расширением):
set openbao ssl cert <имя_файла> -
задание файла ключа (указывается полный путь и имя файла с расширением):
set openbao ssl key <имя_файла>
-
-
применение заданных настроек:
commit
-
сохранение настроек:
write