【轉載】一個XACML的簡介

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   使用   io   strong   

A Brief Introduction to XACML

一個XACML的簡介

摘要:

本文對XACML進行一個簡要的介紹。如需對XACML作更多的瞭解,請訪問OASIS的XACML技術委員會網站。

簡要的說,XACML是一個通用的存取控制策略定義語言。XACML提供一套文法(使用XML定義)來管理對系統資源的訪問。

A Brief Introduction to XACML

XACML簡介

XACML是一個OASIS標準。該標準是一個描述(存取控制)策略語言,同時也是一個描述存取控制判斷請求/應答(request/response)的語言。當然,都是使用XML。策略描述語言用於定義通用的存取控制需求,包括若干標準擴充點來定義新的功能、資料類型、組合邏輯等。(存取控制判斷)請求/應答描述語言使得你可以構成一個問詢(query)來判斷是否一個動作(action)被允許執行,並對結果進行解釋。訪問請求通常包括關於請求是否被允許的問題,這個問題中包括四個參數:Permit,Deny,Indeterminate(錯誤發生或需要的參數值不可用,無法進行判斷)和Not Applicable(該請求無法被該伺服器回應)

典型的機制是這樣:當有人試圖執行一項資源上的動作時。就會發出一個請求到事實上保護該資源(可能是一個檔案系統或Web伺服器)的那個裝置,該裝置被稱為PEP(Policy Enforcement Point,策略強制執行點)。PEP會根據要求者的屬性、請求資源、動作以及其它的附屬資訊來構成一個請求(request)。然後PEP會將該請求發送到PDP(Policy Decision Point,策略判斷點)。PDP會查閱請求以及一些關於該請求的(存取控制)策略資訊,並最終回答該訪問是否被承認合法。這個回答返回到PEP,由PEP來對要求者作允許或拒絕的回答。注意:PEP和PDP可能被包容在同一個應用呈現中,也可能被分布到不同的服務中。除了作為一個請求/應答和策略描述語言以外,XACML同時也提供其它一些關係描述:如:根據一個請求定位其對應存取控制策略,以及根據這個請求和其對應策略回答是或否等。

業界有很多類似的應用定義語言來完成這類任務。但XACML有幾點優勢:

  • XACML是標準。標準通過了大量專家和使用者審查,開發人員不再需要每次都重新考慮,也不需要在費心考慮在設計一個定義語言所需要的諸多因素。另外,當XACML越是被大量部署,開發人員越是能輕鬆的通過標準語言來與其它應用系統協作互動。
  • XACML是通用的。這意味著可以在大多數環境中使用,而不只是在一些特殊的環境中或對特殊的資源可以使用。一個存取控制策略編寫後,可以被很多不同類型的應用程式使用。當使用一個較通用的語言來實現時,存取控制策略的管理也變得簡單了。
  • XACML是分布式的。這意味著一個存取控制策略可以被編寫為引用其它任意位置的其它策略。其帶來的好處就是可以由不同的使用者或組各自管理原則中各自業務範圍內、或專業領域內的子策略並最終合并為總策略,而不是集中管理一個整合的存取控制策略。由XACML來處理如何正確的合并不同的子策略判斷結果,並作出統一的存取控制。
  • XACML是強大的。因為由若干基於基礎語言的擴充方法,所以對多環境考慮已經不再必要。標準語言已經可以支援廣泛的資料類型、功能、和合并不同策略判斷結果的規則。另外,已經有若干標準小組致力於開發擴充和能力描述(extensions and profiles)來使得XACML可以與其它諸如SAML和LDAP之類的標準協調工作。這使得XACML可以得到更廣泛的應用。

為了展示這些特徵如何很好的相互配合,接下來是一個關於XACML存取控制策略的討論,並示範該語言的若干標準特性。注意,XACML是一個很豐富的語言,所以在本文中只有很少的特性被展示。可以通過瀏覽“定義文檔”來瞭解更多的關於XACML特性的資訊。

Top-Level Constructs: Policy and PolicySet

頂層結構:Policy and PolicySet(策略和策略集)

所有的XACML存取控制策略的根是Policy或PolicySet。一個PolicySet是一個可以容納其它Policy或PolicySet的容器,可以通過其引用到非本地的Policy或PolicySet。一個Policy表現為一個單一存取控制策略的引用,它通過一套規則(Rule)來表現。每一個XACML存取控制策略文檔都在其XML標籤根部包含了唯一的一個Policy或PolicySet。

因為一個Policy或PolicySet可以包含多個策略或規則。因為這些策略或規則會有不同的存取控制判斷結果決定,所以XACML需要一個協調判斷結果的方法。這在XACML中是通過一套合并演算法(Combining Algorithms)來實現。每個演算法表示一種不同的合并多判斷結果到單一判斷結果的方法。XACML有“策略合并演算法/ Policy Combining Algorithms”(PolicySet採用)和“規則合并演算法/ Rule Combining Algorithms”(Policy採用)。這當中的一個例子是“Deny Overrides Algorithm”,代表無論其它策略判斷結果如何,只要其中有一個策略或規則判斷返回結果Deny,則最終判斷結果定為Deny。這些合并演算法可以用於構建複雜的策略。在已有的7種標準的合并演算法以外,你可以構造自己的合并演算法來滿足你的需求。

Targets and Rules

目標和規則

XACML PDP要做的一部分工作是根據一個請求找到對應的策略。為了實現這一點,XACML提供另一個被稱為Target的特性。一個Target基本上來說是一套簡化了的在一個請求中Policy、PolicySet、Rule必須遇到的關於主題(Subject)、動作(Action)、資源(Resource)的條件限制。這些條件限制都使用布爾判斷(將在下一節作闡述)來比較一個請求中的參數值和一個Target裡面的條件對應值。如果一個Target中的所有的條件都符合,該請求就被關聯到相應的Policy、PolicySet、Rule上。作為一種檢查策略適用性的方法,Target的資訊中還有一種方法進行策略索引。這在當需要在同一Target中儲存多種策略並且需要快速的審閱這些策略以選擇最合適策略時非常有用。例如,一個Policy可能包含一個只適用於某一特定服務的Target時。當一個要求訪問該服務的請求發生時,PDP就知道到哪兒去找適合判斷該請求的策略。因為策略被基於他們的Target的限制條件進行了索引。注意,Target也可以定義為適用於所有的請求。

一旦Policy被找到並被用於驗證一個請求,其規則(Rule)即發生作用。Policy可以容納任意數量的Rule,這些Rule中包含一個XACML策略的核心邏輯。絕大多數的Rule表現為一個條件布爾判斷。當前條件為真時,“規則的結果/ Rule‘s Effect”(一個根據規則判斷的Permit或Deny的結果)即被返回。條件的判斷結果也可以為一個錯誤(也即“不明確/Indeterminate”)或該條件不適用於判斷請求(即“不適合/NotApplicable”)。一個條件可以非常複雜,如:由一系列嵌套的非布爾判斷的函數或屬性來判斷。

Attributes, Attribute Values, and Functions

屬性,屬性值和函數

XACML運行時處理的是屬性。屬性是已知類型的值,可能包括屬性定義者的標識或定義日期時間。特定的,屬性是Subject、Resource、Action或訪問請求發生的環境的特徵值。一個使用者名稱稱、訪問間歇、試圖訪問的檔案、訪問日期等都可能成為屬性值。當一個請求從PEP被發送到PDP時,該請求被構成屬性擴充集,並被用於與策略中的屬性值進行比較,並最終產生存取控制結果。

Policy以兩種機制來解析來自請求或其它來源(其它Policy)中的屬性值:AttributeDesignator和AttributeSelector。AttributeDesignator讓策略定義以一個名稱和類型來定義屬性,同時可以提供一個發行者(issuer)可選項。然後PDP就在請求中尋找該屬性的值,或判斷該屬性值是否在請求中可以被找到。一共有4種指示者(designator),分別對應請求中的4種類型的屬性:Subject, Resource, Action, and Environment。因為Subject屬性可以被拆分到不同的目錄中,SubjectAttributeDesignators也可以定義目錄來查詢之。AttributeSelectors使得一個策略根據XPath query的形式查詢一個屬性值。只要提供一個資料類型和XPath運算式,就可以解析請求文檔中的屬性值。

AttributeDesignator和AttributeSelector都可以返回多值(因為可能存在一個請求匹配多條件的情況),所以XACML提供一個特殊的屬性叫“Bag”,Bag是一個無序的集合,並且允許重複。通常designator和selector都返回bag,甚至當只有單值返回時也是以bag返回。當沒有匹配項是返回空的bag。當然,designator和selector可以設定一個標記,當這一情況發生時產生一個錯誤。

當屬性值Bag被擷取時,需要通過某種方法對其進行比較以獲得預期的存取控制許可決定。這一功能被一個強大的系統函數集實現。函數集可以在以任何屬性值組合為參數運作,並可返回系統支援的任何類型的屬性值。函數集還支援嵌套,所以使用函數的結果調用另外的函數,這樣的分級嵌套可以任意複雜。二次開發的函數可以提供更加豐富的語言來表達訪問條件限制。

在構建這樣分級嵌套函數集需要注意的一點是有些函數是被定義為與特定資料類型一起作用(如:string和integer等)。為了處理這一問題,XACML定義了一套標準的構成類型唯一函數([type]-one-and-only函數),使用在這些函數,如果在Bag中只有一個值時,函數接受Bag中的特殊類型值並返回單一值,或當Bag中無值或多值時報錯。這是一個Condition中最普遍的一類函數。Target中並不需要[type]-one-and-only函數,因為PDP會自動的將匹配函數對應到bag的每個元素中。

Putting it Together: An Example Policy

一個Policy例子

以下是一個使用上面討論的特徵的Policy的例子。其Target規定Policy只對那些對“SampleServer”服務發出訪問請求的request發生作用。其Policy有一個帶Target的Rule,需由“login”動作和一個Condition引發。該Condition適用於當Subject嘗試在9:00am到5:00pm之間“login”時。注意,這個荔枝可以被擴充為包括不同動作的其它Rule。當第一個Rule不被適用時,一個預設Rule返回Deny結果。(Rule是按順序作用的)

<Policy PolicyId="SamplePolicy"          RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-overrides">
    <!-- This Policy only applies to requests on the SampleServer -->
    <Target>
      <Subjects>
        <AnySubject/>
      </Subjects>
      <Resources>
        <ResourceMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
          <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleServer</AttributeValue>
          <ResourceAttributeDesignator DataType="http://www.w3.org/2001/XMLSchema#string"
                                       AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"/>
        </ResourceMatch>
      </Resources>
      <Actions>
        <AnyAction/>
      </Actions>
    </Target>

    <!-- Rule to see if we should allow the Subject to login -->
    <Rule RuleId="LoginRule" Effect="Permit">
      <!-- Only use this Rule if the action is login -->
      <Target>
        <Subjects>
          <AnySubject/>
        </Subjects>
        <Resources>
          <AnyResource/>
        </Resources>
        <Actions>
          <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">login</AttributeValue>
            <ActionAttributeDesignator DataType="http://www.w3.org/2001/XMLSchema#string"
                                       AttributeId="ServerAction"/>
          </ActionMatch>
        </Actions>
      </Target>

      <!-- Only allow logins from 9am to 5pm -->
      <Condition FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:time-greater-than-or-equal"
          <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:time-one-and-only">
            <EnvironmentAttributeSelector DataType="http://www.w3.org/2001/XMLSchema#time"
                                          AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time"/>
          </Apply>
          <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#time">09:00:00</AttributeValue>
        </Apply>
        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:time-less-than-or-equal"
          <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:time-one-and-only">
            <EnvironmentAttributeSelector DataType="http://www.w3.org/2001/XMLSchema#time"
                                          AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time"/>
          </Apply>
          <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#time">17:00:00</AttributeValue>
        </Apply>
      </Condition>

    </Rule>

    <!-- We could include other Rules for different actions here -->

    <!-- A final, "fall-through" Rule that always Denies -->
    <Rule RuleId="FinalRule" Effect="Deny"/>

  </Policy>

 

Beegee:

常常想也許感興趣的朋友可以聚在一起,設立一個開源項目研究實現相關的模型。但似乎國內朋友的熱情不足,多為了完成公司的一個項目或畢業論文才投入某個領域其中,而後便又不再有更多投入。其實我自己又何嘗不是這樣呢?想到這裡,感歎不已,於是費力將自己近日所讀一文翻譯成中文。希望可以此在網上吸引高人在不忍心後的指點一二,或是拉絡到一幫志同道合的菜鳥一同談論。罷了。

原文http://blog.csdn.net/beegee/article/details/105935

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.