Запрос атрибутов PIP ABAC

Как PIP разрешают правильные значения атрибутов? Какой интерфейс должен иметь возможность разрешать значение атрибута? Например, мне нужно получить роли пользователей, и в этом случае мне просто нужно передать атрибут для идентификатора пользователя. Теперь усложним эту задачу. Что делать, если у меня есть контекст, в котором роль пользователя может быть изменена, поэтому одного идентификатора пользователя здесь недостаточно. В этом случае мне нужно передать уровень доступа, для которого мы пытаемся получить роль пользователя.

Итак, в этом примере мы видим, что этот интерфейс будет меняться каждый раз, и единственный подходящий интерфейс будет принимать все.

Как обычно в этом случае реализуются PIP?

Обновить

Пример: у нас есть следующая иерархия:

Level 0           1          2
Organization < tenants < documents.    

Символ ‹означает, что right является дочерним по отношению к левому операнду.

Пользователь может иметь роль администратора или пользователя на каждом уровне. Если пользователь имеет роль администратора на уровне n, то он может получить доступ ко всему на этом уровне и на уровне n + 1, n + 2, n + 3 .... В то же время пользователь будет иметь роль пользователя на всех уровнях n-1, n-2, n-3 ....

Пример:

    user        admin      admin
Organization < tenants < documents

Это первая часть. Вторая часть - о документах. Допустим, у нас есть несколько атрибутов, таких как publicTenant и publicDocument. Разрешение друг друга на разных уровнях не имеет значения, а также требует знания не только userId, но и уровня, на котором мы работаем, и атрибутов ресурсов, таких как organizationId, tenantId и documentId, для правильного разрешения не только роли пользователя, но и ресурса. атрибуты.

Как это можно правильно реализовать в ABAC? Текущее решение является гибридом с ACL / RBAC / ABAC. ACL и RBAC скрыты в ABAC и используются как атрибуты объекта, но это кажется неправильным.


person QuestionAndAnswer    schedule 25.07.2018    source источник
comment
Привет, я тоже пытаюсь прояснить этот вопрос. Когда вы говорите, что роль пользователя может измениться, вы имеете в виду, что младший инженер становится старшим? - предположим, что у этих двух игр разные роли для всех интенсивных целей. И когда вы говорите, что уровень доступа - это как уровень допуска / классификации? Например, младший инженер с секретным уровнем допуска хочет получить доступ к документу секретного уровня?   -  person Michael C Good    schedule 25.07.2018
comment
@MichaelCGood, я обновил пост примером.   -  person QuestionAndAnswer    schedule 26.07.2018
comment
Вы говорите: Текущее решение является гибридом с ACL / RBAC / ABAC. Вы имеете в виду, что знаете такое решение? Вы можете это описать? Если вы это сделаете, есть большая вероятность, что мы сможем перевести его на чистый ABAC. Фактически, ACL обычно настолько прост по сравнению с структурами ABAC (например, XACML), что считается подмножеством (частным вариантом использования) ABAC. То же самое для RBAC0 и RBAC1. Поэтому в большинстве случаев ACL / RBAC / ABAC = ABAC. Конечно, вам все еще нужна какая-то система управления идентификацией / доступом для назначения ролей пользователей, и вам действительно понадобятся PIP для интеграции с ней вашего ABAC PDP.   -  person cdan    schedule 27.07.2018
comment
@CyrilDangerville, Итак, решение ACL / RBAC / ABAC действительно равно ABAC. Я имел в виду, что все свойства ACL и RBAC выражаются в атрибутах ABAC. Например, в ABAC атрибут subject.role вычисляется из ACL, в котором фактически находится роль. Для subject.permissions мы разворачиваем subject.role и получаем разрешения роли. Мол, это не очень хорошо, но лучше, если бы я управлял ими по отдельности, а не с одним интерфейсом ABAC.   -  person QuestionAndAnswer    schedule 27.07.2018
comment
OK. Еще один вопрос для пояснения: в вашем примере, когда вы определяете роли администратора и пользователя на арендаторах, вы имеете в виду на уровне каждого арендатора? Например. у человека может быть роль администратора на клиенте A, но только роль пользователя на клиенте B. Тот же вопрос для документов. У человека может быть роль администратора в документе A, но роль пользователя в документе B?   -  person cdan    schedule 28.07.2018
comment
@CyrilDangerville, да. Это верно.   -  person QuestionAndAnswer    schedule 28.07.2018


Ответы (1)


Следующий подход основан на модели XACML. Если вам нужно решение, которое лучше справляется со случаями, когда в запросах отсутствуют некоторые атрибуты ресурсов, сообщите нам об этом. Я могу обновить свой ответ, но решение более сложное, поскольку оно добавляет больше проверок для пустых / неопределенных атрибутов.

Я использую упрощенный синтаксис, но вы можете легко перевести его в XACML с помощью следующих нескольких соглашений:

  • Если цель не упоминается для политики (набора) или правила, это означает, что она пуста (применяется к любому запросу).
  • В этом примере такие предикаты, как if attribute x = 'XXX', преобразуются в XACML Target / AnyOf / AllOf / Match с MatchId = 'string-equal', AttributeValue 'XXX' и соответствующим AttributeDesignator для атрибута х.
  • Идентификаторы атрибутов субъекта (соответственно ресурса) начинаются с префикса subject. (соответственно resource.).
  • Алгоритм объединения правил и политик неявно установлен на deny-except-permission везде.

PolicySet будет выглядеть так:

  • PolicySet 'root'

    • Политика «Уровень организации»

      • Rule 'Admin Role': Permit if subject.organization-level-role = 'Admin'
      • Правило «Роль пользователя»: разрешите, если subject.organization-level-role = «User» и ... другие условия, чтобы ограничить то, что роль пользователя может делать на уровне организации ... (если слишком сложно чтобы соответствовать правилу, вы можете изменить эти правила на политики, а прилагаемую политику - на набор политик)
    • Политика «Уровень арендатора»

      • Rule 'Admin Role': Permit if subject.tenant-level-role = 'Admin'
      • Правило «Роль пользователя»: разрешите, если subject.tenant-level-role = 'User' и ... другие условия, чтобы ограничить возможности роли пользователя на уровне клиента ... (если слишком сложный чтобы соответствовать правилу, вы можете изменить эти правила на политики, а прилагаемую политику - на набор политик)
    • Политика «Уровень документа»

      • Rule 'Admin Role': Permit if subject.document-level-role = 'Admin'
      • Правило «Роль пользователя»: разрешить, если subject.document-level-role = 'User' и ... другие условия, ограничивающие возможности роли пользователя на уровне документа ...

Чтобы это работало, вам необходимо реализовать один или несколько PIP для разрешения следующих атрибутов объекта (вы можете делать все в одном PIP, особенно если все роли пользователей управляются одной и той же системой, это зависит от вас):

  • subject.organization-level-role: субъектные роли на уровне организации; чтобы получить это, PIP требует в качестве входных данных следующих атрибутов: subject.userId, resource.organizationId
  • subject.tenant-level-role: субъектные роли на уровне арендатора; чтобы получить это, PIP требует в качестве входных данных следующих атрибутов: subject.userId, resource.organizationId, resource.tenantId
  • subject.document-level-role: субъектные роли на уровне документа; чтобы получить это, PIP требует в качестве входных данных следующих атрибутов: subject.userId, resource.organizationId, resource.tenantId, resource .documentId.

Несколько комментариев по реализации PIP:

  • PIP может возвращать пустой мешок для каждого из них, если субъекту не назначена какая-либо роль на соответствующем уровне.
  • Если стоимость получения ролей пользователей из системы управления ролями высока, PIP можно оптимизировать, получив их все сразу (на всех уровнях) из системы управления ролями, при первом запросе одного из указанных выше атрибутов субъекта. во время оценки политики, затем сохранить его в кеше и вернуться из кеша, когда будет запрошен другой из этих атрибутов субъекта. Здесь возможно множество оптимизаций кеширования.
person cdan    schedule 29.07.2018
comment
Это действительно хорошее объяснение. Спасибо. Сейчас мне нужно кое-что отрегулировать. - person QuestionAndAnswer; 29.07.2018