Зачем нужны и PolicySet, и Policy?

Я прочитал спецификации 3.0 и здесь возник вопрос:

Я обнаружил, что PolicySet и Policy имеют много общего, например алгоритмы комбинирования и т. Д. А для поддержки большего количества уровней PolicySet также может быть самодостаточным. Если это так, почему бы не объединить PolicySet и Policy в одну концепцию под названием Policy и не включить в политику другие политики и правила?


Обновление:

Говоря о Правиле, на самом деле Правило также не сильно отличается от Политики, за исключением того, что Правило имеет Условие и Эффект и не имеет алгоритма комбинирования. Сейчас я думаю об объединении трех концепций: PolicySet, Policy, Rule в одну новую Policy. Эта Политика самодостаточна и может иметь свои Условие и Действие. Если его алгоритм объединения возвращает Промежуточный, используйте собственный Эффект. Вся политика неприменима, если ее собственное Условие не соответствует запросу. Я лично считаю, что эта модель, состоящая из одной концепции, более краткая и ясная, чем PolicySet, Policy и Rule.

Например, для четырехуровневой политики (если существует потребность в четырехуровневой политике для большого предприятия) XACML будет представлять собой следующее:

PolicySet -> PolicySet(s) -> Policy(s) -> Rule(s)

Моя модификация будет:

Policy -> Policy(s) -> Policy(s) -> Policy(s)

По сравнению с двухуровневыми наборами политик и политикой и правилом в XACML, я думаю, что простые четырехуровневые политики будут более ясными?


person Yang Luo    schedule 25.12.2015    source источник


Ответы (1)


Тот факт, что оба существуют, является особенностью языка. Вы можете представить себе язык с листовым элементом (правилом) и ветвью (политикой).

И Policy, и PolicySet очень похожи. При моделировании в XACML вы можете ассимилировать их.

У вас была бы политика, которая может содержать правила XOR других политик, но не оба одновременно

РЕДАКТИРОВАТЬ

После редактирования OP, вот немного больше контекста.

Структурные элементы XACML

XACML представляет 3 структурных элемента:

  • PolicySet (PS)
  • Политика (P)
  • Правитель)

Как указано в OP, PolicySet может содержать Policy и PolicySet, что позволяет создать общее дерево настолько глубоким, насколько это хочет автор (PS -> PS -> PS ... -> P -> R) .

Содержание PolicySet, Policy и Rule

Все три элемента (PS, P, R) могут содержать:

  • Целевые элементы: цель - это то, что определяет область действия элемента. Цель состоит из структуры И / ИЛИ / И и совпадений атрибутов, например role=='manager' OR role=='editor'.
  • Обязательства и совет: обязательства и совет - это утверждения, которые возвращаются вместе с решением от PDP (точка принятия решения о политике) обратно в PEP (точка применения политики).

Объединение алгоритмов

Поскольку элементы PolicySet и Policy могут содержать дочерние элементы, им необходим механизм для разрешения конфликтов между дочерними элементами. Этот механизм называется алгоритмом комбинирования. Следовательно, как элементы PolicySet, так и элементы Policy обладают свойством комбинирующего алгоритма. Поскольку наборы политик содержат другие наборы политик и / или элементы политики, алгоритм комбинирования в наборе политик называется алгоритмом комбинирования политик. Поскольку элементы политики содержат только правила, алгоритм объединения называется алгоритмом объединения правил.

Еще одна особенность XACML заключается в том, что список алгоритмов комбинирования для политик почти такой же, как и для правил. Заметные различия:

  • only-one-apply существует только для политик.
  • on-permission-apply-second существует только для политик.

Вот список в нотации ALFA (ALFA - это псевдоязык, разработанный Axiomatics для упрощения разработки политики XACML):

namespace System {
    ruleCombinator denyOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides"
    ruleCombinator permitOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides"   
    ruleCombinator firstApplicable = "urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable"
    ruleCombinator orderedDenyOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:ordered-deny-overrides"
    ruleCombinator orderedPermitOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:ordered-permit-overrides"
    ruleCombinator denyUnlessPermit = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"
    ruleCombinator permitUnlessDeny = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-unless-deny"

    policyCombinator denyOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-overrides"
    policyCombinator permitOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-overrides"
    policyCombinator firstApplicable = "urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:first-applicable"
    policyCombinator onlyOneApplicable = "urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:only-one-applicable"
    policyCombinator orderedDenyOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:ordered-deny-overrides"
    policyCombinator orderedPermitOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:ordered-permit-overrides"
    policyCombinator denyUnlessPermit = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-unless-permit"
    policyCombinator permitUnlessDeny = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-unless-deny"
    policyCombinator onPermitApplySecond = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:on-permit-apply-second"
}

Цели и условия

Цели

Как указывалось ранее, элементы Target могут существовать в любом из PolicySet, Policy и Rule. Цель имеет заданную структуру элементов И / ИЛИ / И для объединения вместе совпадений атрибутов, то есть сравнения заданного атрибута с заданным значением. XACML предоставляет длинный список функций, которые можно использовать.

В цели могут использоваться только функции, которые принимают 2 атомарных значения и возвращают логическое значение, например. == (или urn: oasis: names: tc: xacml: 1.0: function: string-equal). Другие функции, например sum (urn: oasis: names: tc: xacml: 1.0: function: integer-add) использовать нельзя.

Условия

В частности, есть одна действительно полезная вещь, которую целевые элементы делать не могут: сравнивать два атрибута вместе, т.е. устанавливать связь. Представьте, например, что вы хотите написать Политику, которая гласит:

Врачи могут просматривать медицинскую карту пациента, к которому они приписаны.

Или, другими словами, Permit if userId == assignedDoctorId.

Здесь вступают в силу элементы Condition. Condition - это выражение, которое может использовать любую функцию, доступную в XACML. Общий результат Condition должен быть логическим, но теперь вы можете делать такие вещи, как sum(age, limit)>5 или userId == assignedDoctorId.

И вот еще одна причуда: элементы Condition могут использоваться только внутри элемента Rule. Итак, если вы хотите выразить отношения в XACML, вам понадобится хотя бы одно правило. И поскольку элемент правила не может существовать сам по себе. У вас должен быть хотя бы один элемент политики.

Итак, минимально возможная политика XACML (с использованием ALFA):

namespace example{
    policy policyExample{
        apply denyOverrides
        rule allowAll{
            permit          
        }
    }
}

И результирующий XML-код XACML:

<?xml version="1.0" encoding="UTF-8"?>
 <!--This file was generated by the ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com). 
 Any modification to this file will be lost upon recompilation of the source ALFA file-->
<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
    PolicyId="http://axiomatics.com/alfa/identifier/example.policyExample"
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides"
    Version="1.0">
    <xacml3:Description />
    <xacml3:PolicyDefaults>
        <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion>
    </xacml3:PolicyDefaults>
    <xacml3:Target />
    <xacml3:Rule 
            Effect="Permit"
            RuleId="http://axiomatics.com/alfa/identifier/example.policyExample.allowAll">
        <xacml3:Description />
        <xacml3:Target />
    </xacml3:Rule>
</xacml3:Policy>
person David Brossard    schedule 25.12.2015