Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
product:settings:system:vault [20.09.2024 13:43] – [Изменения в конфигурационном файле] ekaterina.menkhuzinaproduct:settings:system:vault [19.11.2024 10:23] (текущий) – [Примеры фрагментов из конфигурационного файла] ekaterina.menkhuzina
Строка 1: Строка 1:
 ====== Настройка хранения строк подключения в Hashicorp Vault ====== ====== Настройка хранения строк подключения в Hashicorp Vault ======
-''Начиная с версии системы 3.29'', чтобы повысить безопасность хранения секретов (паролей, токенов/маркеров-доступа, API-ключей, закрытых криптографических ключей и т.п.) можно настроить подключение системы ADVANTA к СУБД или сервису [[product:settings:system:active_directory|Active Directory]] через сервис хранения секретов HashiCorp Vault.+''Начиная с версии системы 3.30'', чтобы повысить безопасность хранения секретов (паролей, токенов/маркеров-доступа, API-ключей, закрытых криптографических ключей и т.п.) можно настроить подключение системы ADVANTA к СУБД или сервису [[product:settings:system:active_directory|Active Directory]] через сервис хранения секретов HashiCorp Vault.
  
 В этом случае в системе или файлах конфигурации не будут храниться пароли к сервисам и службам компании. В этом случае в системе или файлах конфигурации не будут храниться пароли к сервисам и службам компании.
Строка 8: Строка 8:
   - Добавить раздел с перечнем ключей, получаемых из сервиса хранения секретов для строк соединения с СУБД.   - Добавить раздел с перечнем ключей, получаемых из сервиса хранения секретов для строк соединения с СУБД.
   - Добавить раздел для получения секрета для сервисов [[product:settings:system:active_directory|Active Directory]] (если используется).   - Добавить раздел для получения секрета для сервисов [[product:settings:system:active_directory|Active Directory]] (если используется).
 +  - После получения секретов, добавить алгоритм замены паролей - выполняется получение всех секретов и их перечень интерпретируется как набор именованных ключей, после чего, выполняется подстановка значений найденных ключей на их значение.
 ===== Изменения в конфигурационном файле ===== ===== Изменения в конфигурационном файле =====
 Необходимые изменения в конфигурационном файле ''client.config'' для запуска системы через получение паролей из сервиса хранения секретов HashiCorp Vault: Необходимые изменения в конфигурационном файле ''client.config'' для запуска системы через получение паролей из сервиса хранения секретов HashiCorp Vault:
-  - В разделе ''<configSections>'' добавить ''<section name= ″hashiCorpVault″ type=″Config.HashiCorpVaultConfigurationSection, smcorelib″/>'', параметр будет использоваться как индикатор необходимости использовать Hashicorp Vault. +  - В разделе ''<configSections>'' добавить обработку наличия секции ''<section name= ″hashiCorpVault″ type=″Config.HashiCorpVaultConfigurationSection, SL.App.Config″/>'', которая будет использоваться как индикатор необходимости использовать Hashicorp Vault. 
-  - В разделе ''<configuration>'' добавить следующие секции: +  - В разделе ''<configuration>'' добавить проверку и обработку секций: ''<hashiCorpVault address=″″ roleId=″″ secretId=″″ version=″″ mountPoint=″″ path=″″/>''.
-  * ''<hashiCorpVault address=″″ roleId=″″ secretId=″″>'' с закрывающим тэгом ''</hashiCorpVault>''+
-  * внутри секции ''hashiCorpVault'' добавить список контейнеров ''<containers>''……. ''</containers>'' в которой будет располагаться список контейнеров для заполнения из Hashicorp.+
  
-<callout type="info" icon="true">Формат описания одного контейнера: ''<add id=″″ version=″″ mountPoint=″″ path=″″/>'', где id – название контейнера+Секция ''hashiCorpVault'' содержит обязательные атрибуты:
- +
-Доступны названия: +
-  * ''adDomainPasswords'' – для [[product:settings:system:active_directory|Active Directory]]; +
-  * ''dbPasswords'' – для ''connectionString'' в СУБД. +
-</callout> +
- +
-Параметры для обращения к серверу Hashicorp Vault:+
   * ''address'' – адрес сервера Vault, обязательный;   * ''address'' – адрес сервера Vault, обязательный;
   * ''roleId'' – идентификатор (GUID) роли, обязательный;   * ''roleId'' – идентификатор (GUID) роли, обязательный;
-  * ''secretId'' – идентификатор (GUID) секрета, обязательный.+  * ''secretId'' – идентификатор (GUID) секрета, обязательный
 +  * ''version'' – обязательный параметр, версия контейнера. Возможные варианты: V1, V2. 
 +  * ''mountPoint'' – обязательный параметр, точка монтирования контейнера секретов; 
 +  * ''path'' - обязательный параметр, путь к секретам. 
 +===== Примеры фрагментов из конфигурационного файла ===== 
 +В конфигурационном файле ''client.config'' выполняется поиск ключей вида ''{$key$}'' и замена их на значения ''keyValue'', полученные из ''Vault''.
  
-Параметры для контейнерових может быть 2 вида:+При наличии в секции ''<configuration>'' секции ''<hashiCorpVault address=″″ roleId=″″ secretId=″″ version=″″ mountPoint=″″ path=″″/>'', пароли будут считаны из хранилища секретов как названия ключей и их значений (пары ''key''''keyValue''), для последующей замены. 
  
-1. ''dbPasswords'' – контейнер для хранения паролей для подключения к БД, в нем указываются параметры доступа в Hashicorp Vault, где размещен список хранимых секретов для СУБД. Перечень названий параметров, которые могут быть размещены в контейнер совпадает с набором ''connectionString'' из файла конфигурации: +<callout type="info" icon="true"> Названия ключей в хранилище секретов должны соответствовать всем ''{$key$}'' в заменяемых фрагментах.</callout>
-  * ''db'' – основная база системы; +
-  * ''dbCubes'' – база для хранения вынесенных кубов; +
-  * ''busDb'' – база хранения данных для шины; +
-  * ''sqlServerCacheDb'' – база хранения кэша.+
  
-2. ''adDomainPasswords'' – контейнер для хранения паролей учетных записей [[product:settings:system:active_directory|Active Directory]]. В этом контейнере обрабатывается один параметр: ''DOMAIN_NAME''+Проверяются на наличие строк шаблона разделы файла конфигурации: 
- +  настройки приложения секция ''<appSettings>''атрибут ''value''; 
-Общие параметры: +  * настройки [[product:settings:system:active_directory|Active Directory]] - секция ''<adDomains>''/''<domains>''атрибуты''login''''password''''ldappath''
-  - ''version'' – обязательный параметр, версия контейнера. Возможные вариантыV1, V2. +  * настройки [[product:settings:system:open_id|openIdConnect]] - секция ''<openIdConnect>''/''<providers>''атрибут ''clientSecret''
-  - ''mountPoint'' – обязательный параметр, точка монтирования контейнера секретов. +
-  - ''path'' - обязательный параметр, путь к секретам. +
- +
-===== Примеры фрагментов из конфигурационного файла ===== +
-При наличии секции ''<add id=″dbPasswords" version=″″ mountPoint=″″ path=″″/>'' пароли будут считаны из хранилища секретов. При этом названия ключей в хранилище должны соответствовать параметру ''name'' в секции ''connectionStrings''+
- +
-При отсутствии ключа какой-либо ''connectionString'', пароль для этой строки подключения считан из хранилища не будет. Пароль, указанный в ''connectionString'', будет заменен паролем из хранилища. Если пароль в ''connectionString'' не задан, то он будет добавлен в строку подключения.+
  
 Пример фрагмента из ''client.config'': Пример фрагмента из ''client.config'':
 <code csharp> <code csharp>
-<add id="dbPasswords" version="V2" mountPoint="kv-v2" path="dbPasswords"/>+<configuration> 
 +  <hashiCorpVault address="https://vault.yourcompany.ru:8200" roleId="roleId" secretId="secretId" version="V2" mountPoint="kv-v2" path="dbPasswords"/> 
 +………….   
 +</configuration> 
 ………….. …………..
-<connectionStrings> +  <connectionStrings> 
- + <add name="db" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=b-stable;User ID=SL_APP;Password={$db$};Pooling=true;Max Pool Size=4000; TrustServerCertificate=True" /> 
-        <add name="db" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=b-stable;User ID=SL_APP;Password=123;Pooling=true;Max Pool Size=4000; TrustServerCertificate=True"/> + <add name="dbCubes" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=b-stable;User ID={$busDB$};Password={$dbCubes$};Pooling=true;Max Pool Size=4000; TrustServerCertificate=True" />
- +
-        <add name="dbCubes" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=b-stable;User ID=SL_APP;Pooling=true;Max Pool Size=4000; TrustServerCertificate=True"/> +
   </connectionStrings>   </connectionStrings>
 </code> </code>
  
-<callout type="info" icon="true"> В примере для ''connectionString'' name=″db″, пароль '123', указанный в конфигурации, будет заменен на пароль из хранилища секретов. \\ К остальным строкам подключения будет добавлен пароль из хранилища секретов.</callout> +<callout type="info" icon="true"> В примере для двух ''connectionString'' name=''″db″'' и ''″dbCubes″'', размещены ключи''{$db$}'', ''{$busDB$}'', ''{$dbCubes$}''они будут заменены на их значения из хранилища секретов.</callout>
- +
-При наличии секции ''<add id=″adDomainPasswords″ version=″″ mountPoint=″″ path=″″/>'' пароли будут считаны из хранилища секретов, но выполняется она не при старте приложения, а при действиях, для которых необходима учетная запись [[product:settings:system:active_directory|Active Directory]]. При этом названия ключей в хранилище должны соответствовать параметру name в секции ''domains''+
- +
-Пример фрагмента из ''client.config'': +
-<code csharp> +
-<add id="adDomainPasswords" version="V2" mountPoint="kv-v2" path="adDomainPasswords"/+
-……………. +
-<adDomains> +
- +
-    <domains> +
- +
-      <add name="DOMAIN_NAME" login="login" password="password" ldappath="LDAP://DC=domain_name,DC=local"/>; +
- +
-    </domains> +
- +
-  </adDomains> +
-</code>+
  
-<callout type="info" icon="true"> В примере для ''domain name''=''″DOMAIN_NAME″'', пароль '''password''' указанный в конфигурации будет заменен на пароль из хранилища секретов.</callout>