Керування зовнішніми клієнтами в системі
1. Базові принципи
-
Зовнішні системи мають можливість інтегруватись з платформою через ШБО Трембіта
-
Керування правами доступу до підсистем тенанта платформи з боку інших зареєстрованих підсистем-учасників обміну виконується на рівні ШБО Трембіти адміністратором тенанту
-
Керування правами доступу до бізнес-процесів та даних окремого тенанта з боку зареєстрованих підсистем-учасників, яким дозволена взаємодія з підсистемами тенанта виконується на рівні регламента реєстру адміністратором регламента
-
Регламент налаштувань зовнішніх підсистем-учасників проходить валідацію в процесі проходження пайплайну публікації змін до регламенту
-
Кожному зовнішньому клієнту (підсистемі-учаснику обміну) надається унікальне ім’я-ідентифікатор при реєстрації в регламенті реєстру для подальшого створення окремої ролі та її використання у визначенні прав доступу на рівні бізнес-процесів та даних реєстру
-
Пароль для сервіс аккаунту генерується автоматично та не задається розробником регламенту при реєстрації нового клієнту
-
Кожен сервіс-аккаунт зовнішнього клієнта має відповідну роль, яка є доступною в access token, назва якої автоматично генерується згідно конвенції external-system-role-<унікальнe ім’я-ідентифікатор зовнішнього клієнта>
-
Усі сервіс аккаунти зовнішніх клієнтів мають роль за замовчуванням trembita_invoker
-
Ідентифікація зовнішнього клієнта виконується використовуючи системні заголовки виклику Трембіти, а саме subsystemCode, memberClass та memberCode
2. Реєстрація в регламенті
2.1. Структура файлів регламенту
trembita:
consumers:
drrp: # name
description: Державний реєстр речових прав на нерухоме майно
subsystemCode: 6_MJU_DRRP_cons
memberClass: GOV
memberCode: 00015622
berdyansk-rtg: # name
description: РТГ Бердянської територіальної громади
subsystemCode: 63_BerdyanskRTG_cons
memberClass: GOV
memberCode: 02140805
2.2. Опис структури елементів
2.2.1. Consumer
Назва |
Схема |
Коментар |
name |
string |
Унікальне ім’я клієнта в системі на базі якого буде створений сервіс аккаунт та роль у реалмі external-system |
description |
string |
Короткий опис зовнішнього клієнта |
subsystemCode |
string |
Системний заголовок виклику з ШБО Трембіта який вказує на Код підсистеми |
memberClass |
string |
Системний заголовок виклику з ШБО Трембіта який вказує на Клас учасника |
memberCode |
string |
Системний заголовок виклику з ШБО Трембіта який вказує на Код учасника |
2.3. Правила валідації при обробці файлу в пайплані публікації
-
Ім’я зовнішнього клієнту (поле external client name) повинно бути унікальним для регламенту реєстру.
-
Системні заголовки з ШБО Трембіта утворюють складений ключ який також повинен бути унікальним.
-
При непроходженні валідації пайплайн публікації повинен закінчитися з помилкою
2.4. Keycloak об’єкти
2.4.1. Ролі
-
Для кожного зовнішнього клієнта в регламенті створюється окрема роль
-
Керування ролями відбуваються шляхом використання KeycloakRealmRoleBatch CR (Keycloak operator)
KeycloakRealmRoleBatch | Значення | Коментар |
---|---|---|
metadata.name |
external-system-roles |
Статичне значення |
spec.realm |
external-system |
Статичне значення |
spec.roles[].name |
external-system-role-<trembita.consumers.name> |
<trembita.consumers.name> - значення з файлу конфігурацій. Використання префіксу потрібно для запобігання можливих колізій при використанні в системі декількох реалмів |
spec.roles[].description |
<trembita.consumers.name.description> |
<trembita.consumers.name.description> - значення з файлу конфігурацій. |
apiVersion: v1.edp.epam.com/v1alpha1
kind: KeycloakRealmRoleBatch
metadata:
name: external-system-roles
spec:
realm: external-system
roles:
- name: external-system-role-drrp
description: 'Державний реєстр речових прав на нерухоме майно'
- name: external-system-role-berdyansk-rtg
description: 'РТГ Бердянської територіальної громади'
2.4.2. Сервіс аккаунт
-
Для кожного зовнішнього клієнта створюється окремий сервіс аккаунт у реалмі external-system
-
Керування сервіс аккаунтами виконується шляхом використання KeycloakClient CR (Keycloak operator)
-
Кожний сервіс аккаунт має відповідний KeycloakClient CR
KeycloakClient | Значення | Коментар |
---|---|---|
metadata.name |
external-system-sa-<trembita.consumers.name> |
<trembita.consumers.name> - значення з файлу конфігурацій. |
spec.clientId |
<trembita.consumers.name> |
<trembita.consumers.name> - значення з файлу конфігурацій. |
spec.serviceAccount.enabled |
true |
Параметр для створення сервіс аккаунта для клієнту Кейклоак |
spec.serviceAccount.realmRoles |
external-system-role-<trembita.consumers.name> |
<trembita.consumers.name> - значення з файлу конфігурацій. Роль trembita-invoker не задається тому що надається за замовчуванням в реалмі external-system |
spec.serviceAccount.attributes.drfo |
0 |
Статичне значення-заглушка |
spec.serviceAccount.attributes.edrpou |
0 |
Статичне значення-заглушка |
spec.serviceAccount.attributes.edrpou |
0 |
Статичне значення-заглушка |
spec.serviceAccount.attributes.fullName |
<trembita.consumers.name.description> |
<trembita.consumers.name.description> - значення з файлу конфігурацій. |
spec.serviceAccount.attributes.subsystemCode |
<trembita.consumers.name.subsystemCode> |
<trembita.consumers.name.subsystemCode> - значення з файлу конфігурацій. |
spec.serviceAccount.attributes.memberClass |
<trembita.consumers.name.memberClass> |
<trembita.consumers.name.memberClass> - значення з файлу конфігурацій. |
spec.serviceAccount.attributes.memberCode |
<trembita.consumers.name.memberCode> |
<trembita.consumers.name.memberCode> - значення з файлу конфігурацій. |
spec.serviceAccount.targetRealm |
<trembita.consumers.name.memberCode> |
<trembita.consumers.name.memberCode> - значення з файлу конфігурацій. |
apiVersion: v1.edp.epam.com/v1alpha1
kind: KeycloakClient
metadata:
name: external-system-sa-drrp
spec:
clientId: drrp
serviceAccount:
enabled: true
realmRoles:
- external-system-role-drrp
attributes:
drfo: '0' # Значення заглушки
edrpou: '0' # Значення заглушки
fullName: 'Державний реєстр речових прав на нерухоме майно'
subsystemCode: 6_MJU_DRRP_cons
memberClass: GOV
memberCode: 00015622
targetRealm: mdtu-ddm-edp-cicd-lowcode-dev-dev-external-system
---
apiVersion: v1.edp.epam.com/v1alpha1
kind: KeycloakClient
metadata:
name: external-system-sa-berdyansk-rtg
spec:
clientId: berdyansk-rtg
serviceAccount:
enabled: true
realmRoles:
- external-system-role-berdyansk-rtg
attributes:
drfo: '0' # Значення заглушки
edrpou: '0' # Значення заглушки
fullName: 'РТГ Бердянської територіальної громади'
subsystemCode: 63_BerdyanskRTG_cons
memberClass: GOV
memberCode: 02140805
targetRealm: mdtu-ddm-edp-cicd-lowcode-dev-dev-external-system
2.4.3. Автентифікація
-
Отримання токену сервіс аккаунта проходить з використанням Grant Type client_credentials
-
Client Secret для автентифікації генерується в процесі створення Keycloak Client
-
Значення для Client Secret зберігається в OpenShift Secret
-
Посилання на OpenShift Secret зберігається в полі status.clientSecretName відповідного KeycloakCLient CR
{
"realm_access": {
"roles": [
"external-system-role-drrp",
"trembita-invoker"
]
},
"clientId": "drrp",
"edrpou": "0",
"drfo": "0",
"fullName": "Державний реєстр речових прав на нерухоме майно",
"subsystemCode": "6_MJU_DRRP_cons",
"memberClass": "GOV",
"memberCode": "00015622",
"preferred_username": "service-account-drrp"
}
3. Розгортання тенанту реєстру
В процесі розгортання тенанту реєстру виконуються наступні налаштування для зовнішніх клієнтів:
-
Розгортання окремого реалму для зовнішніх клієнтів external-system
-
Створення ролі trembita_invoker у реалмі external-system та встановлення ії як дефолтної для користувачів реалму. Ця роль використовується для можливості налаштування єдиних авторизаційних правил для всіх зовнішніх клієнтів
-
Створення Client Scope external-system-attributes з переліком Mappers що надані нижче. Використання Client Scope для групування мапперів надає можливість перевикористати налаштування для додавання атрибутів в access token клієнту
-
Атрибути, що не мають реальних значень, але повинні бути присутні для можливості аудиту фабрики даних:
-
edrpou
-
drfo
-
-
Системні заголовки викликів з Трембіта
-
subsystemCode
-
memberClass
-
memberCode
-
-
Короткий опис зовнішнього клієнта з файла конфігурацій:
-
fullName
-
-
-
Визначення Client Scope external-system-attributes як дефолтного. Усі зовнішні клієнти, що будуть згодом створені будуть мати набір маперів з попереднього пункту
4. Визначення сервіс аккаунту в системі
При зовнішньому виклику в системі відбувається автентифікація завнішнього користувача. Флоу визначення та отримання токену приведений на діаграмі: