Механізм імпорту користувачів в KeyCloak
Для імпорту великої кількості користувачів-чиновників в реєстр, платформою передбачено функціонал що дозволяє імпортувати користувачів на пряму в KeyCloak з CSV файла.
-
Адміністратор Доступу з допомогою веб-інтерфейсу порталу адміністратора завантажує CSV файл що містить перелік користувачів для імпорту в реєстр.
-
Адміністративний портал проводить первинну валідацію файла що завантажується: розмір, формат, кодування. В разі валідаційної помилки користувач бачить повідомлення з деталями помилки на сторінці завантаження файлу. Процес імпорту користувачів зупиняється.
-
В разі успішно проходження первинної валідації,
-
Зашифрований файл зберігається в об’єктне сховище реєстру (Ceph)
-
Адміністративний портал запускає процес імпорту користувачів в KeyCloak ("Import Users" Kubernetes job).
-
Процес з допомогою сервісного екаунта Kubernaetes отримує облікові дані для доступу до об’єктного сховища 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 файл з якого було імпортовано користувача.
Аудит
Уся інформація стосовно створених в процесі імпорту користувачів повинна потрапляти в аудит платформи де Адміністратор безпеки матиме можливість її переглядати.
Для того щоб додати інформацію про подію в аудит необхідно сформувати повідомлення згідно схеми та записати його в audit-events топік 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 що містить дельтану інформацію про новоствореного користувача |
Значення в лапках є однаковими для всіх подій даного типу та встановлються як значення відповідних атрибутів без змін. "-" відповідає порожньому значенню |
Структура поля context:
Назва параметру | Значення параметру |
---|---|
userId Keycloak |
ідентифікатор створеного користувача |
username |
username створеного користувача |
enabled |
true/false |
realmId |
Keycloak ідентифікатор реалму в якому був створений користувач |
realmName |
Ім’я реалму в якому був створений користувач |
clientId |
Значення "Client ID" атрибуту реалма від імені якого був створений користувач |
keycloakClientId |
Keycloak ідентифікатор клієнта від імені якого був створений користувач |
roles |
Ролі створеного користувача |
sourceFileId |
Ідентифікатор CSV файлу у Ceph бакеті |
sourceFileName |
Оригінальне ім’я CSV файлу, з якого проводився імпорт користувачів |
sourceFileSHA256Checksum |
Чек сума завантаженого користувачем CSV файлу (незашиврованого) |
Приклад значення поля context
{
"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"
}
Загальну інформацію про структуру аудиту можна переглянути в розділі "Платформа/Технічна документація/Підсистеми/Фабрика даних/Аудит подій" |