| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
| product:settings:system:vault [23.09.2024 12:14] – Белугин Александр | product:settings:system:vault [19.11.2024 10:23] (текущий) – [Примеры фрагментов из конфигурационного файла] ekaterina.menkhuzina |
|---|
| - Добавить раздел с перечнем ключей, получаемых из сервиса хранения секретов для строк соединения с СУБД. | - Добавить раздел с перечнем ключей, получаемых из сервиса хранения секретов для строк соединения с СУБД. |
| - Добавить раздел для получения секрета для сервисов [[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> | |