代码之家  ›  专栏  ›  技术社区  ›  Artsiom Miksiuk

ABAC属性解析

  •  0
  • Artsiom Miksiuk  · 技术社区  · 7 年前

    我们在ABAC中有一个主题、对象(资源)和操作(操作)。主题和对象具有将用于执行规则的属性。

    1. 我们可以有多个不同类型的主题,以及资源。有些属性与某些类型的资源相关,有些属性在另一种资源的上下文中没有任何意义。在这种情况下,应该如何实现正确的属性模型?例如,我们有类型的资源 . 对于类型 属性 公众 是相关的,并且 不是。万一如果 匹普 将收到获取的请求 公众 属性为 它应该做什么?什么都不返回,或者什么都不会导致否定的规则解决?同样的问题。如何定义和解析正确的属性模型?

    2. 按要求 等离子体显示器 我们要传递所有可能的属性吗?据我所知,这将提高性能,因为它可以根据策略的目标过滤掉许多策略。

    2 回复  |  直到 7 年前
        1
  •  1
  •   David Brossard    7 年前

    应PDP要求,我们是否应传递我们拥有的所有可能属性?据我所知,这将提高性能,因为它可以根据策略的目标过滤掉许多策略。

    在ABAC中,您可以选择将所有属性从PEP传递到前面的PDP。例如,你可以说:

    • 销售部经理Alice是否可以批准销售草稿中的记录123?

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

    另一个极端情况是只发送“key”属性,例如

    • 爱丽丝能批准记录123吗?

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

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

    像迈克一样,我为公理学工作。我们已经部署了优化策略评估和属性检索的算法。这使得我们的PDP非常快。

        2
  •  2
  •   David Brossard    7 年前

    对于第一个问题,发送规则决策不需要的其他属性不会影响决策。请看一下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>
    

    在本地主机上的示例项目中,我在特定规则的subject中查找的唯一属性是 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标准的软件,比如公理化软件。