1

たとえば、2 つの条件を含む AND 関数を使用する XACML の違いは何ですか。1 つの条件は、1 ~ 6 の範囲の時間であり、日付が 2015 年 7 月 23 日に等しい

もう 1 つの XACML には 2 つのルールがあり、1 つのルールは 1 ~ 6 の範囲の時間であり、もう 1 つのルールは日付が 2015 年 7 月 23 日です。

つまり、彼らはどのように機能しますか?1 つ目は、許可効果を得るには AND 関数が真でなければなりません。2つ目はどうですか?これらの 2 つのルールのいずれかが true であるかどうかを確認して許可効果を与えるか、最初のルールのように両方のルールを true にする必要がありますか?

4

1 に答える 1

2

まずは、一歩下がって思い出をリフレッシュしましょう。XACML には 3 つの構造要素があります。

  • PolicySetPolicySetおよびPolicy要素を含むことができます
  • PolicyRule要素を含めることができます。
  • Rule目的の効果 (許可または拒否のいずれか) が含まれています。

Aには、要素と、ルールがいつ適用されるかを定義する要素Ruleの両方が含まれます。TargetCondition

aは、と の両方が true と評価された場合、つまり a のすべての一致が正しく、最終的に のすべての部分が True と評価されRuleた場合にのみ適用され、その効果を返します。TargetConditionTargetCondition

あなたの例を見てみましょう:

  • ルール 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

于 2014-12-29T18:34:20.977 に答える