Casbin & Docker

Casbinというアクセス制御のライブラリを試してみました。認証・認可をKeycloakというサービスを使うのではなく、プログラミングライブラリという形で簡単に実装できるものです。

https://casbin.org/
トップページを見ると、何に使うのか、関連しているプラットホームは、などなど、何となくイメージできそうです。
ここでは下記参考にGo言語で実装してみました。
またdockerによるマルチステージビルドも試した見ました。
(Go versionが古いとエラー。alpineだとNG)

https://future-architect.github.io/articles/20221004a/
https://qiita.com/come2ry/items/98b0bb70e29821b52ba0

main.go

model.conf

policy.csv

Dockerfile

ビルド・実行

$ docker build -t casbin .
$ docker run casbin
[Alice data1 read]: true
[Bob data1 write]: false
[Charlie data2 read]: true

特徴的なのは、ポリシー定義とモデル定義が外部ファイルで外出しにしている点です。このサンプルはシンプルですがやれることが集約されています。説明がなくとも上記コードと出力から何ができるのかよく理解できます。実際はサービスに組み込んだり、定義はDBに置くことが予想されます。

今回のテストはマルチステージビルドもポイントなのですが、Go言語は実行ファイルに簡単にできるので、ビルドはGoのビルド環境があるイメージの中で、実行はGo言語を含まない軽量のイメージで、ということが可能です。Javaでも同様のことをやりますが、Goの場合VMすらいらないので、この恩恵をより感じます。

$ docker images

REPOSITORY TAG
IMAGE ID CREATED SIZE
casbin latest
5778c8360b39 38 minutes ago 76.7MB

Goはまだ文法がよくかわることがありますので、バージョンきりかえが簡単にできることは、作業の効率化には欠かせません。