Механізм імпорту користувачів до Keycloak
| 🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. | 
Платформа дозволяє імпортувати велику кількість користувачів-надавачів послуг до реєстру за раз із CSV-файлу.
 
- 
Адміністратор Доступу з допомогою вебінтерфейсу порталу адміністратора завантажує CSV файл що містить перелік користувачів для імпорту в реєстр. 
- 
Адміністративний портал проводить первинну валідацію файлу, що завантажується: розмір, формат, кодування. У разі валідаційної помилки, користувач бачить повідомлення з деталями помилки на сторінці завантаження файлу. Процес імпорту користувачів зупиняється. 
- 
У разі успішно проходження первинної валідації 
- 
Зашифрований файл зберігається в об’єктне сховище реєстру (Ceph) 
- 
Адміністративний портал запускає процес імпорту користувачів в KeyCloak ("Import Users" Kubernetes job). 
- 
Процес з допомогою сервісного акаунта Kubernetes отримує облікові дані для доступу до об’єктного сховища Ceph та вичитує звідти зашифрований CSV файл. При цьому в Ceph файл переміщається до архіву. 
- 
Процес дешифрує файл з допомогою Vault та отримує дані користувачів для імпорту. 
- 
Процес починає обробку даних у файлі та створює користувачів в KeyCloak використовуючи адміністративне REST API (partial Import API). Створення користувачів відбувається групами по m записів. Значення m задається в налаштуваннях процесу. Користувачу встановлюються усі атрибути з файлу та присвоюються відповідні ролі. Значення поля username генерується автоматично та містить SHA-256 геш-суму стрічки, утвореної внаслідок конкатенації 3-х ключових атрибутів користувача: fullName, edrpou, drfo. При цьому порядок атрибутів має значення - 
Технічний лог процесу записується в сховище технічних логів Kibana. 
- 
Аудит лог процесу — яких саме користувачів створено та ким — записується у відповідний Kafka topic звідки він потрапляє у БД аудиту. 
 
- 
- 
Адміністратор доступу має змогу переглянути результат виконання процесу імпорту та можливі помилки в технічних логах з допомогою вебінтерфейсу сервіса Kibana. В разі наявності помилок, їх причину необхідно усунути та повторити процес імпорту. 
- 
Після завершення процесу імпорту, у випадку якщо було створено хоча б одиного користувача, CSV файл з якого проводився імпорт переміщається в архів де зберігається з метою аудиту та більше не обробляється. 
- 
Також в разі необхідності Адміністратор безпеки має можливість переглянути аудит лог процесу де зафіксовано інформацію про користувачів що були створені (ідентифікатор користувача, час створення, ідентифікатор вхідного CSV файлу та його геш-сума) та завантажити CSV файл з якого було імпортовано користувача. 
1. Аудит
Уся інформація стосовно створених в процесі імпорту користувачів повинна потрапляти в аудит платформи де Адміністратор безпеки матиме можливість її переглядати.
Щоб додати інформацію про подію в аудит, необхідно сформувати повідомлення згідно зі схемою та записати його в audit-events topic Kafka.
Структура повідомлення:
| Назва параметру | Значення параметру | 
|---|---|
| requestId | Ідентифікатор запиту з MDC | 
| name | "USER_CREATE" | 
| applicationName | "Keycloak" | 
| sourceSystem | - | 
| sourceApplication | Назва джоби по імпорту користувачів (pod_name) | 
| sourceBusinessProcess | - | 
| sourceBusinessProcessDefinitionId | - | 
| sourceBusinessProcessInstanceId | - | 
| sourceBusinessActivity | - | 
| type | "SYSTEM_EVENT" | 
| timestamp | Мітка часу | 
| userName | ПІБ користувача який запустив процес імпорту | 
| userKeycloakId | Keycloak ідентифікатор користувача який запустив процес імпорту | 
| userDrfo | ДРФО код користувача який запустив процес імпорту | 
| context | JSON що містить дельтану інформацію про новоствореного користувача | 
| Значення в лапках є однаковими для всіх подій даного типу та встановлються як значення відповідних атрибутів без змін. "-" відповідає порожньому значенню | 
| Назва параметру | Значення параметру | 
|---|---|
| userId Keycloak | ідентифікатор створеного користувача | 
| username | username створеного користувача | 
| enabled | true/false | 
| realmId | Keycloak ідентифікатор реалму в якому був створений користувач | 
| realmName | Ім’я реалму в якому був створений користувач | 
| clientId | Значення "Client ID" атрибуту реалма від імені якого був створений користувач | 
| keycloakClientId | Keycloak ідентифікатор клієнта від імені якого був створений користувач | 
| roles | Ролі створеного користувача | 
| sourceFileId | Ідентифікатор CSV файлу у Ceph бакеті | 
| sourceFileName | Оригінальне ім’я CSV файлу, з якого проводився імпорт користувачів | 
| sourceFileSHA256Checksum | Чек сума завантаженого користувачем CSV файлу (незашиврованого) | 
{
   "userId":"946693c7-181f-41c3-88e8-fcca20962b6a",
   "username":"anna.perez",
   "enabled":true,
   "realmId":"de972f63-9a2a-47b4-bb18-aa84dd7423fa",
   "realmName":"dev-officer-portal",
   "clientId":"import-users-job",
   "keycloakClientId":"8f123b53-6745-4162-a19e-85659bbc76c6",
   "roles":[
      "officer",
      "head-officer"
   ],
   "sourceFileId":"9a07c7cd-a1cd-4fdf-8d93-fab6a0988369",
   "sourceFileName":"users.csv",
   "sourceFileSHA256Checksum":"a3d08b7833480e561f99cd1180e76fea13baedd59d726eacf2af30643678e968"
}| Загальну інформацію про структуру аудиту можна переглянути в розділі "Платформа/Технічна документація/Підсистеми/Фабрика даних/Аудит подій" |