Хранение чувствительной информации с выбранным способом хранения «hvac»
Алгоритм работы
Способ хранения паролей выбирается на этапе установки Termidesk VDI. Способ хранения паролей «hvac» подразумевает, что будет использоваться хранилище OpenBao или Hashicorp Vault. Хранилище при этом должно быть заранее создано и настроено. При использовании Hashicorp Vault со схемой AD поддерживается автоматическое обновление паролей.
|
Termidesk VDI не выполняет ротацию паролей и другой чувствительной информации в хранилище: это возлагается на администраторов хранилища. До начала установки Termidesk VDI администратору необходимо создать в хранилище контейнеры для хранения чувствительной информации. Эти контейнеры используются для подключения к элементам инфраструктуры, например для хранения учетных данных для подключения к MS AD. Формат хранения объектов и контейнеров в Termidesk VDI должен соответствовать формату, принятому в хранилище. Администратором подготавливается конфигурационный файл Termidesk VDI
Хранение RSA-ключей ( Ограничений на длину имени хранимого объекта нет, однако есть ограничения в Termidesk VDI:
|
Алгоритм работы Termidesk VDI с хранилищем после установки Termidesk VDI или старта службы termidesk-vdi:
-
первичный одноразовый токен доступа читается из файловой системы первой службой, получившей доступ к нему (
termidesk-celery-beatилиtermidesk-celery-worker). Путь расположения файла указан вSECRETS_OPENBAO_TOKEN; -
первичный одноразовый токен доступа преобразуется к открытому виду (извлекается
SECRET_ID) и используется для первичного подключения к хранилищу. При этом:-
на основе
SECRET_IDподготавливается новый «упакованный» (wrapped) токен и записывается в файл, указанный вSECRETS_OPENBAO_TOKEN. Этот токен используется службами, получившими доступ к нему; -
при запуске служб «упакованный» токен обновляется на новый. Далее отдельный процесс отслеживает время жизни «упакованного» токена и, при истечении времени (время жизни задается в параметре
SECRETS_OPENBAO_WRAP_TTL), обновляет его на новый. При штатной остановке службы «упакованный» токен также обновляется;
-
-
используя полученный
SECRET_IDи значение, заданное вSECRETS_OPENBAO_ROLE_ID, «Универсальный диспетчер» аутентифицируется для взаимодействия с хранилищем и получаетACCESS_TOKEN.ACCESS_TOKENпредоставляет доступ ко всей чувствительной информации, расположенной в хранилище для роли Termidesk VDI; -
при старте службы
termidesk-vdiи перед подключением к БД и брокеру сообщений выполняется запрос информации из хранилища для получения:-
DJANGO_SECRET_KEY; -
SECRETS_OPENBAO_DB_PATH; -
SECRETS_OPENBAO_RABBITMQ_PATH; -
METRICS_ACCESS_KEY; -
HEALTH_CHECK_KEY; -
другой чувствительной информации (например для подключения к объектам инфраструктуры);
-
-
после получения из хранилища
DJANGO_SECRET_KEYи всей перечисленной выше чувствительной информации во внутренней структуре Termidesk VDI (временной памятиtmpfs) значения устанавливаются в полученные из хранилища и используются для взаимодействия с компонентами.
Время действия ACCESS_TOKEN определяется политикой хранилища, но до момента истечения его срока жизни выполняется процесс обновления со стороны Termidesk VDI. Алгоритм работы Termidesk VDI при обновлении ACCESS_TOKEN:
-
проверка валидности
ACCESS_TOKENвыполняется отдельным процессом, запускаемым после его получения (получение описано в алгоритме выше); -
периодичность проверки задается параметром
SECRETS_OPENBAO_WATCHDOG_INTERVAL, заданным вtermidesk.conf; -
если оставшееся время действия
ACCESS_TOKENменьше значения, определенного в параметреSECRETS_OPENBAO_TTL_DEADLINEконфигурационного файлаtermidesk.conf, то начинается процесс обновления:-
из внутренней структуры Termidesk VDI читается
SECRET_IDи преобразуется к «упакованному» (wrapped) виду. Время действия такого «упакованного» токена определяется параметромSECRETS_OPENBAO_WRAP_TTL; -
SECRET_IDудаляется из внутренней структуры Termidesk VDI; -
процесс повторяется: происходит преобразование токена к открытому виду (извлечению
SECRET_ID) и получениеACCESS_TOKEN.
-
Хранение данных в контейнерах и примеры
Чувствительная информация (имена учетных записей, пароли, открытые и закрытые ключи, keytab-файлы, токены) хранится в контейнерах, пути к которым задаются вручную.
В контейнерах может содержаться как динамически обновляемая чувствительная информация, так и статическая. Поэтому в Termidesk VDI для определения типа информации используются префиксы при задании пути к контейнеру хранения:
-
hvac-ad://- префикс используется для динамически обновляемой чувствительной информации. Может быть задан как для хранилища Hashicorp Vault, так и для OpenBao, но последний требует специфической настройки; -
hvac-kv://- префикс используется для статической чувствительной информации. Может быть задан как для хранилища OpenBao, так и для Hashicorp Vault; -
hvac-pki://- префикс используется для информации о сертификатах. Может быть задан как для хранилища OpenBao, так и для Hashicorp Vault.
|
Помимо указания префикса должна использоваться точка монтирования (mount point), заданная администратором в хранилище. Для корректной работы Termidesk VDI со статической чувствительной информацией в хранилище должна быть повторена структура данных Active Directory. Контейнер, содержащий чувствительную информацию, должен содержать параметры:
Пример:
|
Таким образом общий формат указания пути к контейнеру хранениятчувствительной информации в Termidesk VDI выглядит следующим образом:
|
Символ «/» определяет, что должно быть возвращено все содержимое контейнера. Если нужно вернуть значение конкретной переменной (key) контейнера, символ «/» не используется. |
-
если нужно вернуть всю информацию из контейнера:
<префикс> <точка_монтирования#> <путь_к_контейнеру>/
-
если нужно вернуть только значение конкретного параметра:
<префикс> <точка_монтирования#> <путь_к_параметру_в_хранилище>
Допустим, в хранилище создан контейнер со статической информацией termidesk и точкой монтирования secret:
vault kv get secret/termidesk
Контейнер содержит следующие параметры:
========== Data ==========
Key Value
--- -----
current_password my_password
username Администратор
В этом случае в Termidesk VDI следует указывать:
-
для возврата всех параметров:
hvac-kv://secret#termidesk/(будет возвращено:{'current_password': 'my_password', 'username': 'Администратор'}); -
для возврата значения параметра
username:hvac-kv://secret#termidesk/username(будет возвращено:'Администратор').
Схема взаимодействия с хранилищем приведена на рисунке (см. рисунок Схема взаимодействия с хранилищем).
Дополнительные примеры приведены в таблице (см. таблицу Примеры указания путей к чувствительной информации в Termidesk).
| Команда в хранилище | Указание пути в Termidesk |
|---|---|
Команда записи роли в хранилище:
|
Где:
|
Команда записи сертификата в хранилище:
Команды вида |
Где:
|
Сгенерированный на контроллере домена
Команда записи
Пример команды для преобразования файла и одновременной записи в хранилище:
|
Где:
|
Пример команды записи данных для подключения к СУБД в хранилище:
|
Где:
|
Пример команды записи данных для подключения к RabbitMQ в хранилище:
Поддерживается указание до трех пар имени и пароля пользователя для подключения к RabbitMQ. Пример использования:
|
Где:
|