GH GambleHub

Рольовий рушій

1) Моделі авторизації

RBAC (Role-Based Access Control): суб'єкт отримує ролі, ролі пов'язані з правами (permissions). Просто управляти, добре для типових обов'язків.
ABAC (Attribute-Based Access Control): рішення залежить від атрибутів суб'єкта, ресурсу, дії та оточення (час, IP, регіон, ризик). Гнучко і масштабується на складні правила.
Гібрид RBAC + ABAC: ролі дають «базову» здатність, атрибути звужують її (conditions).
(Опціонально) ReBAC/Relationship-based: граф відносин (власник, член команди, делегат), корисно для документ- і орг-структур.

2) Архітектура: PDP/PEP і потоки

PEP (Policy Enforcement Point): місце застосування рішення (API-шлюз, бекенд-метод, SQL-прошарок, UI).
PDP (Policy Decision Point): сервіс/бібліотека, що обчислює'ALLOW/DENY'по політиках і атрибутах.
PIP (Policy Information Point): джерела атрибутів (IdP/профіль, метадані ресурсу, ризик-скор, гео).
PAP (Policy Administration Point): адміністративний інтерфейс/репозиторій політик (версії, чернетки, публікація).

Потік: запит → PEP формує контекст → PDP підтягує відсутні атрибути (через PIP) → обчислює рішення → PEP застосовує (дозволити/заборонити/відрізати поля) → аудит.

3) Модель даних

Сутності (мінімум):
  • 'subject'( user/service) з атрибутами: `tenant_id`, `roles`, `departments`, `risk_level`, `mfa_verified`, `scopes`, `claims`.
  • 'resource'з типом і атрибутами: `type`, `owner_id`, `tenant_id`, `classification` (public/confidential), `region`, `tags`.
  • `action`: `read`, `write`, `delete`, `export`, `approve`, `impersonate` и т. п.
  • `environment`: 'time','ip','device','geo','auth _ strength','business _ context'( канал, тариф).
RBAC-частина:
  • «roles (id, tenant_id, name, inherits [])» - підтримайте ієрархії та шаблони.
  • `permissions(id, resource_type, action, constraint?)`.
  • `role_permissions(role_id, permission_id)`.
  • `assignments(subject_id, role_id, scope)` — scope: глобальний/по проекту/по об'єкту.
ABAC-частина (політики):
  • `policy(id, effect=allow|deny, target: {subject, resource, action}, condition: expr, priority, version, status)`.

4) Принципи прийняття рішень

Deny-overrides: явні заборони пріоритетніші за дозволи.
Least Privilege (PoLP): видавайте мінімально необхідний доступ, розширюйте через умови.
Separation of Duties (SoD): заборона комбінацій ролей/дій (наприклад, «створив платіж» ≠ «апрувнув»).
Context-aware: підсилюйте вимоги при підвищеному ризику (немає MFA, підозрілий IP).
Determinism: однаковий контекст → однакова відповідь; фіксуйте версію політики в журналі.

5) Патерни реалізації

5. 1 Гібрид RBAC→ABAC (кондиціонування)

Ролі дають «право за замовчуванням», ABAC-умови обмежують:
yaml
Declarative Policy Example
- id: doc_read_own effect: allow target: { action: read, resource. type: document, subject. roles: ["editor","owner"] }
condition: resource. owner_id == subject. id

- id: doc_read_team effect: allow target: { action: read, resource. type: document, subject. roles: ["editor","viewer"] }
condition: subject. team_id in resource. shared_team_ids

- id: doc_read_confidential_external effect: deny target: { action: read, resource. type: document }
condition: resource. classification == "confidential" and subject. tenant_id!= resource. tenant_id priority: 100 # deny high priority

5. 2 Row/Field-Level Security

На рівні БД: політики RLS (по'tenant _ id','owner _ id').
На рівні API: фільтруйте збірки та маскуйте поля, якщо немає'allow: read_sensitive_fields`.

5. 3 Рішення «step-up»

Залежність від сили автентифікації:

allow if action == "export" and subject. mfa_verified == true else deny

5. 4 Тимчасові допуски

Гранти з TTL: `assignment. expires_at', «вікна» доступу (в робочий час регіону ресурсу).

6) Продуктивність і кешування

Кеш рішень (decision cache) по ключу'( subject_hash, resource_key, action, policy_version)'з коротким TTL.
Edge-кеш атрибутів суб'єкта (claims в токені) + lazy-fetch атрибутів ресурсу.
Incremental invalidation: інвалідація за подіями (зміна ролей, зміна політики, переведення ресурсу в «confidential»).
Batch-перевірки: для списків - оцінюйте «фільтром» (policy-predicate pushdown), щоб не смикати PDP построчно.

7) Багатоарендність (Multi-tenant)

У кожній таблиці -'tenant _ id'; політики за замовчуванням обмежують доступ всередині оренди.
Адміністратори оренди керують тільки ролями/правами своєї оренди.
Крос-орендний доступ - виключно через явні запрошення/шерінг з явним deny-override.

8) Адміністрування та життєвий цикл політик

Версіонування: `policy. version'у відповіді PDP, зберігайте в аудиті.
Середовища: draft → canary (частини трафіку/тіньовий режим) → prod.
Test matrix: таблиці істинності за ключовими ролями/атрибутами (контрактні тести).
Change management: мерж-реквести на політики з рецензуванням безпеки/комплаєнсу.

9) Аудит і спостережуваність

Журнал рішень: `decision_id`, `subject`, `action`, `resource_ref`, `result`, `matched_policies`, `policy_version`, `attributes_digest`.
Метрики: QPS PDP, латентність p95, hit-rate кеша, частка deny, частота step-up, інциденти SoD.
Трасування: span на виклик PDP; кореляція із запитом API.
Реплей: можливість «переграти» історичні рішення на новій версії політики (safety check).

10) Інтеграція з автентифікацією та токенами

Ідентичність - з IdP (OIDC/SAML). Токени несуть мінімум атрибутів: `sub`, `tenant`, `roles`, `auth_time`, `amr`, `scopes`.
Для ABAC підтягуйте «важкі» ознаки з серверного боку (PIP), щоб не надувати токен.
Підписані resource tokens (capability/запрошення) - для строго обмежених делегувань.

11) Псевдокод PDP (спрощено)

python def decide(subject, resource, action, env, policies):
matched = []
effect = "deny"
Explicit DENYs with priority for p in sorted (policies, key = lambda x: x.priority, reverse = True):
if target_matches(p. target, subject, resource, action):
if eval_condition(p. condition, subject, resource, env):
matched. append(p. id)
if p. effect == "deny":
return Decision("deny", matched, p. version)
Looking for ALLOW for p in policies:
if target_matches(p. target, subject, resource, action):
if eval_condition(p. condition, subject, resource, env):
matched. append(p. id)
effect = "allow"
break return Decision(effect, matched, max_version(matched, policies))

12) Анти-патерни

«Роль = сторінка» (сотні дрібних ролей без моделі предметної області).
Зберігання політик тільки в коді без версій/аудиту.
Відсутність deny-override і SoD → підвищення ризику шахрайства.
Жорсткі списки'user _ id'в правилах (замість атрибутів/відносин).
Відсутність фільтрації на рівні даних (RLS) при наявності фільтра тільки в UI.
Синхронізація ролей через ручні скрипти без подій та інвалідації кешів.

13) Кейси та рецепти

13. 1 Поле-рівневе маскування:


allow read invoice when subject. roles includes "support"
mask fields ["card_last4", "billing_email"] unless subject. role == "finance"

13. 2 Експорт даних тільки з MFA:


allow export if subject. mfa_verified and env. ip in cidr("203. 0. 113. 0/24")

13. 3 SoD:


deny approve_payment if subject. performed_actions includes ("create_payment" within last 24h)

13. 4 Делегування (обмежений токен):

Capability-токен містить'resource _ id','actions = [» read»]','expires _ at','aud'. PEP перевіряє підпис і термін.

14) Тестування

Юніт-тести політик: таблиці істинності за основними комбінаціями.
Property-based: генерація випадкових атрибутів для пошуку «дірок».
Golden-tests: фіксація набору рішень для критичних ендпойнтів.
Canary/Shadow: паралельна оцінка старої і нової версій політик з логуванням розбіжностей.

15) Пов'язані здібності розділу «Архітектура і Протоколи»

Автентифікація та авторизація (OIDC/OAuth2)

Управління згодою

Токенізація та управління ключами

Спостережуваність: логи, метрики, трасування

Гео-маршрутизація та локалізація

Шифрування At Rest/In Transit

16) Чек-лист архітектора

1. Визначено предметні ролі та їх ієрархії?
2. Чи є гібридна модель: ролі + умови на атрибутах?
3. Реалізований PDP з deny-overrides, SoD і step-up?
4. Де PEP? (шлюз, бекенд, БД, UI) - чи скрізь однаково?
5. Налаштовані кеші рішень та інвалідація щодо подій?
6. Політики версіонуються, тестуються, розкочуються по процесу?
7. Включені аудит рішень, метрики і трасування?
8. Підтримується багатоарендність і RLS/field-masking?
9. Є runbook на інциденти і регресію політик?

Висновок

RBAC забезпечує керованість, ABAC - контекст і точність. Комбінуючи ролі з атрибутними умовами, розділяючи PDP/PEP, впроваджуючи кешування, аудит і тестування політик, ви будуєте авторизацію як платформну здатність: передбачувану, що перевіряється і масштабується для продуктових і регуляторних вимог.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Telegram
@Gamble_GC
Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.