Personiumにおけるロール
ロールベースアクセス制御によるAPI保護
PersoniumのほぼすべてのAPIはロールベースアクセス制御によって保護されています。 ロールベースアクセス制御は、様々なアクセス主体それぞれに対して直接リソース操作の権限を付与するのではなく、 以下のようにロールを介して間接的に権限付与を行うアクセス制御方式です。
- アクセス主体に対してロールを割り当てる
- リソースへの操作権限をロールに対して与える
このような2段階の設定によってアクセス主体はリソースへの操作権限を得ます。 ロールベースアクセス制御自体は、昔から様々なオペレーティングシステムやファイルシステムに実装されてきて今でもよく使われている、おなじみの考え方です。
Roleの有効範囲
Cellを基本単位として考えるPersoniumにおいて、ロールはCellの中で設定され、その設定はCellの中でのみ有効です。 RoleはCell制御オブジェクトとなっており、Roleオブジェクトを作成することでそのCellの中でそのロールを使ったアクセス制御を設定することが可能となります。
あるCellに登録したロールオブジェクトを使って、別のCellでそのロールを使ってアクセス制御することはできません。
Roleの割当
Roleの割り当ては以下のように様々な対象に対して行うことができます。これらはすべてCell制御オブジェクトであり、RoleもCell制御オブジェクトです。 Roleの割り当ては、Roleオブジェクトと以下オブジェクトの紐づけ、異種Cell制御オブジェクト同志の紐づけを行うことで行います。
対象Object | 効果 |
---|---|
Account | Cellでの認証単位。異なるアカウントに別のロールを割り当てることで、例えばより強固な認証手段で認証されたときのみより強い権限を与え、簡便な認証手段で認証されたときは限定的な権限を与えるようなことができます。 |
ExtCell | 他のCellでユーザ認証されたアクセス主体。他者への情報開示や、操作権限付与を一番簡単にやるにはExtCellとRoleを紐づけます。 |
Relation | 自Cellからみた他Cell(外部Cell)との関係に対してロールを割り当てられます。例えば、家族という関係にあるCellに管理者ロールを割り当てるといった形です。 |
ExtRole | 特定関係にあるCellで特定のロールを割り当てられた主体。 |
このように様々なアクセス主体に対してロールを割り当てるモデルとなっているため、 Cell内の無数のデータ・リソースそれぞれに設定するアクセス制御(ACL)設定はロールに対して何を許可するのかというシンプルな設定の集合で一元的に設定できる構造となっています。
アプリが定義するロール
Cell制御オブジェクトのRoleは最大一つのBoxと紐づけられる構成となっています。これは何のためのものかと不思議に思われるかと思います。
RoleやACLを誰が定義するのか?
複雑なデータ構造を持つPDSアプリケーションなどでは、PDSオーナとなる消費者はどのデータが何の意味を持っているかを理解することは一般的に無理です。そのためあらかじめアクセス制御リストが設定されたデータ領域とそこにアクセスするロール定義をアプリ開発者が配布して、消費者は誰にどのロールを割り当てるかのみを制御するモデルをPersoniumでは提供しています。
Boxに紐づくロール
Roleに紐づくBoxは何なのかという答えはここにあります。逆方向にみれば、Roleは何等かの一つのBoxにひもづくものとそうでないものがあるという風に見ることができます。つまりRoleにはBoxに紐づくものとそうでないものがあるということとなります。Boxに紐づかないロールは、そのCellのオーナが自身で定義して設定するロールです。 Boxに紐づくRoleは、Boxの定義者すなわちアプリケーション開発ベンダが定義するRoleです。例えば、医療やヘルスケアに関係するアプリが「かかりつけ医」というロールを定義し、その「かかりつけ医」はそのBox内に全域でACL設定として読み書きが可能であるというような形で使うことを想定しています。 具体的には、Boxに紐づくRoleと、それらRoleに対するアクセス制御設定(ACL)はセットでアプリ開発者が定義して、barファイルの形でPDS利用者に対して配布します。 そしてPDS利用者は、誰に(どのCell内アカウントに、またはどの外部Cellに、どのRelationに、etc.)それらRoleを割り当てるかを設定するという使い方をします。