Руководство по настройке хранения секретов служб Оркестратора в Vault
Доступно с версии 1.26.4+
Содержание
- Настройка Vault
- Настройка служб Оркестратора
- Параметры настройки служб Оркестратора
- Автоматизация первоначальной настройки
Службы Оркестратора могут хранить чувствительные данные (пароли, логины, ключи доступа) во внешнем хранилище HashiCorp Vault . При использовании Vault секреты загружаются при запуске и заменяют значения из конфигурационных файлов.
Поддерживаются следующие службы: Analytic, Licenses, LogEventsWebhook, Notifications, Queues, RobotLogs, States, WebApi.
Чтобы использовать Vault, необходимо:
- Настроить Vault (создать Secret Engine, политики, пользователей).
- В конфигурационных файлах служб установить
"External": 1в секцииSecrets. - Задать переменные окружения для подключения к Vault.
После успешной настройки значения секретов в конфигах можно заменить любыми заглушками — они не используются.
Если Vault недоступен или служба не может получить секреты (ошибка подключения, недостаточно прав, неверные учётные данные), запуск службы завершится ошибкой.
Настройка Vault
Для выполнения операций настройки требуется авторизация в административном веб-интерфейсе Vault с использованием root token либо токена с административными привилегиями.

Страница авторизации в Vault
Токен необходимо получить у администратора Vault.
Общая схема настройки Vault
Ниже приведена общая схема взаимодействия служб Оркестратора с HashiCorp Vault.
Для каждой службы выполняются следующие действия:
- В Secret Engine
orchestratorсоздаётся путь с секретами службы. - Пользователи добавляются в Authentication Method.
- Создаётся политика доступа, разрешающая чтение только необходимых секретов.
- Политика назначается соответствующему пользователю.
Такой подход обеспечивает изоляцию секретов между службами и ограничивает доступ каждой службы только собственными секретами.
Пользователи для каждой службы могут быть индивидуальными:

Схема: у каждой службы свой пользователь
Если все службы разворачиваются на одном сервере, допускается использование общего пользователя:

Схема: один пользователь на все службы
Рекомендация Для production-сред рекомендуется использовать отдельного пользователя Vault для каждой службы Оркестратора.
Добавление Secret Engine
Добавьте новый Secret Engine (точку монтирования):

Добавление Secret Engine
Выберите тип хранилища KV (Key-Value):

Выбор типа Secret Engine
Используется KV Secrets Engine v2 , поддерживающий версионирование секретов.
Измените значение параметра Path на orchestrator:

Secret Engine с Path = orchestrator
Добавление секретов
В рамках данного документа под секретом понимается объект Vault KV, содержащий набор пар ключ–значение. Каждая служба Оркестратора использует отдельный путь в Vault. Внутри пути размещаются параметры, содержащие чувствительные данные:
- логины;
- пароли;
- токены;
- ключи доступа;
- сертификаты и другие секреты.
Для каждой службы Оркестратора добавьте секреты.
Значение пути должно совпадать со значением переменной {SERVICE}_VAULT_PATH.
Имя секрета (Path for this secret) должно начинаться с имени службы.
Например, для WebApi:

Секреты WebApi
Полный перечень путей и ключей для всех служб приведён в разделе «Параметры настройки служб Оркестратора».
Добавление политик доступа к секретам
Политика Vault определяет:
- к каким путям служба имеет доступ;
- какие операции разрешены.
Для каждой службы рекомендуется создавать отдельную политику, предоставляющую минимально необходимый набор прав только на чтение собственных секретов.
Пример политики для WebApi:

Политика для WebApi
Подробная информация о политиках Vault доступна в документации: Vault Policies
Полный перечень политик и их содержимого для всех служб также приведён в разделе Параметры настройки служб.
Добавление Authentication Method
Добавьте новый метод аутентификации:

Добавление Authentication Method
Выберите тип Username & Password:

Выбор Username & Password
Параметр Path измените на orchestrator:

Path = orchestrator
На вкладке Method Options для параметра Token Type выберите service:

Token Type = service
Тип токена service рекомендуется для сервисных учётных записей, используемых приложениями и фоновыми службами.
Дополнительная информация: Username & Password Auth Method
Добавление пользователей
Для каждой службы Оркестратора создайте пользователя. Рекомендуется задавать значение Username, совпадающее с именем службы.
Задайте пароль пользователя.
Пример для WebApi:

Создание пользователя WebApi
После создания пользователя откройте вкладку Configuration и добавьте значение в параметр Generated Token’s Policies.
В качестве значения укажите ранее созданную политику, например WebApi.

Добавление политики пользователю
Настройка служб Оркестратора
Настройка конфигурационного файла
В конфигурационном файле службы добавьте или измените секцию Secrets:
"Secrets": {
"External": 1
}
Секция Secrets
Параметр External:
1— использовать HashiCorp Vault; остальные параметры секцииSecretsигнорируются.nullили отсутствие параметра — использовать значения из конфигурационного файла.0— использовать устаревший механизм хранения секретов в отдельной БД. (сохранен для обратной совместимости).
Настройка переменных окружения
Все параметры подключения к Vault задаются через переменные окружения ОС. Службы считывают значения переменных окружения во время запуска.
Например, для WebApi переменные окружения выглядят следующим образом:
{
"VAULT_URL": "http://localhost:8400",
"WEBAPI_VAULT_PATH": "/webapi",
"VAULT_MOUNT_POINT": "orchestrator",
"WEBAPI_VAULT_USER_NAME": "webapi",
"WEBAPI_VAULT_PASSWORD": "Qwe123!@#"
}
Переменные окружения для WebApi
Значения переменных окружения не шифруются и могут быть доступны процессам с соответствующими правами ОС.
Общие переменные (для всех служб):
| Переменная | Описание |
|---|---|
VAULT_URL | URL-адрес сервера Vault |
VAULT_MOUNT_POINT | Путь в Vault, по которому зарегистрирован Secret Engine (orchestrator) |
Параметры, которые начинаются с {ИМЯ_СЛУЖБЫ}_– специфические для конкретной службы.
| Переменная | Описание |
|---|---|
{SERVICE}_VAULT_PATH | Путь в Vault, где лежат секреты службы |
{SERVICE}_VAULT_USER_NAME | Имя пользователя для аутентификации в Vault |
{SERVICE}_VAULT_PASSWORD | Пароль пользователя (если не задан общий) |
Если несколько служб работают на одном узле, можно задать общие VAULT_USER_NAME и VAULT_PASSWORD (без префикса службы) — они будут использоваться всеми службами.
Значения переменных окружения не шифруются. Обеспечьте безопасность их хранения (например, через защищённые механизмы ОС).
Полное описание специфических параметров окружения для каждой службы приведено ниже.
Параметры настройки служб Оркестратора
Analytic
Путь в Vault: analytic
Ключи секретов:
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | ConnectionStrings:AnalyticConnection:User | postgres |
| 2. | ConnectionStrings:AnalyticConnection:Password | postgres |
| 3. | RabbitMQ:UserName | admin |
| 4. | RabbitMQ:Password | Qwe123!@# |
| 5. | RabbitMQ:SslCertPassphrase |
Политика в Vault (analytic):
path "orchestrator/data/analytic" {
capabilities = ["read", "list"]
}Переменные окружения:
ANALYTIC_VAULT_PATH=analytic
ANALYTIC_VAULT_USER_NAME=analyticLicenses
Путь в Vault: licenses
Ключи секретов:
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | ConnectionStrings:LicensesConnection:User | postgres |
| 2. | ConnectionStrings:LicensesConnection:Password | postgres |
| 3. | RabbitMQ:UserName | admin |
| 4. | RabbitMQ:Password | Qwe123!@# |
| 5. | RabbitMQ:SslCertPassphrase |
Политика в Vault (licenses):
path "orchestrator/data/licenses" {
capabilities = ["read", "list"]
}Переменные окружения:
LICENSES_VAULT_PATH=licenses
LICENSES_VAULT_USER_NAME=licensesLogEventsWebhook
Путь в Vault: logeventswebhook
Ключи секретов:
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | RabbitMQ:UserName | admin |
| 2. | RabbitMQ:Password | Qwe123!@# |
| 3. | RabbitMQ:SslCertPassphrase | |
| 4. | HttpEndPoint:UserName | |
| 5. | HttpEndPoint:Password |
Политика в Vault (logeventswebhook):
path "orchestrator/data/logeventswebhook" {
capabilities = ["read", "list"]
}Переменные окружения:
LOGEVENTSWEBHOOK_VAULT_PATH=logeventswebhook
LOGEVENTSWEBHOOK_VAULT_USER_NAME=logeventswebhookNotifications
Путь в Vault: notifications
Ключи секретов:
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | RabbitMQ:UserName | admin |
| 2. | RabbitMQ:Password | Qwe123!@# |
| 3. | RabbitMQ:SslCertPassphrase | |
| 4. | Email:FromUserName | |
| 5. | Email:FromPassword |
Политика в Vault (notifications):
path "orchestrator/data/notifications" {
capabilities = ["read", "list"]
}Переменные окружения:
NOTIFICATIONS_VAULT_PATH=notifications
NOTIFICATIONS_VAULT_USER_NAME=notificationsQueues
Путь в Vault: queues
Ключи секретов:
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | RabbitMQ:UserName | admin |
| 2. | RabbitMQ:Password | Qwe123!@# |
| 3. | RabbitMQ:SslCertPassphrase |
Политика в Vault (queues):
path "orchestrator/data/queues" {
capabilities = ["read", "list"]
}Переменные окружения:
QUEUES_VAULT_PATH=queues
QUEUES_VAULT_USER_NAME=queuesRobotLogs
Путь в Vault: robotlogs
Ключи секретов:
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | ConnectionStrings:LogsConnection:User | postgres |
| 2. | ConnectionStrings:LogsConnection:Password | postgres |
| 3. | RabbitMQ:UserName | admin |
| 4. | RabbitMQ:Password | Qwe123!@# |
| 5. | RabbitMQ:SslCertPassphrase | |
| 6. | ScreenFileUpload:Minio:AccessKey | |
| 7. | ScreenFileUpload:Minio:SecretKey |
Политика в Vault (robotlogs):
path "orchestrator/data/robotlogs" {
capabilities = ["read", "list"]
}Переменные окружения:
ROBOTLOGS_VAULT_PATH=robotlogs
ROBOTLOGS_VAULT_USER_NAME=robotlogsStates
Путь в Vault: states
Ключи секретов:
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | RabbitMQ:UserName | admin |
| 2. | RabbitMQ:Password | Qwe123!@# |
| 3. | RabbitMQ:SslCertPassphrase |
Политика в Vault (states):
path "orchestrator/data/states" {
capabilities = ["read", "list"]
}Переменные окружения:
STATES_VAULT_PATH=states
STATES_VAULT_USER_NAME=statesWebApi
Пути в Vault:
webapi— основные секретыwebapi/ad/{ad-name}— для каждого AD-подключенияwebapi/tenant/{tenant-id}— для каждого тенанта
Ключи секретов (основной путь webapi):
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | ConnectionStrings:DefaultConnection:User | postgres |
| 2. | ConnectionStrings:DefaultConnection:Password | postgres |
| 3. | ConnectionStrings:IdentityConnection:User | postgres |
| 4. | ConnectionStrings:IdentityConnection:Password | postgres |
| 5. | ConnectionStrings:LicenseConnection:User | postgres |
| 6. | ConnectionStrings:LicenseConnection:Password | postgres |
| 7. | ConnectionStrings:ProcessRepositoryConnection:User | postgres |
| 8. | ConnectionStrings:ProcessRepositoryConnection:Password | postgres |
| 9. | RobotDeployment:SslCertPassword | |
| 10. | RobotDeployment:OrchPassword | Qwe123!@# |
| 11. | RabbitMQ:UserName | admin |
| 12. | RabbitMQ:Password | Qwe123!@# |
| 13. | RabbitMQ:SslCertPassphrase | |
| 14. | Tenants:IncomingEmail:UserName | |
| 15. | Tenants:IncomingEmail:Login | |
| 16. | Tenants:IncomingEmail:Password | |
| 17. | NuGet:ApiKey | Qwe123!@# |
| 18. | CyberArk:UserName | |
| 19. | CyberArk:Password | |
| 20. | FileStore:Minio:AccessKey | |
| 21. | FileStore:Minio:SecretKey | |
| 22. | OpenId:KeyCloak:orch:ClientId | orch |
| 23. | OpenId:KeyCloak:orch:ClientSecret |
Ключи секретов для AD (webapi/ad/{ad-name}):
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | AdAdminUserName | Administrator@primo.local |
| 2. | AdAdminPassword | Qwe123!@# |
Ключи секретов для тенанта (webapi/tenant/{tenant-id}):
| № | Наименование ключа | Значение по умолчанию |
|---|---|---|
| 1. | TenantIncomingEmailUserName | |
| 2. | TenantIncomingEmailLogin | |
| 3. | TenantIncomingEmailPassword |
Политика в Vault (webapi):
path "orchestrator/data/webapi" {
capabilities = ["read", "list"]
}
path "orchestrator/data/webapi/+/*" {
capabilities = ["read", "list"]
}
path "orchestrator/metadata/webapi/*" {
capabilities = ["read", "list"]
}Переменные окружения:
WEBAPI_VAULT_PATH=webapi
WEBAPI_VAULT_USER_NAME=webapiАвтоматизация первоначальной настройки
Первоначальная настройка Vault для Оркестратора может быть автоматизирована с помощью скрипта, поставляемого вместе с продуктом:
vault-orch.sh(Linux)vault-orch.ps1(Windows)
Перед запуском скрипта необходимо заменить в нём значения переменных url и root_token на свои:

Переменные url и root_token в скрипте
После выполнения скрипта будет создана вся необходимая инфраструктура в Vault: Secret Engine, политики, метод аутентификации, пользователи и начальные секреты.
Дальнейшее управление секретами (изменение, добавление новых) выполняется вручную через административный интерфейс Vault или его API — по мере необходимости.
Если в вашей среде используется старая версия Оркестратора (ниже 1.26.3.0), функция хранения секретов в Vault недоступна. Для таких версий используйте хранение секретов в отдельной БД.
Проверка работоспособности
После завершения настройки:
- Перезапустите службу Оркестратора.
- Убедитесь в отсутствии ошибок аутентификации Vault.
- Проверьте журналы службы.
- Убедитесь, что секреты успешно загружены из Vault.
Типовые ошибки
| Ошибка | Возможная причина |
|---|---|
permission denied | Неверная policy или отсутствует доступ к пути |
secret not found | Указан неверный путь секрета |
authentication failed | Неверные учётные данные Vault |
connection refused | Неверный VAULT_URL или Vault недоступен |
failed to read secret | Отсутствует секрет или ключ |