【问题标题】:XACML condition comparing subject attribute and resource attribute, not hard codedXACML 条件比较主题属性和资源属性,非硬编码
【发布时间】:2018-04-04 01:16:06
【问题描述】:

我正在研究 XACML 中的一项策略,其中应将具有安全分类和类别的主题与对象的分类和类别进行比较。 请求可能是:

  • 主题:
    • 分类:秘密,
    • 类别:北约、欧盟。
  • 资源:
    • 分类:秘密,
    • 类别:北约。

这应该是允许的。 如果资源的分类高于主题,或者主题没有正确的类别,则结果应被拒绝。所以,我需要以某种方式对分类进行排名(使用 in-bag 函数?)以查看主题是否具有正确的分类。我还需要比较主体和客体的一个或多个类别。

我只能用分类来硬编码,我在这个网站上看到的类似问题使用 3.0 和。我无法对类别部分进行编码。这是我在硬编码属性政策中的条件。

    <Condition FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                    <SubjectAttributeDesignator
                          AttributeId="classification"
                          DataType="http://www.w3.org/2001/XMLSchema#string"/>     
                </Apply>
            <AttributeValue
                DataType="http://www.w3.org/2001/XMLSchema#string">top-secret</AttributeValue>  
            </Apply>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                    <ResourceAttributeDesignator
                          AttributeId="resclassification"
                          DataType="http://www.w3.org/2001/XMLSchema#string"/>     
                </Apply>
            <AttributeValue
                DataType="http://www.w3.org/2001/XMLSchema#string">top-secret</AttributeValue>  
            </Apply>      
        </Condition>  

有什么帮助吗?

此代码适用于硬编码属性。

               <!-- Hard-coded condition check -->
        <Condition FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-greater-than-or-equal">
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                    <SubjectAttributeDesignator
                        AttributeId="classification"
                        DataType="http://www.w3.org/2001/XMLSchema#string"/>     
                </Apply>
            <AttributeValue
                DataType="http://www.w3.org/2001/XMLSchema#string">3.0 top-secret</AttributeValue>  
            </Apply>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                    <ResourceAttributeDesignator
                        AttributeId="resclassification"
                        DataType="http://www.w3.org/2001/XMLSchema#string"/>     
                </Apply>
            <AttributeValue
                DataType="http://www.w3.org/2001/XMLSchema#string">3.0 top-secret</AttributeValue>  
            </Apply>    
        </Condition> 

【问题讨论】:

  • 你能发布你的整个政策吗?此外,如果您想进行比较,您将需要使用正确顺序的数字或字符串,例如“1.0 秘密”、“2.0 绝密”...
  • 我在机舱里过周末,但会尽快带我去看看!
  • 您的条件是 XACML 2.0。你能切换到 XACML 3.0 吗?
  • 我被特别要求使用符合 XACML v2 的 API。
  • 在分类前添加数字,将请求中的属性与策略中的硬编码字符串进行比较,得到正确的结果(允许、拒绝等)。尝试比较主题和文件之间请求中的分类属性仍然没有运气。

标签: xacml alfa authorization access-control xacml abac alfa


【解决方案1】:

要解决这个问题,你必须定义如下属性:

SubjectClassificationRank(数据类型:整数), SubjectAccessCategory(数据类型:字符串), ResourceClassificationRank(数据类型:整数), ResourceCategory(数据类型:字符串

您的整个条件的 XACML 2.0 代码如下:

<Condition>
  <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-greater-than-or-equal">
      <SubjectAttributeDesignator SubjectCategory="urn:oasis:names:tc:xacml:1.0:subjectcategory:accesssubject" AttributeId="SubjectClassificationRank" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false"></SubjectAttributeDesignator>
      <ResourceAttributeDesignator AttributeId="ResourceClassificationRank" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false"></ResourceAttributeDesignator>
    </Apply>
    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:all-of-any">
      <Function FunctionId="urn:oasis:names:tc:xacml:2.0:function:integer-greater-than"></Function>
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
        <ResourceAttributeDesignator AttributeId="ResourceCategory" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></ResourceAttributeDesignator>
      </Apply>
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
        <SubjectAttributeDesignator SubjectCategory="urn:oasis:names:tc:xacml:1.0:subjectcategory:accesssubject" AttributeId="SubjectAccessCategory" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></SubjectAttributeDesignator>
      </Apply>
    </Apply>
  </Apply>
</Condition>

解释:

首先它在 Subject 的 Rank 和 Resource 的 rank 之间应用一个大于函数,并得到布尔值“result-1”。部分如下:

  <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-greater-than-or-equal">
          <SubjectAttributeDesignator SubjectCategory="urn:oasis:names:tc:xacml:1.0:subjectcategory:accesssubject" AttributeId="SubjectClassificationRank" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false"></SubjectAttributeDesignator>
          <ResourceAttributeDesignator AttributeId="ResourceClassificationRank" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false"></ResourceAttributeDesignator>
        </Apply>

分别从 SubjectAccessCategory 列表中取出一个袋子,从 ResourceCategory 列表中取出另一个袋子。然后比较返回 true,如果每个元素第一个袋子(ResourceCategory 列表)包含在第二个袋子(SubjcetAccessCategory)中,否则返回 false,即“result2”。

<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:all-of-any">
  <Function FunctionId="urn:oasis:names:tc:xacml:2.0:function:integer-greater-than"></Function>
  <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
    <ResourceAttributeDesignator AttributeId="ResourceCategory" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></ResourceAttributeDesignator>
  </Apply>
  <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
    <SubjectAttributeDesignator SubjectCategory="urn:oasis:names:tc:xacml:1.0:subjectcategory:accesssubject" AttributeId="SubjectAccessCategory" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></SubjectAttributeDesignator>
  </Apply>
</Apply>

然后最后将“result1”和“result2”与“And”函数结合起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多