Skip to Content
Primo RPA OrchestratorСистемным администраторамНастройка хранения секретов служб в отдельной БД

Руководство по настройке хранения секретов служб в отдельной БД

Документ описывает настройку хранения конфиденциальных данных (логинов, паролей, ключей доступа) служб Оркестратора в выделенной базе данных ltoolssecrets вместо открытого хранения в конфигурационных файлах.

Поддерживаемые службы

СлужбаНазначение
AnalyticАналитическая подсистема
LicensesУправление лицензиями
LogEventsWebhookОтправка событий журнала во внешние системы
NotificationsСистема уведомлений
QueuesУправление очередями
RobotLogsЖурналирование работы роботов
StatesУправление состояниями
WebApiОсновной API Оркестратора

Принцип работы

При включении режима External службы Оркестратора считывают секреты из защищённой БД ltoolssecrets вместо значений, указанных в конфигурационных файлах appsettings.ProdWin.json или appsettings.ProdLinux.json. Это позволяет:

  • исключить хранение открытых паролей в файловой системе;
  • централизованно управлять доступами;
  • применять дополнительное шифрование чувствительных данных.

Требования

Для работы по такой схеме требуется::

1. Добавить секции в конфигурационный файл

В конфигурационный файл служб (appsettings.ProdWin.json или appsettings.ProdLinux.json) добавить (если отсутствует) секции DBVendor, PostgresWithSslOptions (если в качестве БД используется PostgreSQL и применяется шифрованное соединение с использованием SSL/TLS сертификата), Secrets:

{ "DBVendor": "Postgres" /* Возможные значения: Postgres, MSSQL */, "PostgresWithSslOptions": { "UseSsl": false /* true — добавить SSLMode=Require;TrustServerCertificate=true; в строку подключения */, "ClientCertPath": "C:\\Primo\\postgresql\\client_postgres.crt", "ClientCertKeyPath": "C:\\Primo\\postgresql\\client_postgres.key" }, "Secrets": { "External": true /* Хранение секретов в БД */, "PasswordEncrypted": true /* Пароли в БД секретов зашифрованы */, "ConnectionPasswordEncrypted": true /* Пароль в строке подключения к БД секретов зашифрован */ } }

2. Добавить строку подключения к БД секретов (если не используется переменная окружения)

Если для хранения строки подключения к БД с секретами не используется переменная окружения, то требуется добавить в секцию конфигов Secrets строку подключения к БД с секретами:

Пример для PostgreSQL:

"ConnectionString": "PORT=5432;TIMEOUT=15;POOLING=True;MINPOOLSIZE=1;MAXPOOLSIZE=20;COMMANDTIMEOUT=20;DATABASE=ltoolssecrets;HOST=192.168.0.136;USER ID=postgres;SearchPath=public;PASSWORD=49EqQ30zfcQTWxEGYE/mSw=="

Пример для MS SQL Server:

"ConnectionString": "Server=192.168.0.136;Connection Timeout=30;DATABASE=ltoolssecrets;Encrypt=Optional;USER ID=sa;PASSWORD=49EqQ30zfcQTWxEGYE/mSw=="

3. Использование переменной окружения

Если используется вариант с работой через переменную окружения, то необходимо создать переменную окружения SecretsConnection со строкой подключения к БД с секретами (по умолчанию наименование БД: ltoolssecrets). При этом учитываем, что пароль в строке подключения должен быть зашифрован, если в секции Secrets конфигов выставлен параметр "ConnectionPasswordEncripted": true. При этом необходимо удалить из конфигов строку подключения к БД с секретами.

Пример для переменной окружения при использовании PostgreSQL:

PORT=5432;TIMEOUT=15;POOLING=True;MINPOOLSIZE=1;MAXPOOLSIZE=20;COMMANDTIMEOUT=20;DATABASE=ltoolssecrets;HOST=192.168.0.136;USER ID=postgres;SearchPath=public;PASSWORD=49EqQ30zfcQTWxEGYE/mSw==

Пример для переменной окружения при использовании MS SQL Server:

Server=192.168.0.136;Connection Timeout=30;DATABASE=ltoolssecrets;Encrypt=Optional;USER ID=sa;PASSWORD=49EqQ30zfcQTWxEGYE/mSw==

4. Автоматическое создание БД секретов

Если БД с секретами ещё не существует, то она создастся автоматически при первом запуске службы WebApi оркестратора с выставленным в секции Secrets параметром "External": true. Все логины/пароли в этой БД при этом будут иметь дефолтные значения в незашифрованном виде. Логины/пароли нужно будет заменить своими, и если в секции Secrets выставлен параметр "PasswordEncripted": true, то пароли требуется зашифровать в соответствии с приведённой в п.5 таблицей хранения секретов.

5. Таблицы хранения секретов

Секреты (логины/пароли) хранятся в таких таблицах БД с секретами:

№ п/пСлужбаТаблицаПримечание
1AnalyticAnalyticВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "ConnectionStrings:AnalyticConnection:Password", "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase"
2LicensesLicensesВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "ConnectionStrings:LicensesConnection:Password", "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase"
3LogEventsWebhookLogEventsWebhookВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "HttpEndPoint:Password", "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase"
4NotificationsNotificationsВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "Email:FromPassword", "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase"
5QueuesQueuesВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase"
6RobotLogsRobotLogsВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "ScreenFileUpload:Minio:SecretKey", "ConnectionStrings:LogsConnection:Password", "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase"
7StatesStatesВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase"
8WebApiWebApiВ виде пар ключ-значение. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для ключей: "ConnectionStrings:DefaultConnection:Password", "ConnectionStrings:IdentityConnection:Password", "ConnectionStrings:LicenseConnection:Password", "ConnectionStrings:ProcessRepositoryConnection:Password", "RobotDeployment:SslCertPassword", "RobotDeployment:OrchPassword", "RabbitMQ:Password", "RabbitMQ:SslCertPassphrase", "Tenants:IncomingEmail:Password", "NuGet:ApiKey", "CyberArk:Password", "FileStore:Minio:SecretKey", "OpenId:KeyCloak:orch:ClientSecret"
9WebApiWebApiADСекреты из секции ActiveDirectory:MultyForest для каждого леса AD. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для данных в столбце "AdminPassword"
10WebApiWebApiTenantIncomingEmailСекреты из секции Tenants:Items для IncomingEmail каждого недефолтного тенанта. При выставленном параметре конфига "PasswordEncripted": true необходимо зашифровать значения для данных в столбце "Password"

6. Замена конфиденциальных данных в конфигурационных файлах

После настройки работы через БД секретов замените в конфигурационных файлах служб реальные пароли на заглушки.

alt