メインコンテンツまでスキップ

ロールベースのアクセス制御 (Role-based access control)

ロールベースのアクセス制御 (RBAC) は、ユーザーのロールに基づいて権限を割り当てる方法です。次のようなシナリオで RBAC の利用を検討できます:

  • 異なるアクセス権限が必要な複数のユーザーがいる場合:RBAC は、管理者、編集者、閲覧者など、ロールごとに異なる権限が必要な場合に最適です。
  • 権限管理を簡素化したい場合:個別に権限を設定するのではなく、ロールを割り当てることで大規模なユーザーグループの管理が効率的になります。
  • アプリが異なる部門やチームにサービスを提供している場合:異なるグループがリソースへの異なるレベルのアクセスを必要とする場合に便利です。

ロールベースのアクセス制御の仕組みを理解する

権限 (Permissions/Scopes)

権限 (Permission) とは、API リソース へのアクセスを認可 (Authorization) することを指します。実際の世界では、注文、商品、ドキュメントなどのエンティティをリソースとして指定し、さまざまなアクションを割り当てることができます。

例えば、注文の編集、ドキュメントの閲覧、商品の削除などの権限は次のようになります:

  • write:orders
  • read:documents
  • delete:products
Permissions

上図は、リソース 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 ロールの例です:

Order Admin Role

ロール間で権限が重複しても問題ありません。

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

このモデルのイラストはこちらです:

Bookstore API and Permissions

管理者には 2 種類、注文管理者と商品管理者を用意したいとします:

  • 注文管理者 は注文を管理し、商品を閲覧できます(注文は商品で構成されるため)が、商品の管理はできません。
  • 商品管理者 は商品を管理でき、注文には一切関与しません。

そこで、order_adminproduct_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 つのロールのイラストはこちらです:

Bookstore Roles

1 人のユーザーに order_adminproduct_admin の両方を割り当てても問題ありません。その場合、定義した 6 つすべての権限を持つことになります。

注文管理者は商品管理者と read:product 権限を共有しており、ユーザーが最終的に持つ権限は、割り当てられたすべてのロールからの権限の合計(和集合)となります。

実践 RBAC:アプリケーションのための安全な認可 (Authorization) 実装ステップバイステップガイド

Logto での RBAC マスター:実践的な包括的事例

CIAM 102: 認可 (Authorization) とロールベースのアクセス制御 (RBAC)