RBACの概念とシステム設計

RBAC の概念
RBAC (Role-Based Access Control) は、ロールベースのアクセス制御モデルであり、強制アクセス制御や任意アクセス制御よりも中立的で柔軟性の高いアクセス制御技術です。
まず、RBACにおけるいくつかのオブジェクトを以下に示します:
- S = 主体 (Subject) = ユーザーまたは自動エージェント
- R = ロール (Role) = 承認レベルとして定義される職位または職称
- P = 権限 (Permission) = リソースへのアクセス方法
- SE = セッション (Session) = S、R、P間のマッピング関係
- SA = 主体割り当て (Subject Assignment)
- PA = 権限割り当て (Permission Assignment)
- RH = ロール階層 (Role Hierarchy)。≥(x ≥ y は x が y の権限を継承することを表す)として表現できます。
次に、各オブジェクト間には以下の関係があります:
主体とロールは多対多の関係です。
${\displaystyle SA\subseteq S\times R}$
ロールと権限は多対多の関係です。
${\displaystyle PA\subseteq P\times R}$
RBACに対する理解
RBACに関連する概念を理解した後、ここで私自身の理解について述べます。
RBACは、MAC (Mandatory Access Control) の一種であり、システム管理者が各ユーザーのロールを一元的に設定・管理します。
S(主体)、R(ロール)、SE(セッション)の関係は上図の通りです。つまり、1つの主体が複数のロールを持つことができますが、主体がシステムにログインした後(つまり、システムとの1つのセッション期間中)は、1つのロールの権限のみを行使できます。
一方、P(権限)はシステムが提供するサービスによって決定され、実際にはシステムが提供するリソースと、そのリソースに対して行われる操作の組み合わせです。まさにこのリソースと操作の組み合わせによって、「権限」という概念に意味が生まれます。
応用
私が考えるRBACの適用シナリオの定義は、**「リソースがシステム全体で共有されており、複数の階層化されたロールによる責任分離がなされているシステム」**です。
リソースがシステム全体で共有されており、複数の階層化されたロールが存在するということは、システム内のリソースが各ロールにとって異なる意味を持つことを示しており、したがって各ロールがリソースに対して負う責任も異なります。このようなシステムにおいて、RBACは権利と責任を効果的に割り当て、システム内のリソースをより適切に保護・活用するために非常に適したアクセス制御モデルです。
例:商業会社、および最小権限の原則 (Principle of least privilege) に従うオペレーティングシステム。
一方、リソースが個人によって所有されているシステムでは、各ロールは平等であり、各ロールは自身のリソースに対して完全な制御権を持ちます。この場合、RBACモデルは力不足であり、DAC (Discretionary Access Control) モデルを使用すべきです。これはソーシャルネットワーキングシステムで非常に一般的です。
実際のシナリオでは、純粋に共有されたリソースと純粋に個人専用のリソースが存在することはあり得ないため、これら2つのモデルを組み合わせて使用することがよくあります。例:WeChatでは、一般ユーザーは自身の「リソース」(友達の投稿)に対して完全な管理権限を持ちます。しかし、一般ユーザーは他のユーザーを管理することはできず、「通報」機能の実現は、システム内のより高い権限を持つ他のロールによる介入に依存しています。