ロールベースのアクセス制御 (Role-based access control)
ロールベースのアクセス制御 (RBAC) は、ユーザーのロールに基づいて権限を割り当てる方法です。次のようなシナリオで RBAC の利用を検討できます:
- 異なるアクセス権限が必要な複数のユーザーがいる場合:RBAC は、管理者、編集者、閲覧者など、ロールごとに異なる権限が必要な場合に最適です。
- 権限管理を簡素化したい場合:個別に権限を設定するのではなく、ロールを割り当てることで大規模なユーザーグループの管理が効率的になります。
- アプリが異なる部門やチームにサービスを提供している場合:異なるグループがリソースへの異なるレベルのアクセスを必要とする場合に便利です。
ロールベースのアクセス制御の仕組みを理解する
権限 (Permissions/Scopes)
権限 (Permission) とは、API リソース へのアクセスを認可 (Authorization) することを指します。実際の世界では、注文、商品、ドキュメントなどのエンティティをリソースとして指定し、さまざまなアクションを割り当てることができます。
例えば、注文の編集、ドキュメントの閲覧、商品の削除などの権限は次のようになります:
write:orders
read:documents
delete:products

上図は、リソース https://api-1.store.io
の権限 read:item
と、リソース https://api-2.store.io
の権限 read:item
が異なることを示しています。
API リソースが指定されていない場合、権限は「OIDC 用」として扱われます。通常、RBAC でこれを望むことはありません。
Logto で API 権限の設定方法 について学ぶことができます。
ロール (Roles)
ロール (Role) とは、ユーザーに割り当てることができる 権限のグループ です。異なる API に定義された権限を集約する方法も提供し、ユーザーごとに個別に権限を割り当てるよりも、追加・削除・調整が効率的になります。
例えば、2 つのリソースに対して複数の権限を持つ order_admin
ロールの例です:

ロール間で権限が重複しても問題ありません。
Logto で ロールの設定方法 について学ぶことができます。
例:オンライン書店
オンライン書店を管理すると仮定します。ここでは、説明のためにアクセス制御モデルを大幅に簡略化しています。
モデルは 2 つの主要な API リソース、注文と商品に分かれています。それぞれ異なるリソースインジケーターを持っています:
- 注文:
https://api.store.io/orders
- 商品:
https://api.store.io/products
各リソースごとに、閲覧、作成・編集、削除の権限を分けたいと考えます。したがって、合計 6 つの権限を定義します:
https://api.store.io/orders
- 権限
read:order
- 権限
write:order
- 権限
delete:order
- 権限
https://api.store.io/products
- 権限
read:product
- 権限
write:product
- 権限
delete:product
- 権限
このモデルのイラストはこちらです:

管理者には 2 種類、注文管理者と商品管理者を用意したいとします:
- 注文管理者 は注文を管理し、商品を閲覧できます(注文は商品で構成されるため)が、商品の管理はできません。
- 商品管理者 は商品を管理でき、注文には一切関与しません。
そこで、order_admin
と product_admin
の 2 つのロールを作成し、それぞれに次の権限を割り当てます:
order_admin
https://api.store.io/orders
read:order
,write:order
,delete:order
https://api.store.io/products
read:product
product_admin
https://api.store.io/products
read:product
,write:product
,delete:product
これら 2 つのロールのイラストはこちらです:

1 人のユーザーに order_admin
と product_admin
の両方を割り当てても問題ありません。その場合、定義した 6 つすべての権限を持つことになります。
注文管理者は商品管理者と read:product
権限を共有しており、ユーザーが最終的に持つ権限は、割り当てられたすべてのロールからの権限の合計(和集合)となります。
関連リソース
実践 RBAC:アプリケーションのための安全な認可 (Authorization) 実装ステップバイステップガイド
Logto での RBAC マスター:実践的な包括的事例CIAM 102: 認可 (Authorization) とロールベースのアクセス制御 (RBAC)