Skip to main content

Cerbosの基本概念

Cerbosとは #

Cerbosは、ソフトウェアのためのアクセス制御システムで、アプリケーションリソースに対するコンテキスト対応のアクセス制御ポリシーを簡単に実装できるようにするツールです。YAMLでアクセスルールを記述し、APIを通じてアクセス制御を実行します。

主要な概念 #

ポリシー決定ポイント(PDP) #

Cerbosは、ポリシー決定ポイント(PDP)として機能します。アプリケーションからのリクエストを受け取り、定義されたポリシーに基づいてアクセス決定を行い、結果を返します。

リソース #

Cerbosでは、保護したいオブジェクトを「リソース」と呼びます。リソースには種類(kind)とID、そして属性(attributes)があります。例えば:

  • 種類:document
  • ID:doc123
  • 属性:owner: "john", status: "published", department: "marketing"

プリンシパル #

アクセスを要求するエンティティ(通常はユーザー)を「プリンシパル」と呼びます。プリンシパルにはID、ロール、属性があります:

  • ID:john
  • ロール:["user", "editor"]
  • 属性:department: "marketing", region: "europe"

アクション #

リソースに対して実行できる操作を「アクション」と呼びます。例えば:

  • view - リソースを表示する
  • edit - リソースを編集する
  • delete - リソースを削除する
  • share - リソースを共有する

ポリシー #

ポリシーは、リソースに対するアクセス制御ルールを定義します。Cerbosでは主に以下の種類のポリシーがあります:

  1. リソースポリシー - 特定の種類のリソースに対するアクセスルールを定義
  2. プリンシパルポリシー - 特定のプリンシパルに対するアクセスルールを定義
  3. 派生ロール - リソースやプリンシパルの属性に基づいて動的にロールを割り当てるルールを定義

効果(Effect) #

ポリシー評価の結果として、アクションに対して以下の効果が返されます:

  • EFFECT_ALLOW - アクションが許可される
  • EFFECT_DENY - アクションが拒否される

Cerbosの仕組み #

  1. アプリケーションがCerbos PDPにリクエストを送信します。リクエストには、プリンシパル情報、リソース情報、実行したいアクションが含まれます。
  2. Cerbos PDPは、定義されたポリシーに基づいてリクエストを評価します。
  3. 評価結果(許可または拒否)がアプリケーションに返されます。
  4. アプリケーションは、結果に基づいてアクションを許可または拒否します。

Cerbosのメリット #

  • コードからポリシーを分離 - アクセス制御ロジックをアプリケーションコードから分離し、ポリシーとして定義できます。
  • コンテキスト対応の決定 - リソースとプリンシパルの属性に基づいて、きめ細かいアクセス制御決定を行えます。
  • 集中管理 - すべてのポリシーを一元管理でき、一貫性のあるアクセス制御を実現できます。
  • 言語に依存しない - 任意のプログラミング言語で書かれたアプリケーションと統合できます。
  • 監査とコンプライアンス - アクセス決定の監査証跡を提供し、コンプライアンス要件を満たすのに役立ちます。

サービスとしての認可(Authorization as a Service) #

Cerbosはライブラリではなくサービスとして設計されており、以下の利点があります:

  • プログラミング言語やアーキテクチャに関係なく、アプリケーションスタックのどの部分からでも権限チェックを実行可能
  • アプリケーションの再コンパイルや再デプロイなしにポリシー更新が即時反映される
  • 現代のネットワークスタックでは通信オーバーヘッドは実質的に無視できるレベル
  • 軽量でステートレスな設計により、高負荷にも容易に対応可能

マイクロサービスアーキテクチャとの親和性 #

多くの成功したシステムがスケールする鍵となる要素の一つは、各コンポーネントがシステムの正確な要求に合わせてスケールできるマイクロサービスアーキテクチャの採用です。Cerbosはスタンドアロンサービスとして構築されており、このようなアーキテクチャに望ましい特性をいくつか備えています:

  • 認可チェックはシステムやアプリケーションスタックのどの部分からでも行うことができます。複雑なルール複製ロジックは不要で、Cerbosへの単一の呼び出しでリクエストに対する単純なALLOWまたはDENY応答が返されます。
  • すべてのポリシー決定はCerbosインスタンスに集中しているため、監査ログを収集する単一の場所があります。
  • CerbosインスタンスはKubernetesサイドカーなど、他のサービスと一緒にスケールできます。

[出典: https://docs.cerbos.dev/cerbos/latest/index.html]