Open3

casbin で遊ぶ

yoshinoyoshino

Casbin とは?

https://casbin.org/ja/docs/overview
https://future-architect.github.io/articles/20221004a/

  • オープンソースのアクセス制御ライブラリ
  • アクセス制御モデルはPERMメタモデル(Policy、Effect、Request、Matchers)に基づいて設定ファイルに抽象化される
  • ポリシーはメモリ、ファイル、データベース(MySQL、MongoDB、Redisなど)など様々な場所に保存できる
  • Go 以外にも Java、Python などに対応

アクセス制御とは?

  • 特定のリソースに対して、誰がどのような操作を行えるかを制御すること
  • RBAC と ABAC

  • RBAC - Role Based Access Control
    • ロールとは部署、場所、組織内の階級、職務など
    • Pros: シンプル
    • Cons: ロールが爆発する
  • ABAC - Attribute Based Access Control
    • 属性とはユーザーのロール、ログイン場所、リソースのオーナーなど
    • Pros: 多くの変数を定義でき、高度な制御を確保できる
    • Cons: コストがかかる
  • このほか PBAC というのもあるらしい
    https://www.okta.com/jp/identity-101/role-based-access-control-vs-attribute-based-access-control/
yoshinoyoshino

PERMメタモデル

https://casbin.org/docs/how-it-works

  • Policy, Effect, Request, Matchers

Request

  • 定義はr={sub,obj,act}で、誰が、何を、どうする、の形になっている

Policy

  • アクセス戦略のモデルを定義する。権限のリスト
  • p={sub, obj, act} or p={sub, obj, act, eft}
    • eft(=policy result)が定義されていない場合、一致するポリシー結果はデフォルトで許可される(allowになる)

Matcher

  • RequestとPolicyのマッチングルールを定義する
  • 例えばm = r.sub == p.sub && r.act == p.act && r.obj == p.objというマッチングルールは、リクエストパラメータ(エンティティ、リソース、およびメソッド)がポリシーで見つかったものと等しい場合、ポリシー結果(p.ft)が返されることを意味する。

Effect

  • 複数Matchersのマッチング結果を論理的に評価する
  • 例:`e = some(where(p.eft == allow)) マッチング戦略の結果、p.ftが(いくつかの)allowの結果を持つ場合、真になる。
  • 例:e = some(where (p.eft == allow)) && !some(where (p.eft == deny)) allowの結果を持つ戦略が1つ以上あり、denyの結果を持つ戦略が1つもない場合、真になる。
yoshinoyoshino
  • Casbinで最もシンプルなモデルはACL(Access Control List)。
# Request definition
[request_definition]
r = sub, obj, act

# Policy definition
[policy_definition]
p = sub, obj, act

# Policy effect
[policy_effect]
e = some(where (p.eft == allow))

# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

ポリシーの例

p, alice, data1, read
p, bob, data2, write

これは「アリスはdata1を読める」「ボブはdata2を書き込みできる」という意味。