XACML - AND条件和两个规则之间的区别

时间:2014-12-26 20:20:50

标签: authorization access-control xacml alfa abac

例如,使用包含两个条件的AND函数的XACML之间的区别是什么。一个条件是时间范围1-6和日期相等23/07/2015

另一个XACML将有两个规则,一个规则是时间范围1-6,另一个规则日期等于23/07/2015。

我的意思是,他们是如何工作的?第一个,AND函数必须为true才能获得许可效果。 那第二个怎么样?只是检查这两个规则中的一个是否真实并给出许可效果,或者两个规则必须像第一个一样真实?

1 个答案:

答案 0 :(得分:2)

首先,让我们退后一步,重温我们的记忆。 XACML中有3个结构元素:

  • PolicySet,其中包含PolicySetPolicy元素
  • Policy,其中包含Rule元素。
  • Rule包含所需效果(允许或拒绝)。

Rule包含Target元素和Condition元素,用于定义规则何时适用。

Rule仅在TargetCondition评估为真时才会应用并返回其效果,即Target中的所有匹配都是正确的,如果全部Condition的部分最终评估为True。

让我们举个例子:

  • 规则1:如果当前时间>下午1点和当前时间< 6pm和日期== 2015年7月23日,则返回许可。

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条规则来表达相同的逻辑怎么办?那么会发生什么?让我们将条件分为两个规则:

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个子规则,它如何确定要考虑哪个?这是combining algorithms介入的地方。在策略级别和策略集级别定义了组合算法。请参阅here for a full list and details

在上面的示例中,我们使用

apply firstApplicable

这意味着如果规则说明了许可,那么第二个甚至不会被考虑进行评估。换句话说,不会检查日期约束。因此,2个规则的集合不等于我们写的原始条件。

我们仍然可以修改这两条规则,使它们按照条件的作用 - 或几乎可以。一种方法是转动支票并使规则为负值:如果时间超出1-6范围则拒绝。如果日期是&#34; 2015-07-23&#34;则拒绝。只有这样才能定义允许访问的许可规则。重新设计的示例变为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 plugin from here

HTH