2

3.0 の仕様を読み、ここで質問がありました。

PolicySetPolicyには、結合アルゴリズムなどの多くの類似点があることがわかりました。また、より多くのレベルに対応するために、PolicySet自己完結型にすることもできます。もしそうなら、PolicySetPolicyをPolicyという名前の単一の概念にマージし、 Policy に他のポリシーとルールを含めてみませんか?


更新

Ruleといえば、実際にはRuleはPolicyとあまり違いはありませんが、 RuleにはConditionEffectがあり、結合アルゴリズムがないことを除きます。私が今考えているのは、PolicySet 、 Policy 、 Ruleの 3 つの概念を 1 つの新しいPolicyに統合することです。このポリシーは自己完結型であり、条件効果を持つことができます。結合アルゴリズムがIntermediateを返す場合は、独自のEffectを使用します。独自の条件の場合、ポリシー全体は適用されません要求に応えられません。個人的には、この 1 つの概念のモデルは、PolicySet、Policy、Rule よりも簡潔で明確だと思います。

たとえば、4 レベルのポリシーの場合 (大企業で 4 レベルのポリシーが必要な場合)、XACML は次のように表されます。

PolicySet -> PolicySet(s) -> Policy(s) -> Rule(s)

私の変更は次のとおりです。

Policy -> Policy(s) -> Policy(s) -> Policy(s)

XACML の2 レベルの PolicySet とレベルの Policy および Ruleと比較すると、単純な4 レベルのポリシーの方が明確であると思います。

4

1 に答える 1

2

両方が存在するという事実は、言語の癖です。リーフ要素 (ルール) とブランチ (ポリシー) を持つ言語を想像できます。

Policy と PolicySet はどちらも非常に似ています。XACML でモデル化する場合、それらを同化できます。

他のポリシー XOR ルールを含めることができるが、同時に両方を含めることはできないポリシーがあります。

編集

OPの編集に続いて、もう少しコンテキストがあります。

XACML 構造要素

XACML には 3 つの構造要素が導入されています。

  • ポリシーセット (PS)
  • ポリシー (P)
  • ルール (R)

OPが述べているように、PolicySetにはPolicyとPolicySetを含めることができるため、作成者が望むだけの深さのツリー全体を可能にします(PS --> PS --> PS ... --> P --> R) .

PolicySet、ポリシー、およびルールの内容

3 つの要素 (PS、P、R) すべてに以下を含めることができます。

  • ターゲット要素: ターゲットは、要素のスコープを定義するものです。ターゲットは AND/OR/AND 構造で構成され、属性は一致しますrole=='manager' OR role=='editor'
  • 義務とアドバイス: 義務とアドバイスは、決定と共に PDP (ポリシー決定ポイント) から PEP (ポリシー実施ポイント) に返されるステートメントです。

アルゴリズムの組み合わせ

PolicySet 要素と Policy 要素には子を含めることができるため、子間の競合を解決するメカニズムが必要です。そのメカニズムは結合アルゴリズムと呼ばれます。したがって、PolicySet 要素と Policy 要素の両方に結合アルゴリズム プロパティがあります。PolicySet には他の PolicySet や Policy 要素が含まれるため、PolicySet 内の結合アルゴリズムはポリシー結合アルゴリズムと呼ばれます。Policy 要素にはルールのみが含まれるため、結合アルゴリズムはルール結合アルゴリズムと呼ばれます。

XACML のもう 1 つの癖は、ポリシーの結合アルゴリズムのリストがルールの場合とほとんど同じであることです。主な違いは次のとおりです。

  • only-one-applicable は、ポリシーに対してのみ存在します。
  • on-permit-apply-second は、ポリシーに対してのみ存在します。

ALFA表記のリストを次に示します(ALFA は、 XACML ポリシーの作成を簡素化するためにAxiomaticsによって開発された疑似言語です)。

namespace System {
    ruleCombinator denyOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides"
    ruleCombinator permitOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides"   
    ruleCombinator firstApplicable = "urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable"
    ruleCombinator orderedDenyOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:ordered-deny-overrides"
    ruleCombinator orderedPermitOverrides = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:ordered-permit-overrides"
    ruleCombinator denyUnlessPermit = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"
    ruleCombinator permitUnlessDeny = "urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-unless-deny"

    policyCombinator denyOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-overrides"
    policyCombinator permitOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-overrides"
    policyCombinator firstApplicable = "urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:first-applicable"
    policyCombinator onlyOneApplicable = "urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:only-one-applicable"
    policyCombinator orderedDenyOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:ordered-deny-overrides"
    policyCombinator orderedPermitOverrides = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:ordered-permit-overrides"
    policyCombinator denyUnlessPermit = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-unless-permit"
    policyCombinator permitUnlessDeny = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-unless-deny"
    policyCombinator onPermitApplySecond = "urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:on-permit-apply-second"
}

対象と条件

ターゲット

前述のように、Target 要素は PolicySet、Policy、および Rule のいずれにも存在できます。ターゲットには、AND/OR/AND 要素のセット構造があり、属性の一致を結合します。つまり、特定の属性と特定の値の比較です。XACML は、使用できる関数の長いリストを提供します。

ターゲットでは、2 つの原子値を取り、ブール値を返す関数のみを使用できます (例: == (または urn:oasis:names:tc:xacml:1.0:function:string-equal))。sum (urn:oasis:names:tc:xacml:1.0:function:integer-add) などの他の関数は使用できません。

条件

特に、Target 要素ではできない非常に便利なことが 1 つあります。それは、2 つの属性を一緒に比較する、つまり関係を確立することです。たとえば、次のようなポリシーを書きたいとします。

医師は、割り当てられた患者の医療記録を表示できます。

言い換えれば、Permit if userId == assignedDoctorId.

ここで、Condition 要素が使用されます。Condition は、XACML で使用可能な任意の関数を使用できる式です。sum(age, limit)>5条件の全体的な結果はブール値である必要がありますが、やのようなことができるようになりましたuserId == assignedDoctorId

ここでもう 1 つの癖があります。Condition 要素は Rule 要素内でのみ使用できます。したがって、XACML で関係を表現したい場合は、少なくとも 1 つのルールが必要です。また、Rule 要素は単独では存在できないためです。少なくとも 1 つの Policy 要素が必要です。

したがって、最小の XACML ポリシーは次のとおりです (ALFA を使用):

namespace example{
    policy policyExample{
        apply denyOverrides
        rule allowAll{
            permit          
        }
    }
}

結果の XACML XML コードは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
 <!--This file was generated by the ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com). 
 Any modification to this file will be lost upon recompilation of the source ALFA file-->
<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
    PolicyId="http://axiomatics.com/alfa/identifier/example.policyExample"
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides"
    Version="1.0">
    <xacml3:Description />
    <xacml3:PolicyDefaults>
        <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion>
    </xacml3:PolicyDefaults>
    <xacml3:Target />
    <xacml3:Rule 
            Effect="Permit"
            RuleId="http://axiomatics.com/alfa/identifier/example.policyExample.allowAll">
        <xacml3:Description />
        <xacml3:Target />
    </xacml3:Rule>
</xacml3:Policy>
于 2015-12-25T20:19:15.250 に答える