不适用XACML策略语义错误

时间:2015-09-15 13:14:25

标签: authorization access-control xacml xacml3 abac

我目前正在尝试使用XACML编写一个简单的策略。 不幸的是,我的XACML引擎似乎没有找到适用于我的请求的策略。

我所做的是以下内容:

政策:

    <Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
    PolicyId="testPolicy-Quota-Storage"
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-overrides"
    Version="3.0">
<Target></Target>
    <Rule Effect="Permit" RuleId="Permit-Quota-Storage">
        <Description>Quota-Storage Rule : request for storage > 2500mb implies
            that if the profile of a user allows it, the storage plan is scaled
            up
        </Description>
        <Target>
            <AnyOf>
                <AllOf>


                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">premium</AttributeValue>
                        <AttributeDesignator
                            AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id-qualifier"
                            Category="urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject"
                            DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
                    </Match>


                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">store</AttributeValue>
                        <AttributeDesignator
                            AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
                            Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"
                            DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
                    </Match>
                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:integer-greater-than">

                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">2500</AttributeValue>

                        <AttributeDesignator
                            AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
                            Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                            DataType="http://www.w3.org/2001/XMLSchema#integer"
                            MustBePresent="false" />

                    </Match>

                </AllOf>
            </AnyOf>
        </Target>

    </Rule>
    <Rule Effect="Deny" RuleId="Deny-1">
        <Target>
            <AnyOf>
                <AllOf>
                    <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">fixed</AttributeValue>
                        <AttributeDesignator
                            AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id-qualifier"
                            Category="urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject"
                            DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
                    </Match>
                </AllOf>
            </AnyOf>

        </Target>
    </Rule>

</Policy>

请求:

 <xacml-ctx:Request ReturnPolicyIdList="false" CombinedDecision="false" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
   <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" >
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">2500</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
   </xacml-ctx:Attributes>
   <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" >
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">store</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
   </xacml-ctx:Attributes>
   <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject" >
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id-qualifier" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">fixed</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">alice@company.com</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
   </xacml-ctx:Attributes>
</xacml-ctx:Request>

1 个答案:

答案 0 :(得分:1)

我使用以下方式检查了您的政策:

  • Axiomatics政策管理点
  • 通过Notepad ++
  • 的标准XML架构验证器插件

验证错误

在这两种情况下,验证都会返回验证错误:

  

错误:元素'{urn:oasis:names:tc:xacml:3.0:core:schema:wd-17}规则':   不期望这个元素。预计是其中之一(   {瓮:绿洲:名称:TC:XACML:3.0:核心:模式:WD-17}说明,   {瓮:绿洲:名称:TC:XACML:3.0:核心:模式:WD-17} PolicyIssuer,   {瓮:绿洲:名称:TC:XACML:3.0:核心:模式:WD-17} PolicyDefaults,   {urn:oasis:names:tc:xacml:3.0:core:schema:wd-17} Target)。

您编写的政策无效XACML 3.0。如果您手动编写策略,则缺少一些元素。如果您使用工具编写策略,我建议您更改工具。例如,使用Eclipse的ALFA插件。用它编写政策很容易。 See here。它可以免费用于非商业用途。

我修改了您的政策以添加缺少的元素。我跑了另一个验证并得到了

  

错误:元素   '{urn:oasis:names:tc:xacml:3.0:core:schema:wd-17}匹配':此元素   不是预期的。预计是(   {urn:oasis:names:tc:xacml:3.0:core:schema:wd-17} AnyOf)。

这意味着您在规则Deny-1中的目标也无效。您缺少Match元素周围的AllOf / AnyOf元素。

Axiomatics PAP内的政策

一旦修复了这两个错误,我就可以在Axiomatics PAP中导入策略。导入后,UI会显示您的策略,如下所示:

Axiomatics Policy Administration Point

根据策略模拟请求

然后我针对政策运行了您的请求

The XACML request inside the Axiomatics PAP Simulator

我已经可以看到您的请求实际上是一个多决策请求,如blog post中所述。您可能不打算创建此类请求,而是创建具有多个主题属性的请求。因此,请求应为

<xacml-ctx:Request ReturnPolicyIdList="false" CombinedDecision="false" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
   <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" >
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">2600</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
   </xacml-ctx:Attributes>
   <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" >
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">store</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
   </xacml-ctx:Attributes>
   <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" >
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id-qualifier" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">premium</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
      <xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="false">
         <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">alice@company.com</xacml-ctx:AttributeValue>
      </xacml-ctx:Attribute>
   </xacml-ctx:Attributes>
</xacml-ctx:Request>

现在评估的结果仍然是 NotApplicable ,正如您自己所说。原因是你没有规范你的价值观。例如,您的请求使用premium,但您的政策使用premium(whitespace)。空白很重要。

最后修复此错误后,您会获得 NotApplicable ,因为您只是没有在例如中发送正确的值premium和2500.您可以在此屏幕截图中看到评估跟踪。

enter image description here