Описание по интеграции c SecMan#
Secret Management (SecMan) — система хранения и управления secret(s). В качестве secret(s) используются credentials, мигрированые из Jenkins в хранилище SecMan и данные secret(s) файлов из репозитория стендозависимых параметров.
Экземпляры(instances) SecMan#
Экземпляры Vault Secret Management различаются в зависимости от сегмента сети и назначения стендов. Для хранения secret(s) промышленных стендов используется экземпляр в соответствующем сегменте, для остальных стендов — экземпляр с тестовой среды в соответствующем сегменте.
Ссылка(образец) |
Для каких сред применяется instance |
|---|---|
p.secrets.domain.ru |
Промышленные стенды |
t.secrets.domain.ru |
Тестовые (до ПСИ включительно) стенды |
Структура хранения secret(s)#
На рисунке ниже представлена иерархия хранения secret(s), по которой формируется путь для secret(s) АС: КЭ АС_КЭ СТЕНДА/A/ИМЯ БЛОКА/ГРУППА SECRET(S)/ДОПОЛНИТЕЛЬНОЕ ПРОСТРАНСТВО/ДВИЖОК SECRET(S)/КАТАЛОГ/SECRET(S) Например: CI01994970_CI02129749/A/SNPS/JEN/IFT/KV/domen_auth_users/ciCredDelta, где
CI01994970_CI02129749 в схеме формирования пути — КЭ АС_КЭ СТЕНДА (уровень «Тенант» или уровень стенда). Является родительским для всех остальных уровней.
A в схеме формирования пути — /A (Уровень «Секреты АС»). На 2 уровне иерархии выполняется разделение на хранение secret(s) инфраструктуры (I) и АС (A) для распределения доступов между группами сопровождения инфраструктуры и АС.
SNPS в схеме формирования пути — /ИМЯ БЛОКА (уровень «Блок»). Блок — это георезервированная end-to-end выделенная группа КТС, т.е. shards, обслуживающие заданную группу клиентов.
JEN в схеме формирования пути — /ГРУППА SECRET(S) (уровень «Общие secret(s)/Jenkins/Orchestrator/Прикладные secret(s)»). В имени пространства указывается соответствующая группа secret(s) (Global/Jenkins/Orchestrator/App). На этом уровне выполняется разделение на группы secret(s). Существующие группы secret(s):
Общие secret(s) (global) — сокращенное значение GLOB
Jenkins (jenkins) — сокращенное значение JEN
Orchestrator (orchestrator) — сокращенное значение OSH
Прикладные secret(s) (app) — сокращенное значение APP
Secret(s) MEF — сокращенное значение MEF
IFT в схеме формирования пути — /ДОПОЛНИТЕЛЬНОЕ ПРОСТРАНСТВО (уровень дополнительных пространств). На данном уровне при необходимости можно разделить хранение secret(s) по дополнительным пространствам.
KV в схеме формирования пути — /ДВИЖОК SECRET(S)
domen_auth_users в схеме формирования пути — /КАТАЛОГ. Актуален, если secret(s) разделены по типам (аналог Domain в Credentials(Jenkins), возможно дублирование наименований secret(s)
ciCredDelta в схеме формирования пути — /SECRET(S)

Рисунок. Структура хранилища secret(s)
Типы secret(s) в SecMan — типы credentials в Jenkins#
SecMan |
Jenkins |
|---|---|
LOGIN_PASSWORD_KV |
usernamePassword |
SSH_LOGIN_KEY |
sshUserPrivateKey |
SECRET_TEXT |
string |
SECRET_FILE |
file |
Интеграция с SecMan#
Для интеграции с SecMan необходимо наличие в Jenkins credential типа «Vault App Role Credential» для approle хранилища (создается администраторами хранилища SecMan).
В конфигурационном файле для стенда (configDev.yml, configPsi.yml, configProm.yml и т.п.) в репозитории конфигураций SMDL.Configs нужно заполнить блок параметров для доступа к хранилищу SecMan.
При отсутствии блока параметров в конфигурационном файле необходимо добавить его вручную в секцию general.
Пример блока параметров:
#Настройки для Secret Managment
needVault: true
configurationVault:
vaultUrl: 'https://ift.secrets.domain.ru'
vaultCredentialId: 'Synapse-approle-IFT-all'
engineVersion: '1'
vaultNamespace: 'CI01994970_CI02129749'
pathVaultJEN: 'A/SNPS/JEN/IFT/KV'
pathVaultOSH: 'A/{{segmentName}}/OSH/{{clusterName}}/KV'
needVault — флаг, отвечающий за активность SecMan
vaultUrl — ссылка на экземпляр SecMan
vaultCredentialId — credential в Jenkins для approle
engineVersion — версия системы хранения secret(s)(по умолчанию '1')
vaultNamespace — тенант (КЭ АС_КЭ СТЕНДА) обязательно для заполнения
pathVaultJEN — относительный путь хранения secret(s) (credentials, мигрированные из Jenkins)
pathVaultOSH — относительный путь-шаблон хранения secret(s) (данные файлов secret(s) из репозитория стендозависимых параметров) параметр-константа
{{segmentName}},{{clusterName}}заполняются в runtime значениями из параметра CIXml
Настройки конфигурации для промышленных стендов#
Используемые secret(s) располагаются в хранилище SecMan в разных областях хранения (ветка "AS", ветка "INFRA" ), в зависимости от типа secret(s).
Для доступа к области хранения ветки "AS" необходимо наличие в конфигурационном файле блока параметров configurationVault (пример выше).
Для доступа к области хранения ветки "INFRA" необходимо наличие в конфигурационном файле блока параметров configurationVaultInfra.
При отсутствии блока параметров в конфигурационном файле необходимо добавить его вручную в секцию general.
Пример блока параметров:
needInfra: true
configurationVaultInfra:
vaultUrl: 'https://p.secrets.domain.ru'
vaultCredentialId: 'approle'
engineVersion: '1'
vaultNamespace: 'CI01994970_CI02025191'
pathVaultJEN: 'I/CI03555516/KV'
pathVaultOSH: 'I/{{segmentName}}/OSH/{{clusterName}}/KV'
needInfra — флаг, отвечающий за активность ветки "INFRA"
vaultUrl — ссылка на экземпляр SecMan
vaultCredentialId — credential в Jenkins для approle
engineVersion — версия системы хранения secret(s)(по умолчанию '1')
vaultNamespace — тенант (КЭ АС_КЭ СТЕНДА) обязательно для заполнения
pathVaultJEN — относительный путь хранения secret(s)
pathVaultOSH — относительный путь-шаблон хранения secret(s) (данные файлов secret(s) из репозитория стендозависимых параметров) параметр-константа
{{segmentName}},{{clusterName}}заполняются в runtime значениями из параметра CIXml
Secret(s) для промышленных стендов#
Наименование secret(s) с токеном для промышленных стендов фиксировано и определяется как - jenkins-token.
Наименование ключа в конфигурации(структуре) secret(s) при создании инструментом создания secret(s) варьируемое, по умолчанию
определяется как - token. Для корректной обработки secret(s) и для обратной совместимости рекомендовано указывать в качестве наименования ключа -
secretString. Требование к наименованию ключа не обязательно. Допустимо указывать ключ с любым наименованием.
Структура хранения secret(s) в области хранения KV может состоять как из одного, так и из нескольких подкаталогов.
Настройки конфигурации для промышленных стендов (репозиторий хранения артефактов - NEXUS)#
Для работы с репозиторием хранения артефактов необходимо наличие в конфигурационном файле блока параметров configurationVaultNexus.
При отсутствии блока параметров в конфигурационном файле необходимо добавить его вручную в секцию general.
Пример блока параметров:
needNexus: true
configurationVaultNexus:
vaultUrl: 'https://t.secrets.ru'
vaultCredentialId: 'nexus_user_cred_secret'
engineVersion: '1'
vaultNamespace: 'CI00751652_CI01098402'
pathVaultJEN: 'A/ALPHA/JEN/NEXUS/KV'
pathVaultOSH: ''
needNexus — флаг, отвечающий за активность работы с репозиторием хранения артефактов в среде промышленных стендов
vaultUrl — ссылка на экземпляр SecMan
vaultCredentialId — credential в Jenkins для approle
engineVersion — версия системы хранения secret(s)(по умолчанию '1')
vaultNamespace — тенант (КЭ АС_КЭ СТЕНДА) обязательно для заполнения
pathVaultJEN — относительный путь хранения secret(s)
pathVaultOSH — не используется
Настройка расположения secret(s) в хранилище SecMan#
Secret(s) в области хранения KV могут располагаться как в корне, так и в подкаталогах. Изменить расположение secret(s) по умолчанию возможно указав в параметре subpath необходимую структуру подкаталогов, пустое значение предполагает расположение в корне. Со структурой параметров соответствия типов credentials/secret(s) можно ознакомиться в credentialTypes.json в подразделе «Дополнительные файлы (additionalFiles)» раздела «Дополнительная документация» документа «Руководство прикладного разработчика».
Для частных случаев, когда secret(s) одного типа располагаются в разных подкаталогах в области хранения KV, допустимо использовать персонализированные типы credentials. На текущий момент реализовано применение персонализированного типа "customString" в credentialTypes.json.
Пример реализации в скрипте:
dev.withCustomCreds([[credentialsId: config.sonarQubeToken, variable: 'SONAR_AUTH_TOKEN', credentialsType: 'customString']])
Настройки для обработки secret(s) с персонализированными ключами#
В конфигурации(структуре) большинства secret(s) для каждого типа используются наименования ключей по умолчанию. В случае, если наименование ключа в конфигурации secret(s) отлично от наименования по умолчанию, предусмотрены параметры для переопределения наименования ключа(см. таблицу).
Тип secret(s) |
Наименования ключа по умолчанию |
Параметр для переопределения |
|---|---|---|
SECRET_TEXT |
secretString |
field |
SECRET_FILE |
secretFileName |
field |
LOGIN_PASSWORD_KV |
secretUsername |
namefield |
SSH_LOGIN_KEY |
secretUsername |
sshnamefield |
Для обработки secret(s) с персонализированными ключами необходимо заполнить параметр fields в файле соответствия типов credentials/secret(s) в credentialTypes.json.
Пример:
"vault": {
"type": "LOGIN_PASSWORD_KV",
"subpath": "domen_auth_users",
"fields": {
"namefield": "nexus_user_cred_name",
"passwordfield": "nexus_user_cred_password"
}
}
Особенности взаимодействия с новыми версиями доработанного плагина Jenkins Credentials(v.3.8.8-3.8.XX)#
Начиная с версии 3.8.10 доработанного плагина Jenkins Credentials(v.3.8.10) в структуру secret(s) типа SECRET_FILE
добавились параметры fileNameField, fileContentField и decodeBase64 и значение ключа по умолчанию в Vault
было изменено с secretFileName на fileContent. Обратная совместимость по наимованию ключа в новых версиях плагина есть.
В частности, поддерживаются ключи по умолчанию secretFileName для secret(s) типа SECRET_FILE. Параметр decodeBase64
для secret(s) типа SECRET_FILE отвечает за декодирование идентификационных данных и по-умолчанию активен. Для исключения двойного
декодирования данных со стороны доработанного плагина **Jenkins Credentials(v.3.8.8-3.8.XX) и со стороны механизма интеграции с Secret Managment
необходимо деактивировать этот параметр в файле соответствия типов credentials/secret(s) в credentialTypes.json, заполнив параметр vault.fields в секции file.
Пример:
"file": {
"groupId": 3,
"type": "file",
"authentication": {
"variable": "fileCredential"
},
"vault": {
"type": "SECRET_FILE",
"subpath": "global",
"fields": {
"decodeBase64": false
}
}
},
Особенности сетевого взаимодействия экземпляра(instance) Secret Managment с Jenkins и хостом пользовательского интерфейса#
По стандарту сетевое взаимодействие экземпляра(instance) Secret Managment настроено на один IP-адрес хоста (взаимодействие с Jenkins и WEB UI)
Если в конфигурации сетевого взаимодействия с Jenkins и хостом WEB UI отличается IP-адресация, необходимо в конфигурационном
файле для стенда (configDev.yml, configPsi.yml, configProm.yml и т.п.) в репозитории конфигураций SMDL.Configs определить и заполнить
параметр general.vaultUrlUI, указав IP-адрес WEB UI хоста.
Пример:
vaultUrlUI: 'http://domain.ru:8200'
Подключение библиотек в представлении Jenkins пространства#
Для подключения библиотек в представлении Jenkins пространства необходимо наличие в Jenkins credentials типа «Vault SSH Username with private key Credential» (создается администраторами хранилища SecMan).
Рекомендации#
Для стабильной работы доработанного плагина Jenkins Credentials(v.3.8.8-3.8.XX), необходимо заполнить поля в секции «Vault Plugin» в представлении Jenkins. Поля заполнить значениями параметров из секции configurationVault конфигурационного файла.
Важно!!! поле Vault Namespace обязательно для заполнения.
Проверка работоспособности#
Для проверки работоспособности необходимо настроить интеграцию с SecMan, запустить Jenkins Jobs и проверить, что они
завершаются со статусом "SUCCESS".