ご挨拶
初めまして。ビジネス開発本部に所属している伊藤と申します。今年度からRed Hat社のAnsibleやAnsible Automation Platform(以下、AAPと省略します)を中心とした、インフラ自動化技術の主幹として活動しております。
今回はOpen Policy Agent(以下、OPAと省略します)と呼ばれる外部ポリシーシステムとの連携について調査と簡単な検証を行いましたので、今後もし利用される際にお役に立てられればと思っております。どうぞよろしくお願いいたします。
- ライター:伊藤 明央
- Red Hat社の自動化ツールであるAnsible、及びAnsible Automation Platformなど、インフラ自動化技術の主幹として活動しております。
目次
ポリシーチェック導入の道筋
今回OPAを導入した動機は、将来的にAIOpsで生成AIがPlaybookを作成・実行する場合に、特定の動作をさせないように制御したいという課題がありました。それを解決するために、AAPでサポートされるようになったポリシーチェック機能であるOPAについて、今回調査・検証を行いました。
AAP×OPA概要
AAPバージョン2.5から、ポリシーチェックの連携機能としてOPAがサポートされるようになりました。本記事では以下の図のようなAAPとOPAを連携させるための準備をご紹介します。また、後編記事では実際に連携した動作についてご紹介します。
図1. AAP×OPA 連携概要図
OPAと連携したユースケースとしましては、以下に列挙したようなコントロールが可能となります。
- AAPに渡される外部入力データ(extra_vars)を実行前に検証する
- 未知の入力値をジョブ実行前にチェックし、セキュリティを確保する
- ジョブテンプレート実行時にホスト名を入力し、実際の対象ホスト名と合致することをチェックする
- 想定していないホストで実行されることを防ぐ
- 稼働中サーバーに対してジョブテンプレートの実行時間を制限する
- ポリシーとしてメンテナンス時間のみ実行できるように制限する
- 他作業の影響を受ける作業を禁止する
後日公開の後編記事ではGitHubに公開されているサンプルregoスクリプトを使用し、外部入力データのポリシー制御の動作を、AAPの動作画面と共にご紹介します。
AAPについて
さて、AAPは”Ansible”と含まれている通りRed Hat Ansibleを活用するためのプラットフォームです。以前はAnsible Towerと呼ばれておりましたが、現在はAnsible Automation Platformとなり、2025年10月には最新版となるRed Hat Ansible Automation Platform 2.6が提供されております。
図2. AAP2.6 ダッシュボード
Ansibleは、通常Playbookファイル(yaml言語で書かれたスクリプトファイル)をコマンドラインから起動しタスクを実行しますが、AAPを使用するとWebブラウザ上でPlaybookを管理ができるようになり、1つのPlaybookをジョブテンプレートとして実行できるようになります。
また、AAPではGitHubやGitLabなどのリポジトリを直接参照することが可能で、ワークフロー機能を使って複数のPlaybookの連続実行や承認待ちによる一時停止も可能です。
OPAの仕組みとAAP連携準備
OPAは、regoと呼ばれるスクリプト言語を使用したファイルを読み込み、OPAに入力されたデータを評価しOKかNGを返す仕組みです。
今回はAAPと連携していますが、OPAは他にもDockerやKubernetes(k8s)、Kafka、Terraform等でも同様にポリシーチェックが可能となっております。連携可能なシステム例や具体的な手順等は、参考リンクのOPA公式ドキュメントにあるUse Casesをご覧下さい。
図3. OPA概要図 (https://www.openpolicyagent.org/docsより)
OPAのダウンロードと実行方法
例としてLinuxの場合には以下の手順でOPAが実行可能となります。バイナリファイルはOPAのGitHubリポジトリにて公開されています。
また、WindowsやMacOS(Homebrew等の使用)へインストールも可能です。詳しくは参考リンクにあるOPAドキュメントをご覧下さい。
- GitHubからバイナリをダウンロードします。
> curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_amd64 - ダウンロードした`opa`ファイルに実行権限を付与します。
> chmod 755 ./opa - opaファイルをパスが通ったディレクトリへ移動します(以下はコマンド例)。
> cp ./opa /usr/local/bin
OPAのサーバー起動
実行可能となったOPAをサーバーモードで起動することで、外部からのデータ入力と応答が可能となります。
※詳細な手順は後編記事にてご紹介します
AAPの設定
OPAの準備が整いましたら、AAPの管理者権限の設定でOPAサーバーを以下の手順で設定します。詳しくはAAP公式ドキュメントの7.1. ポリシー適用設定に記載されています。
- AAPへ管理者権限でログインします。
- 左サイドバーから"設定"→"Automation Execution"→"Policy"を選択します。
図4. AAP Policy設定画面
- 右画面に表示された画面の『編集』を選択します。
- 表示された画面の項目に入力を行います。
図5. AAP Policy編集画面
|
項目名 |
内容 |
|---|---|
|
OPA Server hostname |
OPAホスト名の指定(同サーバーならlocalhost指定も可能)をします |
|
OPA server port |
デフォルトでは8181/tcpです |
|
OPA authentication type |
OPA認証に必要なToken等の認証設定が可能です |
|
OPA custom authentication headers |
OPA認証のリクエストヘッダーに追加するカスタムヘッダーを入力します |
|
OPA request timeout |
デフォルト値は1.5sとなります |
|
OPA request retry count |
デフォルト値は2回となっています |
|
オプション: |
SSL接続(https)の場合はチェックを入れます |
AAP×OPA連携設定の詳細
ここからは、AAPとOPAを連携する際に必要となる情報をまとめました。
AAPでポリシーが適用される『タイミング』
AAPとOPAの連携時には、以下の機能に対して設定することが可能となっています。
- 組織
- ジョブテンプレート
- インベントリー
いずれの設定でもジョブテンプレートが実行される際に動作します。設定方法は、AAPの各設定ページに"Policy enforcement"欄があり、適用するOPAポリシーを入力することで設定できます。
図6. ジョブテンプレート作成画面
この"Policy enforcement"への入力内容は、項目のヘルプでも同様に表示されますが”{package}/{rule}”と入力する必要があります。このpackageやruleはregoファイルに記述される内容となります。
例として、後編で使用するサンプルでは”aap_policy_examples/extra_vars_allowlist”となります。
AAPからOPAに渡される『データ』
AAPでPlaybookが実行される時にOPAへ渡されるデータは、AAP公式ドキュメントの7.4 ポリシー適用の入力と出力にて公開されております。
一覧をご覧頂くと気付かれるかもしれませんが、ジョブの実行に関するデータ(ジョブテンプレートのIDや実行者の情報、実行開始の時間など)は入力データとなる一方、実行されるPlaybookの内容自体はOPAに渡されません。しかし、それでもPlaybook実行時に干渉できるポリシーチェックの方法をご紹介します。
ポリシーチェックのサンプルスクリプト紹介
AAPで使用可能なサンプルのregoスクリプトは、ansible/example-opa-policy-for-aapで公開されております。このリポジトリでは、AAPから渡されるextra_varsの内容を検証するためのregoスクリプトが含まれています。
例えば、特定のキーのみを許可するポリシーや、値の妥当性をチェックするポリシーなど、実運用に役立つサンプルが揃っています。これらのスクリプトを活用することで、ジョブ実行前に不正な入力値を排除し、セキュリティを強化できます。詳細は後編記事にて紹介いたします。
一部の制御に関してはAAPやジョブテンプレート自身で検証可能な内容もありますが、『ジョブテンプレートが実行される前に』OPAを経由して値を検証できる事が重要となります。OPAと連携することによって、不正な値や想定外の入力値でジョブテンプレートの実行を中止させることが可能となります。
次回予告
次回は、実際にサンプルのregoファイルを使用したポリシーチェックで、どのような動作が行われるのかご覧いただければと思います。
それでは、また。
参考
- OPA 公式ドキュメント
https://www.openpolicyagent.org/docs/latest/ - AAP 公式ドキュメント(7. ポリシー適用の実装)https://docs.redhat.com/ja/documentation/red_hat_ansible_automation_platform/2.6/html/configuring_automation_execution/controller-pac
- サンプルスクリプトのレポジトリ
https://github.com/ansible/example-opa-policy-for-aap - rego のチュートリアル
https://www.openpolicyagent.org/docs/latest/policy-language/
※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。




