Автоматизация процесса запроса, создания и раздачи доступа к сетевой папке сотрудника через IDM Midpoint23.10.2024 10:01
Типовая задача: сотруднику нужна сетевая папка на Windows сервере. Чтобы её создать нужен Админ, чтобы раздать к ней права нужен Админ — убираем Админа из этой задачи при помощи IDM Midpoint.
Упрощённая схема, чтобы понять что происходит
1. Сотрудник в Midpoint запросил роль Create Shared Folder и получил её сразу, или через согласование с кем-нибудь (там же, в Midpoint).
2. Роль создаёт в промежуточном ресурсе запись для этого пользователя через обычный Scheme Handler в CSV файле. Факт создания этой записи запускает Additional Connector который позволяет запустить Powershell скрипт на сервере. Additional Connector реагирует на события создание, удаление, изменение в конкретном Scheme Handler.
3. Скрипт Powershell создаёт сетевую папку, AD группы с правами чтения, редактирования. Добавляет пользователя в группу редактирования (уже может пользоваться).
4. При очередной синхронизации AD ресурса в Midpoint создаются роли для AD group, созданных скриптом. На их выдачу назначается Approver сотрудник запросившей сетевую папку, это делает роль-политика Policy: Add Approver.
5. User B в своём кабинете Midpoint видит новые роли по сетевой папке User A и может их запросить. User A так же в своём кабинете одобряет или отвергает выдачу доступов к своей сетевой папке!
Приступаем к настройке исходные данные:
— Midpoint 4.8.4 полностью настроена интеграция с Windows Server
— Windows Server 2019, LDAPS, Open-SSH (из компонентов)
1. Создаём ресурс CSV Shared Folder
Нам нужен ресурс для запуска скрипта. Им может быть CSV или DB. Для простоты и наглядности берём CSV. Midpoint в нём будет вести состояние — должна быть у пользователя сетевая папка или нет. При выдаче роли создаётся учётка в CSV-ресурсе, что запускает скрипт на создание сетевой папки, при отъёме роли удаляется учётка в CSV-ресурсе, что запускается скрипт на удаление сетевой папки.
На сервере Midpoint в папке
/opt/midpoint
создаем пустой файл
shared_folder.csv
в нем одна строка
hr_id;date_create;info_1;info_2;info_3;info_4
В админке Midpoint создаём ресурс CSV в Resources\New Resource\From Scratch выбираем CsvConnector
Далее все как на картинках, название CSV Shared Folder
Дальше по-умолчанию всё ок
Заходим в ресурс CSV Shared Folder, нажимаем Edit Raw
и добавляем перед
следующий code
accountAccount SCV Shared FolderAccount SCV Shared Foldertrueri:AccountObjectClassc:UserTyperi:hr_id01 HR ID to hr_idstrong$focus/personalNumberjust for correlationstrongpersonalNumberri:info_102 FullName to info_1strong$focus/fullNameri:date_create03 Date to date_createweak$focus/personalNumberCorr HR ID personalNumberc:personalNumberunlinkeddeleted
Этот Scheme Handler берёт из Midpoint у сотрудника personalNumber и вставляет в CSV файл в hr_id. Дату создания в date_create и fullName в info_1. Еще остаются две колонки пустые, на всякий случай.
Теперь настраиваем Additional Connector
Скачиваем со страницы SSH Connector jar файлhttps://docs.evolveum.com/connectors/connectors/com.evolveum.polygon.connector.ssh.SshConnector/
Кладём его в папку
/opt/midpoint/var/connid-connectors
И перезагружаем Midpoint
Смотрим в Repository Objects появился ли ConnId com.evolveum.polygon.connector.ssh.SshConnector v1.0
тут же берем его OID
388af43f-fae8-4734-8f17-c549352d5939
Заходим в ресурс CSV Shared Folder, нажимаем Edit Raw
Как формируется имя тоже задано в начале скрипта .
У пользователей в AD должен быть заполнен employeeNumber соответсовать personalNumber в Midpoint по ниму в скрипте идет поиск и добавление в группу для редактирования
В ADMINISTRATION\Role\All Roles создаём просто роль (чёрную) под названием Create Shared Folder
Заходим в неё, нажимаем Edit Raw
Вставляем перед
следующий code
accountAccount SCV Shared Folder
— OID ресурса CSV Shared Folder, у вас будет свой
Проверяем как работает. Берём пользователя User A, у него уже есть учётка в ресурсе AD. Выдаём ему роль Create Shared Folder.
Смотрим сразу в файле
/opt/midpoint/shared_folder.csv
появилась запись
87328348;10/10/2024 09:35:39;Егеров Егеров Ким;;;
Смотрим в AD
Все создалось!
2. Создаём в Midpoint группы по сетевой папке из ресурса AD
AD группы редактирование и чтение под сетевую папку пользователя создались в AD. Но в Midpoint их пока нет, хотя бы потому что мы не запускали синхронизацию групп AD в роли Midpoint и обычная синхронизация нас не устроит — этим группам ролям при создании в Midpoint нужно назначать одобрителя на выдачу.
Поэтому в Schem Handler«e для прочих групп AD настраиваем фильтр. В Resources\Your AD resource\Scheme Handler\Yout AD group ALL\Basic Attributes на второй странице в Filter пишем
attributes/cn not startsWith 'Shared_Folder_'
Этот Scheme Handler будет обрабатывать только AD группы сn которых не начинается на Shared_Folder_…
Создаём Scheme Handler под сетевые папки, я назову его Groups Shared Folder POC
В Resources\Your AD resource\Scheme Handler\Add object type запоняем как на картинках
Заходим в созданный Schema Handler и редактируем дальше в квадратиках
Groups Shared Folder POC\Mappings
02 — Здесь script
return true
05 — Здесь script («Win-ikpur723q06» hostname Windows сервера)
"Rights for user HRID:" + input + " shared folder path \\\\Win-ikpur723q06\\sf_" + input
06 — Пишем в атрибут Documentation табельный номер который в AD группе писали в Description
03–04 — здесь конструкция для назначения роли по OID, её можно только в код вставить, делайте сначала пустой, а потом заполняете.
03 add POLICY add approver from role atributeactivestrongc:RoleTypea0f4de80-c941-43bd-9216-966bc3a62d3e$focus/assignment
Роль в маппинге 03, которая будет назначать одобрителя ещё не создана. А роль в мапинге 04 копирует роль для обычных групп AD, только со своими именами.
Groups Shared Folder POC\Synchronization
Groups Shared Folder POC\Correlation
По настройкам Scheme Handler почти всё, нам надо создать роль, которая будет добавлять одобрителя в роли сетевых папок и её OID написать в маппинг 03
Полностью кодом Scheme Handler Groups Shared Folder POC
entitlementintent Groups Shared Folder POCGroups Shared Folder POCri:groupattributes/cn startsWith 'Shared_Folder_'c:RoleTyperi:cn01 name is namestrongname02 set requestable markstrongrequestable03 add POLICY add approver from role atributeactivestrongc:RoleTypea0f4de80-c941-43bd-9216-966bc3a62d3e$focus/assignment04 add ADD AD group SHARED FOLDERactivestrongc:RoleType99cefb8d-2aa8-4015-b427-b9fde2fe50a9$focus/assignmentri:objectGUIDri:description05 some human readable textstrongdescription06 user HR id for approver setstrongdocumentationri:dn07 dn for identifierstrongidentifierc:identifierunlinkedlinkedunmatched
Добавить одобрителя через маппинг не удаётся известными способами. Поэтому создаём роль с политикой, запускающей скрипт, который всё может. Эту роль политику и назначаем каждой роли-группе AD, созданной в Scheme Handler Groups Shared Folder POC.
В ADMINISTRATION\Role\All Roles создаём просто роль (чёрную) под названием POLICY add approver from role atribute
При изменении в роли атрибута documentation (это включает и его первое заполнение) будет запускаться скрипт, который назначает одобрителем этой роли того, чей табельный номер (HRID) указан в роли в атрибуте documentation.
Берём OID роли POLICY add approver from role atribute и вставляем его в Groups Shared Folder POC в маппинге 03
Теперь в AD ресурсе можно запускать синхронизацию Scheme Handler«а Groups Shared Folder POC
Начинают появляться роли-AD группы
Name как cn в AD (надо быть уверенным, что он будет уникальным для Midpoint также как и для AD). Description заполнен по скрипту. И Requestable проставлен True.
Пользователь с табельным номером 87328348 одобритель роли Shared_Folder_EDIT_87328348.
3. Запрашиваем права к сетевой папке
У нас в Midpoint два пользователя с ролями
User A
— End User
— Approver
— AD account
— Create Shared Folder
— Shared_Folder_EDIT_87328348
— Shared_Folder_EDIT_87328348
— Shared_Folder_READ_87328348
User B
— End User
— AD account
End User — стандартная роль Midpoint, нам от неё нужно то, что она позволяет заходить на GUI Midpoint и запрашивать роли, помеченные Requestable как True
Approver — стандартная роль Midpoint, позволяет одобрять запросы на добавление в роль
Shared_Folder_EDIT_87328348 — в пользователе будет видна как две отдельные роли, в списке видимые как одинаковые. Одна придёт как выданная с синхронизацией AD, а вторая будет помечена как функционал approver.
Заходим под User B в Midpoint, идём в Request Access и запрашиваем роль Shared_Folder_READ_87328348.
Теперь заходим в Midpoint под User A видим пришёл запрос, одобряем его
Заходим ещё раз в Midpoint пользователем User B, на главной странице видим в My accesses что появилась запрошенная роль, и сам запрос в My request тоже видно, что одобрен.
Теперь заходим под пользователем User B на Windows ПК, если зашли раньше то выходим и заходим по новой, и видим что читать можем, а редактировать нет!