【问题标题】:ABAC Attributes ResolutionABAC 属性解析
【发布时间】:2018-07-25 08:57:36
【问题描述】:

我们在 ABAC 中有一个主体、客体(资源)和操作(动作)。 Subject 和 object 具有将用于执行规则的属性。

  1. 我们可以拥有多个不同类型的主题以及资源。有些属性与某些类型的资源相关,而有些属性在另一种资源的上下文中没有任何意义。在这种情况下,应该如何实现正确的属性模型?例如,我们有 AB 类型的资源。 A 类型的属性 isPublic 是相关的,而 B 则不相关。如果 PIP 将收到获取 BisPublic 属性的请求,该怎么办?什么都不返回或会导致负面规则解决的东西?主题相同的问题。应该如何定义和解析正确的属性模型?

  2. PDP 的请求,我们是否应该传递我们拥有的所有可能的属性?据我了解,这将提高性能,因为它将允许按策略的目标过滤掉很多策略。

【问题讨论】:

  • 你使用的是什么实现方式?

标签: security xacml abac pdp


【解决方案1】:

关于您的第一个问题,发送规则决策不需要的附加属性不会影响决策。看看 PDP 的 XACML 决定:

<EvaluationEvent xmlns="http://www.axiomatics.com/v1/EvaluationEvent" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
    <GroupId>ddc4a53f-1c98-403c-81ce-938c97645d7d</GroupId>
    <GroupVersion>6</GroupVersion>
    <Timestamp>2018-07-24T02:39:21.907Z</Timestamp>
    <EvaluationTimeMillis>0</EvaluationTimeMillis>
    <ClientIdentity>User+username%3D%22pdp-user%22%2C+roles%3D%22pdp-user%22</ClientIdentity>
    <ClientSource>127.0.0.1:49502</ClientSource>
    <InterfaceType>SOAP</InterfaceType>
    <PdpIdentity>f6a721ba-058e-44df-9434-ec1505e99ddc</PdpIdentity>
    <xacml-ctx:Request ReturnPolicyIdList="false" CombinedDecision="false" xmlns:xacml- ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
        <xacml-ctx:RequestDefaults>
            <xacml-ctx:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml- ctx:XPathVersion>
        </xacml-ctx:RequestDefaults>
        <xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject- category:access-subject" >
            <xacml-ctx:Attribute AttributeId="com.axiomatics.seniority" IncludeInResult="false">
                <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">1</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
            <xacml-ctx:Attribute AttributeId="role" IncludeInResult="false">
                <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ADMIN</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
            <xacml-ctx:Attribute AttributeId="com.axiomatics.emailAddress" IncludeInResult="false">
                <xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">userone@user.com</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
        </xacml-ctx:Attributes>
        <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#string">secretmessage</xacml- ctx:AttributeValue>
            </xacml-ctx:Attribute>
        </xacml-ctx:Attributes>
    </xacml-ctx:Request>
    <ResultEntries>
        <ResultEntry>
            <xacml-ctx:Result>
                <xacml-ctx:Decision>Deny</xacml-ctx:Decision>
                <xacml-ctx:Status>
                    <xacml-ctx:StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok"/>
                </xacml-ctx:Status>
            </xacml-ctx:Result>
            <EvaluationComplexity>21</EvaluationComplexity>
        </ResultEntry>
    </ResultEntries>
</EvaluationEvent>

在我的本地主机上的示例项目中,我在特定规则中的主题中寻找的唯一属性是属性 com.axiomatics.seniority 是否等于 1 或 2。这意味着 ADMIN 是额外的提供的属性。但是,这并不影响决策。

关于您的第二个问题,如果我完全理解,我不是,但我确实了解到您担心 PDP 的性能。通常,PDP 决策的性能(将 XACML 的内存和软件实现放在一边)取决于您的策略。如果会发生,您将希望尽快在您的政策中获得“拒绝”。

关于在 PEP 中设置属性,我发现使用基于将要发生的决策类型设置默认属性的函数很有帮助,如下所示:

@Override
public void uiDecisionSetDefaultAttributes() {
    Authentication auth = 
SecurityContextHolder.getContext().getAuthentication();
    attrCatAry.add("SUBJECT");
    attrTypeAry.add("INTEGER");
    attrIdAry.add("com.axiomatics.seniority");
    Integer userId = null;
    try {
        userId = userRepository.findByEmail(auth.getName()).getSeniority();
    } catch (Exception e) {
        log.info(e.toString());
    }
    attrValAry.add(userId);

}

完全披露 - 我为 Axiomatics 工作,我的答案基于完全符合 XACML 标准的软件,例如 Axiomatics 软件。

【讨论】:

    【解决方案2】:

    应 PDP 的请求,我们是否应传递我们拥有的所有可能的属性?据我了解,这将提高性能,因为它允许按策略的目标过滤掉很多策略。

    在 ABAC 中,您可以选择预先将所有属性从 PEP 传递到 PDP。比如你可以说:

    • 销售经理 Alice 能否批准销售草稿中的记录 #123?

    在上面的问题中,我们传入了 Alice 的角色和部门以及记录的状态和部门。我们假设这是做出决定所需的所有政策。这在 PEP(或应用程序)和 PDP 之间引入了紧密耦合,但它使 PDP 非常快,因为它不需要使用外部源 (PIP)。

    与此相反的是仅发送“关键”属性,例如

    • Alice 可以批准记录 #123 吗?

    在这种情况下,PDP 将需要为用户的属性和资源的属性调用 PIP,从而导致总共 4 次可能的调用。你可能觉得这听起来很糟糕。但事实并非如此。首先

    • 如今查询数据源非常高效
    • 您可以在 PDP 中缓存值,这样您就不必一直去获取 Alice 的角色
    • 只有在真正需要时才获取属性。例如,如果您确定 Alice 不是经理,我们甚至不会去获取她的部门或资源属性。

    和 Mike 一样,我为 Axiomatics 工作。我们已经使用算法来优化策略评估和属性检索。这使得我们的 PDP 非常快。

    【讨论】:

    • 这种紧耦合问题通常是如何解决的?我的意思是,我们需要以允许获取几乎任何属性的方式构建 PIP,但是我们在哪里指定这样的连接呢?在文档中?假设我不想获取属性 A1。但要获取它,我需要 B1 和 C2。那么它只在运行时控制吗?
    • 为了避免紧耦合,发送基本问题(Alice 可以对对象 O 执行动作 A 吗?)。提供包含连接信息(到 LDAP、SQL...)和属性之间的映射的 PIP 配置,例如jobTitle 和检索它所需的关键属性,例如用户 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多