Реалізація ABAC є складнішою, ніж ACL / RBAC. Деякі рамки навіть дають вам інфраструктуру для вирішення останніх. Якщо люди та активи можуть бути згруповані під відносно невеликою та фіксованою кількістю ролей / категорій, то, ймовірно, найкраще дотримуватися ACL / RBAC. Якщо дозволи значно відрізняються від людини до людини, то ABAC може запропонувати краще та гнучкіше рішення.
Якщо ви вирішите піти по шляху ABAC, перше, що вам потрібно зробити, - це витратити трохи часу на читання та розуміння стандарту XACML . Наведені в документі приклади використовують синтаксис, сумісний з XACML, і спочатку їх трохи важко пережовувати. Я здогадуюсь, що ви не хочете реалізувати стандартне сумісне рішення, тому вам потрібні лише загальні ідеї.
Поняття
XACML обертається навколо 4 понять та їх атрибутів: предметів , дій , ресурсів та навколишнього середовища . Є ще кілька, але це найважливіші. Все інше будується поверх них. Якби я склав речення з цими поняттями, це могло б бути чимось за принципом : суб'єкти виконують дії над ресурсами в певному середовищі . Застосовуючи це до свого сценарію, це означає:
- Леслі відкриває веб-сторінку менеджера цін.
- Леслі створює ціну подорожі за допомогою веб-сторінки менеджера цін.
Колекція атрибутів
Перше, що нам потрібно зробити - це зібрати відповідні атрибути викладених вище понять. В ідеалі вам не слід призначати будь-які конкретні атрибути, оскільки XACML намагається бути ненав'язливим і покладатися лише на те, що система, природно, забезпечує. І ось у нас є:
Тема
Будь-який актор, будь то людина чи служба у вашій системі. Наш предмет - Леслі. Які атрибути потрібні, щоб однозначно ідентифікувати Леслі? Ймовірно , деякі з таких умов : first name
, last name
, e-mail
, ssn
, company id
, position(s)
.
Дія
Будь-яка дія, яку виконують випробувані. Це можуть бути стандартні CRUD-операції чи щось складніше. Наші дії є open/view
і create
. Атрибути цих дій можуть бути різними залежно від використовуваної рамки веб-додатків. Про це ми поговоримо більше, коли потрапимо на ресурс.
Ресурс
Досить пояснюючи себе. Нашими ресурсами є price manager page
, travel prices
та the newly created price
. Можливо, може бути і більше, якщо дуже хочеться. Ви можете заховати дії, які користувачі не можуть виконувати. Напр. create price button
може бути ресурсом , який може бути показаний / прихований на основі , чи має користувач права на створення ціни. Оскільки єдиний спосіб, коли користувач зможе побачити список цін, може бути через цю сторінку, ймовірно, було б гарною ідеєю застосувати авторизацію на цьому рівні, а не далі вниз.
Доступ до ресурсів є найскладнішим для реалізації, особливо з тих, що надходять із бази даних. Досконалішим варіантом є захист на рівні рядків. Деякі бази даних мають певну підтримку для цього. Деякі реалізатори XACML пішли далеко до створення суперсети SQL. Це дійсно залежить від ваших потреб авторизації, але одне, що ви не хочете робити, - це витягнути все з таблиці і потім вирішити, що показати. Ви можете групувати ресурси за наборами дозволів, абстрагувати їх за API та застосовувати авторизацію в кінцевих точках API.
Навколишнє середовище
Я не можу правильно його визначити (XACML також не має належного визначення), але скажімо, це "міхур", в якому все це відбувається. Це включає в себе: web application
, web server
, operating system
, browser
, office
. Можна витягти атрибути , як: ip address
, time of day
, user locale
, user agent
, operating system version
. Ви можете використовувати їх, щоб навіть заблокувати доступ користувачів із середовищ, які не підтримуються вашою програмою (наприклад, старі браузери, старі операційні системи, комп'ютери поза вашою мережею, доступ поза робочим часом).
Запит на авторизацію
Після того як ми зібрали всі необхідні атрибути, ми збираємо їх у запиті на авторизацію та пересилаємо їх суб’єкту, який може приймати рішення про авторизацію на основі значень цих атрибутів. У мові XACML мова, де ви збираєте ці атрибути та виконує рішення, прийняті тоді, називається точкою примусового виконання політики (PEP), а рішення, що приймають рішення, називається пунктом рішення щодо політики (PDP). Місця, з яких отримуються значення атрибутів, називаються інформаційними пунктами s (PIP). PEP, PDP і PIP можуть бути частиною вашого застосування, оскільки вони можуть бути зовнішніми системами. Ви можете знайти схему того, як вони спілкуються один з одним у стандарті XACML.
Процес прийняття рішення
Процес прийняття рішень заснований на правилах . Правила можуть бути згруповані в політики, які можна додатково згрупувати в набори політик . Кожен із них має ціль . Ціль використовується для визначення того, чи застосовується якесь із правил до запиту авторизації. Подумайте про це як про фільтр. Ціль містить умови, побудовані з використанням імен атрибутів та значень. Наприклад, правила вашої програми можна згрупувати у щось на зразок:
Веб-додаток (набір політик)
| - target: application-name == "Веб-додаток"
`- Версія 1.0 (набір політики)
| - target: application-version == "1,0"
`- Перегляд менеджера цін (політика)
| - target: web-page-name == "менеджер цін" && action-name == "переглянути"
`- Леслі може переглянути менеджер цін (правило)
| - target: subject-name == "Леслі"
`- дозвіл: дозволяти
PDP відповідатиме всім у вищенаведеному наборі проти значень атрибутів у запиті на авторизацію. Що станеться, якщо немає правил, які відповідають цьому, залежить від реалізації Вашого PDP. Після того , як PDP прийнято рішення ( allow
, deny
або not-applicable
) він посилає його назад в PEP , який діє на нього шляхом надання або відмови в доступі до ресурсу. Поряд з відповіддю, PDP може надіслати перелік obligations
та, advices
який PEP повинен або повинен виконати в процесі примусового виконання. Залежно від того, як зберігаються правила (текстові файли чи база даних), адміністратор може використовувати стандартний текстовий редактор або спеціальну програму для редагування, щоб змінити їх так, як він вважає за потрібне. Скасування доступу Леслі до менеджера цін поновлюється просто змінюючи дозвіл allow
наdeny
, наданий PEP виконує свою роботу.
Виконання
Це сильно залежить від вашої технології стеку. Деякі веб-рамки мають природні точки примусового виконання (наприклад, ASP.NET MVC має фільтри атрибутів). Можливо, ваші бізнес-шари повинні визначати такі точки примусового виконання. Мені було легше застосувати правозастосування на кінцевих точках обслуговування (думаю, мікросервіси) або на рівні інтерфейсу користувача.
Інші переваги
Приємним побічним ефектом від цього є те, що ви закінчуєте досить багатий аудиторський слід, який можна використовувати для інших цілей.