ページの先頭です

ページ内を移動するためのリンク
本文へ (c)

ここから本文です。

【前編】Red Hat Ansible Automation Platform(AAP)×Open Policy Agent(OPA)の連携方法と実践

ご挨拶

初めまして。ビジネス開発本部に所属している伊藤と申します。今年度から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回となっています

オプション:
Use SSL for OPA connection

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ファイルを使用したポリシーチェックで、どのような動作が行われるのかご覧いただければと思います。
それでは、また。

参考

※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。

RECOMMEND