簡體   English   中英

ABAC屬性解析

[英]ABAC Attributes Resolution

我們在ABAC中有一個主題,對象(資源)和操作(動作)。 主題和客體具有將用於執行規則的屬性。

  1. 我們可以有多個不同類型的主題以及資源。 有些屬性與某些類型的資源相關,而某些屬性在另一種上下文中沒有任何意義。 在這種情況下,應如何實施正確的屬性模型? 例如,我們擁有類型AB的資源。 A型屬性isPublic是相關的,並且對於B不是。 如果PIP將收到獲取B的 isPublic屬性的請求,該怎么辦? 不返回任何東西或會導致否定規則解決的東西? 主題相同。 如何正確定義和解析正確的屬性模型?

  2. PDP要求,我們是否應傳遞所擁有的所有可能的屬性? 據我了解,這將提高性能,因為它將允許根據策略目標過濾掉許多策略。

關於第一個問題,發送規則決策不需要的其他屬性不會影響該決策。 看一下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軟件。

應PDP要求,我們是否應傳遞所擁有的所有可能的屬性? 據我了解,這將提高性能,因為它將允許根據策略目標過濾掉許多策略。

在ABAC中,您可以選擇將所有屬性從PEP預先傳遞到PDP。 例如,您可以說:

  • 銷售經理Alice可以批准銷售草稿中的記錄#123嗎?

在上述問題中,我們傳遞了愛麗絲的角色和部門以及記錄的狀態和部門。 我們認為這是達成決策所需的所有政策。 這在PEP(或應用程序)和PDP之間引入了緊密的耦合,但是由於PDP不需要連接到外部源(PIP),因此它使PDP變得非常快。

極端相反的是僅發送“鍵”屬性,例如

  • 愛麗絲可以批准記錄#123嗎?

在那種情況下,PDP將需要為用戶的屬性和資源的屬性調用PIP,從而導致總共4個可能的調用。 您可能認為這聽起來很糟糕。 但事實並非如此。 首先

  • 如今查詢數據源非常高效
  • 您可以在PDP中緩存值,因此您不必一直獲取愛麗絲的角色
  • 僅在確實需要時才獲取屬性。 例如,如果您確定愛麗絲不是經理,那么我們甚至都不會獲取她的部門或資源屬性。

像邁克一樣,我為公理學工作。 我們已采用適當的算法來優化策略評估和屬性檢索。 這使我們的PDP非常快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM