如何为 XACML 的规则组合做逻辑与

How to do logical AND for Rule combining for XACML

我的情况是我有一个包含多个规则的策略,所有规则都必须为真才能使策略为真。例如:

Policy A
       - Rule 1
       - Rule 2
       - Rule 3

为了 Policy A 适用,我需要所有三个规则都 return 为真,如果其中一个 return 为假,它应该去检查我的其他政策政策集

我现在拥有的是

<!-- shortened for brevity -->
<Policy RuleCombiningAlgId="...:deny-overrides">
         <Rule id="1" Effect="Permit">
                ...
         </Rule>
         <Rule id="2" Effect="Permit">
                ...
         </Rule>
         <Rule id="3" Effect="Permit">
                ...
         </Rule>
</Policy>

我认为我的问题是我的规则 none return "Deny" 但我最初认为如果不允许,则应该拒绝。我想在我的所有规则中加上一个 not ,但这会使它变得不优雅。

如果相关,我正在使用 Authzforce 库。

all the rules need to be true for the policy to be true

就 XACML 而言,我猜您的意思是:当且仅当 return 中的所有规则都允许时,策略必须 return 允许。我想不出 XACML 标准中有任何规则组合算法可以简单地做到这一点。所以我建议两个选项:

选项 A:将每个规则包装在 deny-unless-permit 策略中,并在顶部使用 permit-unless-deny -级别(策略 A 成为策略集 A)。

    <?xml version="1.0" encoding="utf-8"?>
    <PolicySet PolicySetId="A" PolicyCombiningAlgId="...:permit-unless-deny">
         <Policy RuleCombiningAlgId="...:deny-unless-permit">
           <Rule id="1" Effect="Permit">
                ...
           </Rule>
         </Policy>
         <Policy RuleCombiningAlgId="...:deny-unless-permit">
           <Rule id="2" Effect="Permit">
                ...
           </Rule>
         </Policy>
         <Policy RuleCombiningAlgId="...:deny-unless-permit">
           <Rule id="3" Effect="Permit">
                ...
           </Rule>
         </Policy>
    </PolicySet>

在这种情况下,PolicySet A returns 允许当且仅当 (iff​​) 没有策略 returns 拒绝(根据允许的定义-除非拒绝算法)。由于每个策略 returns 允许当且仅当规则 returns 允许,否则拒绝(根据 deny-unless-permit 算法的定义),这等同于: 策略 A returns 允许当且仅当所有策略 return 允许,即当且仅当所有规则 return 允许。

选项 B:实施 new Combining Algorithm extension for AuthzForce