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