トップ OSS紹介 Casbin

Casbin

NRIのOpenStandiaが提供するCasbin最新情報

バージョンアップ情報

Casbin情報

Casbinとは

Casbinは、オブジェクトに対する認可を実施するための様々なアクセス制御モデルをサポートする、強力かつ効率的なオープンソースのアクセス制御ライブラリです。

認可の判断を行うためのルール(ポリシー)は、サブジェクト(アクションを実行するエンティティ)、オブジェクト(アクセス制御対象のリソースを表すエンティティ)、許可するアクション等をポリシーファイルとしてリストするだけであり、とてもシンプルです。開発者や管理者は、モデルファイルを作成して、実際のリクエストの構成やアクションの可否、マッチングの条件などで認可を制御できます。Casbinでは、上記のポリシーとモデルに基づいて(デフォルトはファイルで提供)、要求されたリクエストの認可を判断するためのエンフォーサーを提供します。

Casbinは複数のプログラム言語用のライブラリとして提供されます。現状、サポートしているプログラム言語は以下の16種類です。

  • Go
  • Java
  • C/C++
  • Node.js
  • JavaScript
  • PHP
  • Laravel
  • Python
  • .NET(C#)
  • Delphi
  • Rust
  • Ruby
  • Swift(Objective-C)
  • Lua(OpenRestry)
  • Dart(Flutter)
  • Elixir

Casbinでは、サブジェクト、オブジェクト、アクションといった、いわゆる「標準」的な認可フローから、ロールベース(RBAC)、属性ベース(ABAC)、URLパターンマッチング、テナント/ドメイン、プライオリティ、スーパーユーザーといった細やかな認可条件を必要とするケースにも対応できます。
一方で、Casbinは、認証(ログイン時のユーザー名とパスワードの検証)や、ユーザーやロールの管理は行わないので、これらの機能は範囲外となります。

主な特徴

ハイブリッドアクセス制御モデル

Casbinでのアクセス制御モデルは、”PERM”(Policy、Effect、Request、Matcher)という独自のメタモデルに基づいて設定ファイルに抽象化されます。そのため、既存のプロジェクトの認可メカニズムからの切り替え/アップグレードを比較的容易に行えます。

柔軟性のあるポリシーストレージ

Casbinのポリシーは、メモリやファイル以外にも様々な場所に保存できます。現在は、MySQL、PostgreSQL、OracleからMongoDB、Redis、Cassandra、AWS S3まで数十種類のデータベースがアダプターとしてサポートされます。

多様なプログラム言語/プラットフォームでの動作

Casbinは、Go、Java、PHP、Node.jsといった様々なプログラム言語で実装されています。すべての実装は同じAPIで、同じ動作を実現できる(※1)ので、特定のプログラミング言語のCasbinを学習すれば、他のプログラム言語も比較的容易に扱うことができます。

ポリシーの永続性

Casbinでは、ポリシーを永続化するストレージはアダプターとして実装されます。ただし、Casbinのメインライブラリの軽量性を維持するためCasbin本体にはアダプターコードは管理されていません(デフォルトのファイルアダプターを除く)。その他のアダプターの機能は、Extensionとして提供されます。

大規模なポリシーの適用

一部のアダプターではポリシーのフィルタリングをサポートします。マルチテナント環境などでの大規模なポリシーがロードされ、パフォーマンスがボトルネックとなるような場合でも、このフィルター機能によって効率よくポリシーを適用できます。

ロールマネージャー

Casbinでは、RBACのロール階層(ユーザーとロールのマッピング)を管理するために、ロールマネージャーが利用されます。ロールマネージャーは、ポリシー定義もしくは、LDAP、Okta、Auth0、Azure ADなどの外部ソースからロールデータを取得できます。ただ、Casbin本体には、デフォルトのロールマネージャー以外のコードは管理されていません。その他のロールマネージャーの機能は、Extensionとして提供されます。

  • 一部のプログラム言語では提供されている機能に差があります。詳しくは、下記のURLを参考にしてください。

類似プロダクト

汎用的なポリシーエンジンとしての用途であれば、Open Policy Agent、OpenFGAなどが類似の機能を持っています。また、k8sに特化したポリシーエンジンとしての用途であれば、Kyvernoがあります。

動作環境

上述したとおり、16のプログラム言語において、ライブラリとして使用可能です。
Casbinでは、素のライブラリ以外にもミドルウェアとして提供されている機能(GraphQL Middlewares、Cloud Native Middlewares)があります。

ただ、残念ながら、これらのモジュールに関しては、

  • 更新頻度や、スター数が多くない
  • 現状では正常に動かないことがある
  • 公式のDockerイメージが提供されていない
  • 設定などがオプションではなく、ハードコードされてしまっている

など、不十分な実装なっていることが多く、プロダクションで継続的に利用できるほど汎用的なつくりにはなっていないようです(実装サンプルとしては参考になる)。これらを使う場合には、十分な検証を行った上で、実運用に耐えうるかどうか慎重に検討する必要があります。

Casbinのライセンス

Casbinのライセンスは、「Apacheライセンスバージョン2」(Apache License version2)というライセンスに基づいて公開され、営利、非営利を問わず、誰でも自由かつ無償で利用・改変・再配布できるようになっています。

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Open Policy Agent

    Open Policy Agent

    オープンポリシーエージェント。元々Styraで開発されたオープンソースの汎用的なポリシーエンジンです。

  • Keycloak
    サポート対象

    Keycloak

    キークローク。Red Hat社が提供する最小限の認証機能からソーシャルなどので他サービスへの高機能な認証にも対応する統合認証プラットフォームです。

  • Go

    Go

    Goは2009年にGoogle社からオープンソースとして発表されたプログラム言語です。

オープンソースに関する様々な課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。