まずは、一歩下がって思い出をリフレッシュしましょう。XACML には 3 つの構造要素があります。
PolicySet
PolicySet
およびPolicy
要素を含むことができます
Policy
Rule
要素を含めることができます。
Rule
目的の効果 (許可または拒否のいずれか) が含まれています。
Aには、要素と、ルールがいつ適用されるかを定義する要素Rule
の両方が含まれます。Target
Condition
aは、と の両方が true と評価された場合、つまり a のすべての一致が正しく、最終的に のすべての部分が True と評価されRule
た場合にのみ適用され、その効果を返します。Target
Condition
Target
Condition
あなたの例を見てみましょう:
- ルール 1: current-time>1pm and current-time<6pm and date==23/07/2015 の場合、Permit を返します。
ALFA のコードは次のようになります。
policy parent{
apply firstApplicable
rule example{
permit
condition currentTime>"13:00:00":time &&
currentTime<"18:00:00":time &&
currentDate=="2015-07-23":date
}
}
ルールは、条件内のすべての一致が true と評価された場合にのみ適用され、その効果 (この場合は許可) のみを返します。
2 つのルールを使用して同じロジックを表現するとどうなるでしょうか。その後どうなりますか?条件を 2 つのルールに分割してみましょう。
policy parent{
apply firstApplicable
rule checkTime{
permit
condition currentTime>"13:00:00":time &&
currentTime<"18:00:00":time
}
rule checkDate{
permit
condition currentDate=="2015-07-23":date
}
}
その後どうなりますか?結果は同じではありません。実際のところ、ポリシーに 2 つの子ルールがある場合、どちらを考慮するかをどのように決定するのでしょうか? ここで、結合アルゴリズムが介入します。結合アルゴリズムは、Policy レベルおよび PolicySet レベルで定義されます。完全なリストと詳細については、こちらを参照してください。
上記の例では、
apply firstApplicable
これは、ルールが許可を示している場合、2 番目のルールは評価の対象とならないことを意味します。つまり、日付の制約はチェックされません。したがって、2 つのルールのセットは、私たちが書いた元の条件と同等ではありません。
条件と同じように、またはほとんど機能するように、2 つのルールを作り直すことができます。そのような方法の 1 つは、チェックを逆にして、ルールを否定的なものにすることです。時間が 1 ~ 6 の範囲外の場合は拒否します。日付が「2015-07-23」の場合は拒否します。その場合にのみ、アクセスを許可する許可ルールを定義します。再加工された例は ALFA になります。
policy parent{
apply firstApplicable
rule checkTime{
deny
condition currentTime<="13:00:00":time ||
currentTime>="18:00:00":time
}
rule checkDate{
deny
condition not(currentDate=="2015-07-23":date)
}
rule allowAccess{
permit
}
}
肝心なのは、何を表現したいのかということです。時間チェックと日付チェックを区別することは重要ですか? 2つのルールとしてより理にかなっていますか? 単一のルール?それは完全にあなた次第です。
サンプル ポリシーを編集するには、ここから ALFA プラグインをダウンロードできます。
HTH