アクセス制御機構の概念モデル
アクセス制御を実現する機構について概念を整理し、モデルを描いてみます。
アクセス制御とは要求されたリソースへのアクセスが許可されているか否かを判定して、許可されている場合にのみアクセスを実行し、許可されていない場合はアクセスを実行しない(、またはエラーにする)ことを確実にする制御です。
コードで示すならば、例えば以下のようになるかと思われます。
if(AccessControl(...)) //アクセスが許可されているか否かを判定
{
ExecuteAccess(...); //アクセスを実行
}
else
{
Error(...); //エラー
}
※AccessControl()はbool値を返します。
AccessControl()へ渡す引数は、
- Subject(誰が - アクセスを要求した主体とその属性)
- Verb(どうする - アクセスの種類・内容)
- Object(何を - アクセスの対象とその属性)
- Else(その他の要因)
の4つに分類できると考えます。すなわち、
AccessControl(...) = AccessControl(Subject,Verb,Object,Else)
なのですが、アクセスの種類・内容(=Verb)ごとにAccessControl()を定義できる場合が多いと考えますと、
AccessControl(...) = AccessControlVerb(Subject,Object,Else)
の方が実用的であると思われます。
また、これらの引数に対して、引数がどのような状態であれば許可(あるいは拒否)であるのかを判定する基準となるのがアクセス制御ポリシーです。
アクセス制御ポリシーは基準値と照合論理からなると考えられ、AccesControl()の内部では引数と基準値を照合してアクセスが許可されているか否かを判定しています。
引数と基準値を照合する際の論理は、「=」(等しい)、「!=」(等しくない)、「>」(大なり)、「<」(小なり)など様々なケースが考えられます。
アクセス制御ポリシーはAccessControl()の内部にハードコーディングするのではなく、パラメータ化して外部に持つのが一般的です。
何故なら、パラメータ化することでアクセス制御ポリシーの変更が可能になるからです。
この場合、少なくとも基準値はパラメータ化することが多いですが、照合論理も含めてパラメータ化することもあります。
また、パラメータ化された部分だけを指して、アクセス制御ポリシーと言うこともあります。
以上を図で示します。
とまあ自力でモデルを描いてみましたが所詮は「車輪の再発明」であって、既にエラい方の文献があるだろうとググってみたところ、IPAの資料を発見(!?)しました。
「アクセス制御に関するセキュリティポリシーモデルの調査」の5ページ「2.1.2.アクセス制御」に正に同じことが書いてあります。
「(1)アクセス制御の枠組み」にある「図2.1.2-1」を見ながら、敢えて違いを探してみますと、
- 「アクセス制御ポリシー」、「主体とその属性情報」、「対象とその属性情報」、「その他の情報」が引数なのか外部参照なのか色分けがない
- Verbに関する明示的な言及がない
- アクセス制御ポリシーの中身について明示的な言及がない
といったところでしょうか・・・。