XACML - разница между условием И и двумя правилами

В чем разница между XACML, который использует, например, функцию И, которая содержит два условия. одним условием будет время в диапазоне 1-6 и дата, равная 23.07.2015.

А другой XACML будет иметь два правила: одно правило будет иметь значение времени в диапазоне 1-6, а другое правило - дату 23.07.2015.

Я имею в виду, как они работают? Первое, функция И должна быть истинной, чтобы получить эффект разрешения. А как насчет второго? Просто проверим, истинно ли одно из этих двух правил, и даст эффект разрешения, или оба правила должны быть верными, как первое?


person Bobys    schedule 26.12.2014    source источник


Ответы (1)


Прежде всего, давайте сделаем шаг назад и освежим наши воспоминания. В XACML есть 3 структурных элемента:

  • PolicySet, который может содержать элементы PolicySet и Policy
  • Policy, который может содержать Rule элементов.
  • Rule, которые содержат желаемый эффект (разрешение или запрет).

Rule содержит как элемент Target, так и элемент Condition, которые определяют, когда будет применяться Правило.

Rule будет применяться и возвращать свой эффект только в том случае, если и Target, и Condition оцениваются как истина, т.е. если все совпадения в Target верны и если все части Condition в конечном итоге оцениваются как истинные.

Возьмем ваш пример:

  • Правило 1: верните Permit, если текущее время> 13:00, а текущее время ‹18:00 и дата == 23.07.2015.

Код в ALFA будет:

policy parent{
    apply firstApplicable
    rule example{
        permit
        condition currentTime>"13:00:00":time && 
                  currentTime<"18:00:00":time && 
                  currentDate=="2015-07-23":date
    }       
}

Правило будет применимо и только вернет свой эффект, в данном случае разрешение, если все совпадения в условии будут истинными.

Что, если мы используем 2 правила для выражения одной и той же логики? Что тогда происходит? Разобьем условие на 2 правила:

policy parent{
    apply firstApplicable
    rule checkTime{
        permit
        condition currentTime>"13:00:00":time && 
                  currentTime<"18:00:00":time
    }       
    rule checkDate{
        permit
        condition currentDate=="2015-07-23":date
    }
}

Что тогда происходит? Результат не тот. Фактически, если у политики есть 2 дочерних правила, как она определяет, какое из них следует учитывать? Здесь вступает в действие комбинирование алгоритмов. A алгоритм комбинирования определяется на уровне политики и уровне набора политик. См. здесь для получения полного списка и подробностей.

В приведенном выше примере мы используем

apply firstApplicable

Это означает, что если в Правиле указано «Разрешить», то второе даже не будет рассматриваться для оценки. Другими словами, ограничение даты не будет проверяться. Следовательно, набор из 2 правил не эквивалентен написанному нами исходному условию.

Мы все еще можем переработать 2 правила, чтобы они работали как условие - или почти. Один из таких способов - перевернуть чеки и сделать правила отрицательными: запретить, если время выходит за пределы диапазона 1-6. Отклонить, если дата - «2015-07-23». Только после этого можно было бы определить разрешающее правило для разрешения доступа. Доработанный пример становится в ALFA:

policy parent{
    apply firstApplicable
    rule checkTime{
        deny
        condition currentTime<="13:00:00":time || 
                  currentTime>="18:00:00":time
    }       
    rule checkDate{
        deny
        condition not(currentDate=="2015-07-23":date)
    }
    rule allowAccess{
        permit
    }
}

Суть в том, что вы хотите выразить? Важно ли различать проверку времени и проверку даты? Имеет ли смысл 2 правила? Единое правило? Это полностью зависит от вас.

Чтобы изменить образцы политик, вы можете загрузить подключаемый модуль ALFA отсюда.

HTH

person David Brossard    schedule 29.12.2014
comment
Спасибо за ответ, Дэвид, очень понятно. Просто быстрый вопрос. Вторая политика с двумя правилами работает как логический элемент ИЛИ, не так ли? (Просто чтобы мне было понятнее). И если у нас есть 3 или 4 правила, опять же, если первое правило истинно, то остальные не будут учитываться, верно? - person Bobys; 30.12.2014
comment
В некотором смысле да, это работает как неисключительное ИЛИ. Но помните, что XACML может оцениваться как NotApplicable. В этом суть последнего пустого правила - убедиться, что мы не получаем NotApplicable. Подробнее об объединении алгоритмов можно прочитать здесь: developers.axiomatics .com / blog / index / entry / - person David Brossard; 30.12.2014