例如,使用包含两个条件的 AND 函数的 XACML 之间有什么区别。一个条件是时间在 1-6 范围内并且日期等于 23/07/2015
另一个 XACML 将有两条规则,一条规则是时间范围 1-6,另一条规则日期等于 23/07/2015。
我的意思是,它们是如何工作的?第一个,AND 函数必须为真才能获得许可效果。第二个呢?是否会检查这两个规则中的一个是否为真并给予许可效果,或者两个规则都必须像第一个规则一样为真?
例如,使用包含两个条件的 AND 函数的 XACML 之间有什么区别。一个条件是时间在 1-6 范围内并且日期等于 23/07/2015
另一个 XACML 将有两条规则,一条规则是时间范围 1-6,另一条规则日期等于 23/07/2015。
我的意思是,它们是如何工作的?第一个,AND 函数必须为真才能获得许可效果。第二个呢?是否会检查这两个规则中的一个是否为真并给予许可效果,或者两个规则都必须像第一个规则一样为真?
首先,让我们退后一步,刷新我们的记忆。XACML 中有 3 个结构元素:
PolicySet
可以包含PolicySet
和Policy
元素Policy
可以包含Rule
元素。Rule
其中包含所需的效果(Permit 或 Deny)。ARule
包含一个Target
元素和一个Condition
定义规则何时应用的元素。
仅当 a和评估都为真时, ARule
才会应用并返回其效果,即如果 a 中的所有匹配项都是正确的,并且如果最终的所有部分都评估为 True。Target
Condition
Target
Condition
让我们举个例子:
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 个子规则,它如何确定要考虑哪一个?这是组合算法介入的地方。组合算法在策略级别和策略集级别定义。有关完整列表和详细信息,请参见此处。
在上面的例子中,我们使用
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 插件。
高温高压