KubeCon + CloudNativeCon Europe 2019の「Deep Dive: Open Policy Agent」を視聴して
しばらくOPA(Open Policy Agent)の講演を観ることができていなかったので、KubeCon CloudNativeCon Europe 2019の講演をYoutubeで視聴しました。
構成
OPA: Unified Policy Enforcement Across the Stack
OPAは様々な場面においてPolicyを適用できると述べています。以下はそれぞれ紹介されている場面と、関連するサービスや技術スタックです。
- Admission Control
- e.g. Kubernetes
- Container Execution, SSH, sudo
- e.g. docker, Linux
- Microservice APIs
- e.g. Istio, Linkerd, spring, Kong, envoy
- Risk Management
- e.g. Terraform, Forceti Security
- Data Protection & Data Filtering
- e.g. ceph, kafka, MinIO, SQLite, elastic
OPA: General-purpose Policy Engine
OPAの概要について述べています。OPAの概要については僕も記事を書いてますのでざっくりどういうものか知りたい方はぜひ!
講演の中では以下の話が特に重要だと感じます。
Decouple "Policy Decision Making" from "Policy Enforcement"
APIを実装する場合、何も考えずに実装していくとPolicyに関わる部分も自然とビジネスロジックの中に書いてしまったり、データベースに情報を取得しにいく部分で書いてしまいがちです。Policyによる判断(Decision)をする場所と、判断に基づいた処理(Enforcement)を行う場所を分ける(Decouple)ということです。
Enforcement is the Service's job. Making the decision is OPA's job.
判断(Decision)はOPAがして、判断に基づいた処理(Enforcement)はサービス側で、というマインドが大事になりそうですね!
Community Highlights: Chef Automate IAM
Chef Automate IAMのユースケースを紹介しています。Chef Automateは内部的にOPAをPolicy Engineとして使っていて、OPAをライブラリとして使う例としてもとても勉強になるOSSです。また「Well-documented architecture」と述べられているように、以下のドキュメントがとてもわかりやすくOPAを使った認可の仕組みを説明してくれています。
中でも、「Introspection (Who Can Do What?)」については、フロントエンドにどのように「誰」が「何をできる」かを伝えられるか、というフローについても詳しく説明されていて非常に勉強になります。
play.openpolicyagent.org
Rego Playgroundの紹介がされました。
サクッとPolicyを試すのに便利ですし、書いたPolicyをシェアできるのも便利です!OPAのSlack上でもコミュニケーション手段としてよく使われています。
Use Case: Application & End-user Authorization
認可に対するよくある疑問点とOPA側からの回答が述べられていました。その回答には今OPAが何をできるか、と今後どうしていこうとしているかについて述べられています。
以下については僕も今後かなり期待したいところです。
How do you delegate control to your end-users?
「OPAでIAMのようなことをしたい」という質問はよくSlackでも見かけます。これはエンドユーザーがPolicyの作成や管理ができるユースケースになります。Chef Automate IAMがリファレンスとしてよく紹介されるのですが、今後このようなモデルをOPAから公式に提供できるようにしてくれるそうです。
どのような仕組みで提供されるのか楽しみですね!
How do you leverage context, e.g. HR DB?
大規模なアプリケーションであればOPAに、判断に必要なデータ(context)を全部(インメモリで)あらかじめ読み込ませておくのは現実的じゃないです。今後「Data-fetching」が判断(Decision)のタイミングで行えるような機能が増える予定のようです。(XACMLで言うPIPの機能が強化されるイメージだと僕は捉えています)
現状では僕の知っている限りはOPAをライブラリとして使って、自前のサービスを作るか、OPAのビルトインであるhttp.sendを使って外部にAPIリクエストを行う方法しか無いはずです。この機能が実現するとOPAを使うハードルがぐっと下がりそうな気がします。
How do you render UIs based on policy?
フロントエンドでPolicyに基づいてボタンを表示するかしないかを判断できるようにするためにWASM(WebAssembly)が使えるようになるようです。
これが実現すると、上で述べたChef Automate IAMで提供されているようなIntrospection APIを作る必要が無くなるのではと思います。
まとめ
- 「Deep Dive: Open Policy Agent」を視聴した
- OPAをがっつり使っている例としてChef Automate IAMがかなり勉強になる
- Policyの判断のタイミングで必要なデータをさらに取得する機能は今後に期待
- WASMが実現すれば、フロントエンドのJSと連携してSPAでもPolicyを適用できそう
Slack
OPAの最新情報や質問は今の所Slackが一番収集しやすいと思います!特に「general」と「openpolicyagent」のチャンネルがおすすめです。
stackoverflow
これから徐々にQAはstackoverflowに増えていくはずなので、以下のタグをチェックしておくとナレッジがたまりそうです。
おまけ
公式ドキュメントの検索がしやすくなるようにAlgoliaのdocsearchが採用されそうです。ドキュメントの検索が無いというのがOPAのハードルを上げている一つの要因になっている気もするので、これはぜひとも早めにマージにもっていきたいです!