Open Policy Agent Deep Dive
KubeCon + CloudNativeCon Europe 2020 2日目 のセッションである Open Policy Agent Deep Dive
についてです。
Open Policy Agent (OPA) について以下のような内容でした。
- 前半: 基本的な機能の説明から実際にどのようにポリシー制御を行っているか
- 後半: OPA とその周辺ツールの新機能/将来的に入る機能の紹介
OPA Overview / API Authorization Deep Dive
セッション前半は OPA の基本的な説明と、ユースケースの一つとして Service Mesh の入り口で OPA によるポリシー制御を行う例の説明でした。
当項目については特に目新しいことはなかったため省略します。
New and Feture Feature
セッション後半は OPA の新しい機能についてでした。
Web Assembly Update
- Rego を以下のコマンドで WASM にコンパイルすることが出来るようになったそうです。
opa build policy.rego -e example/allow -t wasm
Benchmaking Tool
- ポリシーの評価にかかった時間を測るベンチマークツールが以下のコマンドで実行できるようになったそうです。
# benchmark a single query opa bench --data rbac.rego 'data.rbac.allow' # benchmark unit tests opa test -v --bench ./rbac.rego ./rbac_test.rego
- 出力は以下 (スライドより)
Decision log mutation
- ポリシーの値を既存の構造化されたログファイルから参照することが可能になったそうです。
- 例えば、ポリシーにはかけないセンシティブなデータのバリデーションに有用
Additional features
他にも以下の機能追加/改善があったそうです。
- Partial Evaluation enhancements
- (聞き取れなかったです:bow:)
- Enhanced subcommand: opa build
- ビルド時に最適化オプションを渡せるようになったり、WASMコンパイル出来るようになったり
- New Parser for Rego
- 実行時間が 1/100
- Optimization for Group-by idioms
- O(n2) → O(n) な文法で書けるようになった
Upcoming features
- Digital signatures for bundle downloads
- OPA で Bundle の署名と検証を行う
- Always-on Tracing for Explanations
- Debbug で利用可能な trace を常時有効化
- IntelliJ plugin for OPA
- MongoDB integration
- MongoDB の query をポリシー制御
Gatekeeper Update
- New Features
- Pre-built policies
- 自前で Rego でポリシーを書かなくても、元からいろんなポリシーが提供されるように
Welcome Conftest as a new OPA project!
現在以下が Conftest に対応
- Inputs (ポリシー制御対象)
- Outputs (Conftest の出力)
- Integrations (CI ツールで Conftest の利用をサポート)
- Circle CI
- Tekton
- GitHub Actions
感想
今回の発表を聞いて、利用者が OPA に求めるものが安定性も勿論そうですが 速度を求めているようだったので、それほど広く普及しているのかなと個人的に感じました。
自分は業務にて、過去に Kubernetes マニフェストの適用時のバリデーションをどのように行うか検討し、そのときに OPA Gatekeeper が挙がりました。Rego の読み書きが慣れないことや当時の Gatekeeper が一部不安定だったことから、結果としてAdmission Webhook を用いた自前バリデーション API サーバの実装を行いました。 ただ、自前 API サーバのポリシー管理に辛さを感じたら *2 負債化する前に Gatekeeper に移行できるよう、引き続き追っていこうと思います。
それと、自分は今まで OPA を「おーぴーえー」と言っていましたが、正式な呼び方は「おーぱ」だと初めて知りました *3
*1:https://kubernetes.io/docs/concepts/policy/pod-security-policy/
*2:conftest を使いたいのでそのうちすぐ移行したくなるかも・・
*3:https://www.openpolicyagent.org/docs/latest/ より OPA, pronounced “oh-pa”