Как в Диасофт реализовали модель доступа ABAC
ABAC (Attribute-Based Access Control) и XACML (eXtensible Access Control Markup Language) являются двумя важными концепциями в области управления доступом и безопасности информации.
ABAC — это концепция управления доступом, в которой решения о предоставлении доступа основаны на атрибутах субъекта, объекта и окружения. ABAC позволяет гибко определять политики безопасности на основе многих атрибутов, таких как роли, идентификаторы, группы и т.д.
XACML — это язык для определения политик управления доступом, основанный на ABAC. XACML также позволяет гибко определять политики безопасности, что делает его мощным инструментом для управления доступом.
Одним из преимуществ ABAC и XACML является возможность управления доступом на основе контекста. Это позволяет устанавливать правила доступа на основе условий, таких как время, местоположение, роль и другие факторы, что делает их более гибкими, чем традиционные модели управления доступом.
ABAC и XACML также позволяют централизованное управление доступом. Правила безопасности могут быть определены и управляться централизованно, что обеспечивает консистентность и единообразие политик безопасности для всех пользователей.
Основными компонентами модели XACML являются набор политик, политика и правило.
- Набор политик. Объединяет политики или наборы политик, определяет возможность совершения какого-либо действия или доступа на основе политик;
- Политика. Объединяет набор правил и определяет возможность совершения какого-либо действия или доступа на основе правил;
- Правило. Определяет возможность совершения какого-либо действия или доступа;
Каждый элемент состоит из свойств:
- Наименование. Наименование, объединяющее по смыслу наборы политик, политики и правила;
- Цель. Задает условие для дальнейшей проверки доступа действий пользователя к объекту;
- Условие. Дополнительное условие проверки доступа в виде динамически вычисляемого логического выражения;
- Эффект. Разрешение или запрет доступа по результату выполнения правила;
Алгоритм комбинации корневого набора/политик/правил:
- Переопределение отказом. Запрет доступа, если хотя бы один из результатов вычисления вернул запрет;
- Переопределение разрешением. Разрешение доступа, если хотя бы один из результатов вычисления вернул разрешение;
Запретить, если не разрешено. Запрет доступа, если хотя бы один из результатов вычисления не вернул разрешение;
Запретить, если не разрешено. Запрет доступа, если хотя бы один из результатов вычисления не вернул разрешение;
Переопределение разрешением. Разрешение доступа, если хотя бы один из результатов вычисления вернул разрешение;
Переопределение отказом. Запрет доступа, если хотя бы один из результатов вычисления вернул запрет;
Разрешить, если не запрещено. Разрешение доступа, если хотя бы один из результатов вычисления не вернул запрет.
В Диасофт реализовали систему назначения и управления доступом, использующую в своей основе описанные выше принципы.
Доступ к объектам системы назначается в централизованной консоли администратора в соответствии со следующей схемой:
Для оценки разрешения или запрета доступа к бизнес-объекту мы сделали библиотеку-обертку над открытой библиотекой Balana, имплементирующей работу с XACML. Помимо упрощения работы с API Balana, реализована логика проверки доступа к связанным объектам с учетом иерархии.
На API gateway приходит вызов rest API и происходит проверка есть ли настроенные для объекта, с которым работает вызываемое API, политики доступа.
Дальнейшая логика работы делится на две ветки:
- Настроенных политик нет. Вызов проходит дальше без каких-либо условий. Дополнительно на API gateway может происходить проверка по модели RBAC, реализацию которой в нашей системе мы не рассматриваем в данной статье
- Настроенные политики есть. В данном случае проверяется право вызова соответствующего АПИ в контексте пользователя и по результатам проверки могут вернуться ограничения на вызов. То есть доступ разрешен, но только к тем объектам, к которым он настроен в соответствии с условиями фильтрации или доступ полностью запрещен ко всем объектам.
В результате проверки, если в системе настроены дополнительные условия фильтрации доступа к объекту, библиотекой проверки возвращается набор условий, который передается в вызываемый микросервис.
Важно отметить, что ABAC и XACML не являются универсальными решениями для всех сценариев управления доступом и безопасности информации. Они могут быть наиболее полезными для организаций с высоким уровнем сложности в управлении доступом, которые требуют гибких и контекстуальных политик безопасности. Для более простых сценариев управления доступом, может быть достаточно использования более простых моделей, таких как RBAC (Role-Based Access Control) . О том как мы реализовали поддержку RBAC и о поддержки описанных механизмов на уровне low-code мы расскажем в одной из следующих статей.