この記事では Open Policy Agent (OPA) の説明は割愛しています。
概要
OPAL (Open-Policy Administration Layer) は、データストアに保存された Data と Policy の変更を検知して、それらをリアルタイムで OPA に同期する OSS 1 で、OPA に設定する Data/Policy の管理の難しさを解決するために開発されました。GitHub リポジトリは https://github.com/permitio/opal で、公式サイトは https://www.opal.ac です。
アーキテクチャ
OPAL は OPAL Server と OPAL Client から構成されています。なお、上図の青線は Data がやりとりされる流れを、紫線は Policy がやりとりされる流れを示しています。
OPAL Server
OPAL Server は OPAL Client 向けに、設定を取得するための REST API と Data/Policy の更新を受け取る Pub/Sub チャネルを作成するための WebSocket エンドポイントを提供します 2 。OPAL Server は Git リポジトリ (他に S3 や SVN もサポート) を追跡して、Data/Policy の変更を検知したら Pub/Sub チャネルを介して OPAL Client に差分をプッシュする役割を担っています。
OPAL Server をスケールアウトさせたい場合は、Redis、Kafka PostgreSQL Listen/Notify など、バックボーン Pub/Sub をバックエンドに用意して、各 OPAL Server でデータを同期させる必要があります 3 。このようにすることで、ある OPAL Server に接続している OPAL Client は、他の OPAL Server で発生した更新の通知も受け取ることが可能になります。
OPAL Client
OPA に同居する形でデプロイされて、OPAL Server や他のデータストアで管理されている最新の Data/Policy を OPA に反映する役割を担っています。OPAL 導入時には、サービスのアプリケーションに OPA と OPAL Client が Sidecar として配置されるイメージです。
OPAL Server 以外に設定可能なデータソースとして、HTTP API、PostgreSQL、Salesforce、Stripe などがサポートされています。この外部のデータソースから Data を取得する部分は拡張可能な仕様になっています。
さいごに
この記事では、OPAL の概要やアーキテクチャを簡単にまとめました。OPAL を導入することで OPA の Data/Policy を管理しやすくなるので、OPA 運用で課題を抱えている方は、導入を検討してみても良いでしょう。
備考
OPAL は Python 3 で実装されていて Python パッケージとして公開されています。
Python パッケージの他にも Docker イメージや Helm チャートも公開されています。
- https://hub.docker.com/r/permitio/opal-server
- https://hub.docker.com/r/permitio/opal-client
- https://hub.docker.com/r/permitio/opal-client-standalone
- https://github.com/permitio/opal-helm-chart
-
Permit.io 社 (旧 Authorizon 社) から2021年4月に OSS として公開されました, https://twitter.com/opal_ac/status/1382347228250058760 ↩
-
API フレームワークとして FastAPI と FastAPI Websocket Pub/Sub が採用されています ↩
-
OPAL Server のデータ同期は Broadcaster で実装されています ↩