Какая система контроля доступа подходит для динамической многоуровневой проверки безопасности? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть RESTful API и в микросервисной архитектуре.Такие как -

  • Сервис аутентификации
  • Сервис пользователя
  • Сервис продукта
  • Подробнее ...

В настоящее время, Я проверяю запрос через токен JWT, который можно получить в сервисе аутентификации.Теперь пришло время внедрить систему контроля доступа.

Это внутреннее инструментальное приложение (довольно сложное), и я изначально думал о том, чтобы использовать RBAC (управление доступом на основе ролей), но это приложение не является традиционным.В приложении пользователь A может выполнить сопряжение с другим пользователем B и после его завершения на основе настроек пользователя B пользователь A может выполнять различные действия.

Таким образом, разрешения не являются статическими и основаны на других переменных,Так я должен перейти на систему ABAC / PBAC?Какие-либо предложения?

Мысли об ABAC

  • Субъекты - Кто отправляет запрос, например, Пользователь A
  • Объект - Доступ к чему?например, модуль A
  • Действия - чтение или запись?например, чтение GET-запроса
  • Среда - условие, например, для какого пользователя?(Пользователь B)

1 Ответ

0 голосов
/ 12 февраля 2019

Мой предвзятый ответ: да, вы должны :-) (я работаю на Аксиоматика , и все, что мы делаем, это PBAC / ABAC и делали это в течение 15 лет).

Обратите внимание, чтоPBAC и ABAC в этом контексте одинаковы.PBAC на самом деле гораздо более старая концепция.В прошлом мы использовали политики во многих местах, например, контроль доступа к сети или SDDL.

Основное преимущество контроля доступа на основе атрибутов () заключается в том, что оно дастВы можете со временем адаптировать свои политики контроля доступа без необходимости переписывать ваше приложение.По сути, вы отделяете / экстернализуете авторизацию из приложения.

Ниже показан базовый архитектурный поток в ABAC, посредством которого компонент (PEP) перехватывает бизнес-поток и преобразует его в поток авторизации ( Can Aliceпросмотреть запись 123? ).

Attribute Based Access Control Architecture

Политики могут быть записаны в или ,Я предпочитаю последнее, так как его синтаксис очень легкий (подробнее на Wikipedia ).

Например, вы можете написать:

namespace com.acme{
    /**
     * Tutorial 101 - a flat approach using 4 rules
     */
     policyset recordsAccess{
         apply firstApplicable
         /**
          * Records access control
          */
          policy records{
              target clause object.objectType == "record"
              apply firstApplicable
              /**
               * R1 - A manager can view any records
               */
               rule managersView{
                   target clause user.role == "manager" and action.actionId == "view"
                   permit
               }
              /**
               * R2 - An employee can view a record in their own department
               */
               rule employeesView{
                   target clause user.role == "employee" and action.actionId == "view"
                   condition user.department == record.department
                   permit
               }
              /**
               * R3 - An employee can edit a record they own, if it is in draft mode
               */
               rule employeeEdit{
                   target clause user.role == "employee" and action.actionId == "edit" and record.status == "draft"
                   condition  com.acme.record.owner == com.acme.user.employeeId 
                   permit
               }
              /**
               * R4 - A manager can publish a record if the record is in final 
               * mode and it belongs to a employee below that manager.
               */
               rule managerPublish{
                   target clause user.role == "manager" and action.actionId == "publish"
                   condition stringIsIn(stringOneAndOnly(com.acme.record.owner),com.acme.user.subordinate)
                   permit
               }
          }
     }
}
...