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

ロールベースのアクセス制御

ロールベースのアクセス制御 (RBAC) は、ユーザーに対してロールに基づいて権限を割り当てる方法です。次のシナリオで RBAC の使用を検討してください:

  • 異なるアクセスニーズを持つ複数のユーザーがいる場合:RBAC は、管理者、編集者、閲覧者など、ロールに基づいて異なる権限が必要な場合に理想的です。
  • 権限管理を簡素化する必要がある場合:大規模なユーザーグループを管理する際に、個別に権限を設定するのではなく、ロールを割り当てることで効率的です。
  • アプリが異なる部門やチームにサービスを提供している場合:異なるグループがリソースへの異なるレベルのアクセスを必要とするシナリオで役立ちます。

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

権限 (スコープ)

権限 (Permission) は、API リソース へのアクセスを許可することを指します。実際の世界では、注文、製品、文書などのエンティティがリソースとして指定され、さまざまなアクションが割り当てられます。

注文の編集、文書の読み取り、製品の削除などの権限の例は次のとおりです:

  • 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 権限の設定 について学びましょう。

ロール

ロールは、ユーザーに割り当てることができる権限のグループ化です。また、異なる 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

order_adminproduct_admin の両方をユーザーに割り当てることも可能で、その場合、定義した 6 つの権限すべてを持つことになります。

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

Logto での RBAC の習得:包括的な実世界の例

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