【おーぴーえー(おーぷんぽりしーえーじぇんと)】
OPA(Open Policy Agent) とは?
最終更新:
💡 ルールに照らして判断し、実行側に結果を返す
Regoで記述したポリシーと入力データを照合し、判断結果を返すオープンソースの汎用ポリシーエンジン。判断をアプリから分離できる。結果に従ってアクセスを止めるなどの実行は、連携先が受け持つ。
📌 このページのポイント
- Regoという宣言型言語でポリシーを記述する
- 入力や参照データを評価し、許可・拒否や構造化した結果を返す
- 判断と強制を分け、アプリやゲートウェイなどと連携する
- ポリシーを独立して更新できるが、入力や連携方式の変更は別途対応が必要
OPAって何をしてくれるの?
アプリからユーザーや操作などの情報を受け取り、ポリシーとデータを評価して結果を返すよ。「このアクセスを許可するか」も一例。答えはYES/NOだけでなく、違反理由の一覧などの構造化データにもできるんだ。
OPAがアクセスを止めてくれるの?
OPAが主に担うのは判断だよ。結果を受け取ってアクセスを止めるのは、アプリやゲートウェイなどの実行側。OPAを用意するだけで、全ての通信や操作が自動的に制限されるわけではないんだ。
Regoってどんな言語?
満たすべき条件や関係を宣言的に書く言語だよ。たとえば「この役割のユーザーなら、この操作を許可する」といったルールを表す。判断に必要な入力や参照データも、アプリとの間で決める必要があるんだ。
Kubernetesではどう使うの?
Admission Controlと連携し、リソースの作成や更新などを受け入れてよいか確認するよ。たとえば指定した保管先のコンテナイメージだけを許可するルールがある。OPAとKubernetesの連携を提供するGatekeeperというプロジェクトもあるんだ。
ポリシーを変えるときは、アプリを一切変えなくていい?
既存の入力と連携の範囲なら、ポリシーだけで変えられることがあるよ。新しい情報が必要ならアプリ側の変更も考える。また、管理をまとめることと、判定用のOPAを1台に集めることは別。各サービスの近くへ配置し、更新を配布する構成も取れるんだ。
まとめ:ざっくりこれだけ覚えればOK!
「OPA」って出てきたら「ルールとデータを照らして判断結果を返すエンジン」と思えばだいたいOK!
📖 おまけ:英語の意味
「Open Policy Agent」 = オープンなポリシー代理人
💬 "Agent"はここでは「代理人・仲介者」という意味で、ポリシーの判断を代わりにやってくれるエンジンというイメージだよ