Хранилище паролей
Основные объекты
Общие модули
Внешние соединения
Имя: Д_ПСВ_ХранениеПаролей
Тут сосредоточено 90% функционала, получение секретов, обновление серкетов из HCV, генерация токенов, всевозможное взаимодействоия итп.
Роли
Основная роль
Имя: Д_ПСВ_ОсновнаяРоль
Дает право на чтение секретов.
Администрирование
Имя: Д_ПСВ_Администрирование В интерфейсе появляется подсистема, дает право на все настройки и установку секретов.
Чтение ключа
Имя: Д_ПСВ_ЧтениеКлюча
Служебная, используется при работе через базу-посредний, дает право на чтение JWT ключа через HTTP сервис.
Установка секретов
Имя: Д_ПСВ_УстановкаСекретов
Служебная, используется при работе через базу-посредний, дает обновить секреты в текущей базе через HTTP сервис.
Регламентные задания
Получение секретов
Имя: Д_ПСВ_ПолучениеСекретов
Получает секреты из HCV и записывает в безопасное хранилище.
Обновляются только те, что с галочкой ХранениеПароляВоВнешнейСистеме
Получение секретов
Имя: Д_ПСВ_ОбновитьАрендуТокена
Обновляет токен доступа в HCV.
Справочники
Внешние соединения
Имя: Д_ПСВ_ВнешниеСоединения
Тут находятся данные для подключения: логины, адрес сервера итп, так же эти объекты являются владельцами секретов в безопасном хранилище.
Настройки соединения КХП
Имя: Д_ПСВ_НастройкиСоединенияКХП
Тут лежат настройки подключения и протокола взаимодействия с HashiCorp Vault.
Регистры сведений
Дополнительные настройки
Имя: Д_ПВС_ДополнительныеНастройки
Служит для хранения доп настроек :)
Безопасное хранилище
Имя: БезопасноеХранилищеДанных
Заимствован только для назначения прав на чтение секретов.
Встраивание
Подключаем расширение
- Выбрать картинку для подсистемы Д_ПСВ_ХранениеПаролей
- Проверить заимствование регистра сведений БезопасноеХранилищеДанных
Настройка прав
Если доступ к секретам нужен только служебным пользователям которым назначены полные права - дополнительная настройка не требуется.
Общий случай
Выдать всем пользователям роль Д_ПСВ_ОсновнаяРоль, для этого ее нужно добавить в какой-то профиль назначенный всем пользователям.
Эта роль в основном дает право только на чтение объектов, так что назначение его всем пользователям не несет угрозы, посто это может занимать длительное время.
Заполнение настроек
Я для заполнения использую обработку ВстраиваниеХранениеПаролей.epf
Константа
Д_ПСВ_ИмяБазы - имя базы в продакшене.
ERP_USO2
Параметры подключения к HashiCorp Vault
Пока опустим это, т.к. хранилище запаковано и там ничего не показать, могу только на копии.
Дополнительные настройки
Не обязательно, нужно только при использовании произвольных сервисов.
Заполнение регистра сведений Д_ПВС_ДополнительныеНастройки
Настройки соединений
Заполнение справочника Д_ПСВ_ВнешниеСоединения
Вызовы
При любом из двух вариантв в ответ мы получиv Неопределено или структуру с четыремя полями:
- ИмяБазы
- Логин
- Секрет
- АдресСервера
Стандартный сервис
ИмяПубликации = "BSO";
ЛогинПубликации = "";
ПарольПубликации = "";
СерверПубликации = "ba.dogma.ru";
Сервис = Перечисления.Д_ПСВ_Сервисы.БСО;
ПараметрыСоединения = Д_ПСВ_ХранениеПаролей.ПолучитьПараметрыСоединения(Сервис);
Если Не ПараметрыСоединения = Неопределено Тогда
ИмяПубликации = ПараметрыСоединения.ИмяБазы;
ЛогинПубликации = ПараметрыСоединения.Логин;
ПарольПубликации = ПараметрыСоединения.Секрет;
СерверПубликации = ПараметрыСоединения.АдресСервера;
КонецЕсли;
Нужно указать лишь сервис от которого требуются креды.
Произвольный сервис
АдресСервера= "";
Логин = "";
Секрет = "";
ИмяБазы = "";
Если Д_ПСВ_ХранениеПаролей.УстановитьТестовыйКонтур() Тогда
Д_ВнешнееСоединение = РегистрыСведений.Д_ПВС_ДополнительныеНастройки.Сервис_dimeco_ТК();
Иначе
Д_ВнешнееСоединение = РегистрыСведений.Д_ПВС_ДополнительныеНастройки.Сервис_dimeco();
КонецЕсли;
ПараметрыСоединения = Д_ПСВ_ХранениеПаролей.ПолучитьПараметрыПроизвольногоСервиса(Д_ВнешнееСоединение);
Если Не ПараметрыСоединения = Неопределено Тогда
АдресСервера = ПараметрыСоединения.АдресСервера;
Логин = ПараметрыСоединения.Логин;
Секрет = ПараметрыСоединения.Секрет;
ИмяБазы = ПараметрыСоединения.ИмяБазы;
КонецЕсли;
Тут требуется предварительно создать описание сервиса в регистре Дополнительные настройки, в этом примере:
- Сервис_dimeco_ТК()
- Сервис_dimeco()
Дополнительные материалы
Создание доп настройки
Весь функционал находится в модуле менеджера.
Функция СписокНастроек
Здесь содержится перечень описаний всех доп. настроек
Описание настройки
// ПарольНовогоПользователяИзДО
ОписаниеТипа = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки("20"));
Настройка = ОписаниеНастройки(
"ПарольНовогоПользователяИзДО",
ОписаниеТипа,
"Пароль123",
"Пароль нового пользователя создаваемого из ДО.",
"Тут очень важный комментарий",
Группа_Общее(),
Истина);
Результат.Добавить(Настройка);
Параметры:
- Имя настройки - должно быть уникальным, кратко отражает смысл настройки.
- Описание типа - возможны простые типы и любая ссылка.
- Значение по умолчанию - допустимо вызывать другие функции.
- Представление - имя настройки, которое будет видеть пользователь.
- Комментарий - любые пояснения к настройке.
- Группа - группа в которой будет отображаться настройка в форме списка.
- Чуствительные данные - признак того, что полю нужно выставить признак Пароль (звездочки вместо данных), так же значение будет скрыто на форме списка.
Получение значения настройки
Добавить экспортную функцию аналогичную названию настройки в область ПолучениеЗначенийНастроек пример:
Функция ПарольНовогоПользователяИзДО() Экспорт
Возврат ПолучитьЗначениеНастройки("ПарольНовогоПользователяИзДО");
КонецФункции
Встраивание хранение паролей
Весь код расположен в модуле формы, нас интересует две функции:
- ПриСозданииНаСервере
- ДанныеВнешнихСоединений
При создании на сервере
Указать ИмяБазыБудетУстановлено
Данные внешних соединений
Заполнить креды соединений
Hashi Corp Vault
Создание хранилище
Для всех баз 1с используем одно хранилище: storage_1c, тип key-value
Создание секрета
Для каждой базый добавляем два пути к секретам:
- Тестовый контур (test)
- Продакшн контур (prod)
Сопоставление секретов HCV и 1С
Для каждой записи справоника внешних соединений в HCV должно быть две записи:
- Логин
- Пароль Обе записи формируются по обному правилу:
Префикс + "_" + Логин
Префикс + "_" + Пароль
Стандартный сервис
Сопоставление выполняется по имени перечисления
ЛКСБ_Логин
Произвольный сервис
Сопоставление выполняется по префиксу HCV
DEMICON_Логин
Пример (база ЕРП, сервис БСО)
В HCV должно быть под две записи для каждого контура:
Продакшн контур
Путь:
/storage_1c/ERP_USO2/prod
БСО_Логин: obmen
БСО_Пароль: StrongPassword
Тестовый контур
Путь:
/storage_1c/ERP_USO2/test
БСО_Логин: user123
БСО_Пароль: password
PS. Если поменяется имя БД - ничего страшного, путь фиксирован в настройках подключения к HCV.