3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI にどこまで任せるか、を5段階で考える — Ansible Automation Platform の設定確認は「レベル1」

3
Last updated at Posted at 2026-08-30

はじめに

AIを業務で使用する話をすると、議論が合わないことがあります。

片方は「AIが自律的に判断して直してくれる世界」を語っていて、もう片方は「AIに調べてもらって最後は自分で確認する」話をしている。どちらも「AIを使う」なのですが、人がどれだけ関与するか が違う。
同じ言葉で違う話をしているのでかみ合いません。

この記事は2部構成です。自身の考えをもとにAIで整理、補足してもらった内容で書いています。

  • 前半:AI活用を「人の関与度」で5段階に整理してみます
  • 後半:Red Hat公式のMCPサーバーを使って、AAP上のF5 BIG-IP証明書更新ワークフローの設定を実際に確認します。5つの質問だけで設定ドリフトが見つかった実際の画面付きで、「レベル1=人のための補助ツール」の実務効果を見ていきます

動画

本記事の動画を作成しました。理解の一助にご参照ください。


AI活用の「人の関与度」5段階

なぜ「段階」で考える必要があるのか

自動運転にレベル0〜5があるのは、「自動運転できる/できない」の二択では現実を説明できないからです。
ハンドルは人が握るがブレーキは車が踏む、高速道路だけは車に任せる——実際には無数の中間があります。

AI活用もまったく同じです。「AIを導入した/していない」の二択で語ると重要な問いが抜け落ちます。

その作業で、最終的に責任を持って判断するのは誰か。

この問いを軸に5段階に整理してみます。

5段階の整理

Lv 呼び方 AIの役割 実行するのは 人の位置 インフラ運用での例
L0 手動 なし 全工程 ドキュメントを読み、GUI/CLIを自分で叩く
L1 👈 本記事 参照補助 調べる・要約する 全判断 AIにAAPの現在の設定を聞き、自分で確認して直す
L2 提案・下書き 案を作る (承認後) 承認者 AIがPlaybookや変更手順を書き、人がレビューして実行
L3 監視付き実行 決めて実行する AI(範囲は人が事前定義) 監視・停止 承認ゲート付きでAIがジョブを起動、人はログで追う
L4 自律 決めて実行して完了報告 AI 事後確認のみ 検知→修復→報告を人手なしで回す自動修復ループ

「AIがAIを使う」という話題でよく想像されるのはL4です。そして話題になりやすいのもL4です。
しかしながら現場の大部分の仕事は今のところL1とL2にあります。 そしてそれは、後れを取っているという意味ではありません。

この記事で扱うのはL1です。 エージェントが自律的に本番を直す話ではありません。読み取り専用のAPIトークンでAIに設定を聞く内容です。
手元で始められて、失敗しても何も壊れない範囲 の話をします。

レベルは「製品の属性」ではなく「作業の属性」

ここがいちばん誤解されやすいところです。

L4対応のすごいツールを買ってきても、現場が自動的にL4になるわけではありません。逆に、同じツールでも作業単位でレベルは変わります

後半で扱うAAPのMCPサーバーがまさにそうで、同じサーバーが

  • 設定を読むだけに使えばL1(人の補助ツール)
  • ジョブの起動を許可すればL3(AIが本番環境に触る)

になります。ツールが決めるのではなく、どの権限を渡すかを人が決めている

だからレベル選定は、「うちはどのレベルを目指すか」ではなく、「この作業はどのレベルでやるか」 という粒度で考えるべきものです。

レベルを決める判断軸:可逆性

では作業ごとに何を基準に決めるか。私は 可逆性(元に戻せるか) が最も実用的な軸だと思っています。

読み取り 書き込み・実行
間違えたときのコスト AIの答えが違っても、人が気づけば終わり 本番環境が壊れる。ロールバックが要る
検証のしやすさ 元データと突き合わせればすぐ分かる 実行してからでは遅い
適したレベル L1〜L2 L2〜L3(承認ゲート必須)

AIの出力には、依然としてハルシネーションのリスクがあります。
ここで大事なのは「だからAIを使わない」ではなく、「間違いが検出できて、かつ安く済む場所から使う」 という発想です。

読み取り作業は、この条件を完璧に満たします。
AIが「ジョブテンプレートは37個です」と答えて、それが違っていても、画面を見れば5秒で分かるし、何も壊れません。(AIへの信頼度がちょっと下がるかもしれません)

もうひとつの軸:そのAI、見えていますか

ここまでは「人がどれだけ関与するか」の軸で話してきました。
これと直交するもう一本の軸があります。そのAIが使う人から見えているかどうか です。

この記事のように自分でMCPサーバーを設定してAIに質問しているとき、AIは完全に見えています。何を聞いて、何が返ってきて、どのツールが呼ばれたか、全部画面に出ている。

しかし、世の中で動いているAIは、そうではないことがあります。

  • メールのスパム判定、優先度の並べ替え
  • 監視ツールの「アラートノイズ削減」機能
  • クラウドのオートスケーリングや異常検知
  • ストレージの自動階層化、ジョブスケジューラの最適化
  • 問い合わせフォームの一次回答
  • 書類選考、与信判断

これらの多くは、「AIを導入する」という明確な意思決定を経ていないことがあります。
ある日ベンダーのアップデートで入ってきて、リリースノートの片隅に一行書いてある。
使う側に自覚はありません。

2つの軸を組み合わせると、こうなります。

見えている 見えていない
人が判断(L1〜L2) この記事の領域。いちばん安全 気づかないうちにAIの要約を鵜呑みにしている
AIが実行(L3〜L4) 承認ゲートと監査ログで追える リスクが高い。何が起きたか追跡しにくい

「AIがAIを使う」世界が怖いとしたら、それは自律だからではなく、自律かつ見えないから です。
逆に言えば、見えてさえいれば(制御できるものであれば)、L3やL4もそれほど恐ろしいものではありません。

自分が「見えないAI」を作る側になる

AAPのactivity streamに残るのは、「そのトークンで実行された」という記録だけです。
人が画面から押したのか、AIがMCP経由で叩いたのかは、ログを見ても区別がつきません。

今日は自分ひとりで使っているから分かります。
では半年後、そのトークンがチームの共有アカウントになっていて、誰かがAIエージェントに渡していたら?
「あのジョブ、誰が起動したの?」に答えられない状態 が、いつのまにか完成しています。

対策はL1の段階でやっておくべきものです。

  • AI用のサービスアカウントを、人間用と分ける
  • 名前で分かるようにするsvc-ai-readonly のように)
  • そうすればログを見た瞬間に「これはAI経由だ」と判別できる

L3になってからでは間に合わないことがあります。
まだ読み取りしかしていない今のうちに、AIの足跡が残る形にしておく。これは権限の話ではなく、後から説明できる状態を作る という話です。

見えないAIそのものが悪いわけではありません。スパムフィルタにいちいち承認を求められても困ります。
ただ、「これは見えないままでいいAIか」を一度は問う
その判断を人がしている限り、見えないAIも人の管理下にあります。問わないまま増えていくのがいちばん避けたい状態です。

L1をあなどらない

L1は「AIの入り口」であって「AIの練習」ではありません。L1にしかない価値があります。

  • 文脈をまたいで探せる:「このジョブテンプレートが使っているインベントリのホスト数と、割り当てられている認証情報の種類を教えて」——GUIなら3画面、APIなら3リクエスト。これが1回の質問で終わる
  • 答えの検証コストが低い:出典(どのAPIを叩いたか)が示されるので、疑わしければ自分で確認できる
  • 監査の観点で説明しやすい:読み取りしかしていないので、「AIが本番に何をしたか」という説明責任が発生しない

L1で運用に慣れ、AIの答えの精度と癖が体感的に分かってから、L2、L3に上げていく。この順序を飛ばすと、事故ったときに「AIのせい」なのか「渡した権限の設計ミス」なのかすら切り分けられません。


AAP MCPサーバーで設定内容を確認する

ここからは、L1の具体例を見ていきます。

MCPとは(30秒で)

Model Context Protocol(MCP)は、AIツールと外部システムをつなぐためのオープンな標準規格です。従来はAIごと・サービスごとに独自のAPIラッパーを書く必要がありましたが、MCPサーバーを1つ立てれば、Claude / Cursor / 自作エージェントなど、MCP対応のクライアントすべてから同じように使えます。

AAPにとって重要なのは、MCPサーバーがAAPのAPIの前に立つのであって、AAPを迂回するわけではないという点です。認証もRBACもAAP側の仕組みがそのまま効きます。

AAP MCPサーバーの構成

Red Hatは AAP 2.6.4 からテクノロジープレビューとして公式のMCPサーバーを提供しています。AAP 2.7 では Technology Preview の一覧から外れており、正式機能として扱われているようです(コンテナ版・OpenShift Operator版の両方でデプロイ可能)。

提供される6つのツールセット:

ツールセット できること
job_management ジョブテンプレートの一覧、ジョブの起動、実行状況の確認
inventory_management インベントリ・ホスト・グループ・ホストファクトの照会
system_monitoring ログ取得、失敗調査、ヘルスチェック、ping、activity stream
user_management ユーザー・チーム・組織・ロールの管理
security_compliance 認証情報の管理(シークレットは露出させない)
platform_configuration プラットフォーム構成の確認・調整

出典:https://www.redhat.com/en/blog/it-automation-agentic-ai-introducing-mcp-server-red-hat-ansible-automation-platform

内部的には Controller / Gateway / Galaxy / EDA の各APIのOpenAPI仕様からツールが生成され、controller.jobs_read のような {service}.{operation} 形式の名前を持ちます。

主な設定項目:

変数 意味 デフォルト
BASE_URL AAPのURL
BEARER_TOKEN_OAUTH2_AUTHENTICATION 認証トークン
MCP_PORT 待ち受けポート 3000(AAP同梱時は8448)
ALLOW_WRITE_OPERATIONS 書き込み操作の許可 false
ENABLE_METRICS Prometheusメトリクス

出典:https://github.com/ansible/aap-mcp-server
(ポート8448はAAP同梱デプロイ時の値:https://techbeatly.com/claude-code-ansible-automation-platform-mcp-server/

今回のユースケースでは ALLOW_WRITE_OPERATIONS は false のままにします。 これがL1の技術的な担保です。

セットアップ

1. トークンの発行

AAPの Access Management > Users から API トークンを発行します。
ここで スコープを Read に絞る ことで読み取り専用操作のみの権限となります。

MCPサーバー側の ALLOW_WRITE_OPERATIONS=false と、トークン側の Read スコープ。
二重に読み取り専用を担保 します。片方の設定ミスでもう片方が効く、という多層防御の考え方です。

2. MCPクライアントへの登録

今回のクライアントは IBM Bob です。Bobの場合、MCPサーバーの定義は mcp.json に書きます。

  • グローバル設定:~/.bob/mcp.json(全ワークスペース共通)
  • プロジェクト設定:<プロジェクトルート>/.bob/mcp.json(チームで共有可能)

Bobのパネルから 設定アイコン → MCP タブ → 「Edit Global MCP」でも編集できます。

出典:https://bob.ibm.com/docs/ide/configuration/mcp/mcp-in-bob

AAP MCPサーバーはHTTPで待ち受けるので、streamable-http で登録します。

{
  "mcpServers": {
    "aap-mcp-server": {
      "type": "streamable-http",
      "url": "https://<aap-host>:8448/mcp",
      "headers": {
        "Authorization": "Bearer <read-only-token>"
      },
      "disabled": false
    }
  }
}

/mcp は全ツールセットをまとめて公開するエンドポイントです。用途が決まっているならツールセット単位で登録するほうが軽くなります。

{
  "mcpServers": {
    "aap-job-mgmt": {
      "type": "streamable-http",
      "url": "https://<aap-host>:8448/job_management/mcp",
      "headers": { "Authorization": "Bearer <read-only-token>" }
    },
    "aap-inventory": {
      "type": "streamable-http",
      "url": "https://<aap-host>:8448/inventory_management/mcp",
      "headers": { "Authorization": "Bearer <read-only-token>" }
    }
  }
}

ツールセットを絞るのはトークン消費の観点でも効きます。6つ全部つなぐと、ツール定義だけでコンテキストをかなり食います。

なお、MCPクライアントはBobに限りません。MCPは標準規格なので、Claude / Cursor / 自作エージェントなど、対応クライアントであれば同じMCPサーバーをそのまま使えます。設定の書き方が違うだけです。

セットアップの詳細手順について
MCPサーバーをローカル(stdio接続)で起動する方法や、aap-mcp.yaml の各パラメータの設定例、IBM Bobとの接続確認手順については、以前の記事に詳しくまとめています。本記事ではRead専用トークンを使用していますが、前回記事では検証目的でWrite権限を使用しています。
IBM Bob × MCP連携の実践:Ansible Automation Platformを日本語で操作

3. alwaysAllow ——ここがレベルの分かれ目

Bobの mcp.json には alwaysAllow というキーがあります。ここに書いたツールは、確認プロンプトなしで自動実行されます。

"alwaysAllow": ["controller.jobs_read", "controller.hosts_list"]

前半の話が、ここで設定ファイルの一行として現れます。

  • alwaysAllow何も書かない → ツールを呼ぶたびに人が確認する(厳密なL1)
  • 読み取り系だけ書く → 調査はサクサク進み、それ以外は人が止める(実用的なL1)
  • 書き込み系まで書く → AIが確認なしに本番を触る(L3)

今回は読み取り専用トークンなので、読み取り系を alwaysAllow に入れています。毎回確認を押していては調査になりません。ですが、書き込みトークンに切り替える日が来たら、この配列を必ず見直す。ここを忘れたまま権限だけ上げてしまうと、意図しない動作につながりやすくなります。

レベルは、思想ではなくJSONの1行で決まります。

4. 自己署名証明書の場合

検証環境で自己署名証明書を使っているなら、MCPサーバー側の aap-mcp.yaml に以下を設定します。

ignore-certificate-errors: true

検証環境限定の設定です。 本番では正規の証明書を使ってください。

実際にやってみる:BIG-IP証明書更新ワークフローの棚卸し

ここからは実際の画面です。題材は、F5 BIG-IPのSSL証明書を自動更新しているワークフロー。 「そういえばこれ、どういう設定にしたんだっけ?」 という、運用でいちばん頻繁に発生する問いから始めます。

半年前に自分で作ったものでも、記憶は曖昧です。GUIを開いて確認していくのが従来のやり方ですが、これをAIに聞いてみます。

ステップ1:どのテンプレートが本番なのか

私:bigip 証明書発行のワークフロージョブ名を教えて

1.png

いきなり収穫がありました。同じ名前のワークフローが2つある

ID 名前 状態
#322 0_BIG-IP_証明書更新ワークフロー @ 18:02:18 実際に使われているメイン。手動実行のみ。最終実行 2026-06-16
#306 0_BIG-IP_証明書更新ワークフロー 元テンプレート。次回スケジュール 2026-09-20 00:30 UTC あり

しかもAIは実行履歴まで突き合わせて、 「実際のジョブは全て #322 で実行されている」「#306 はスケジュールが仕込まれているオリジナル版で、#322 は extra_vars: "target_hosts: bigip" が追加されたコピー版」 という関係まで整理してくれました。

これは見落としがちですが、注意が必要な状況です。 手で動かしているのは #322、スケジュールで動くのは #306。 片方にだけ入っている extra_vars が、スケジュール実行時には効かない。設定ドリフトそのものです。

GUIで気づけるかというと——ワークフロー一覧を開いて、名前が似た2つに気づいて、それぞれのスケジュールタブと実行履歴タブを見比べて、ようやく分かる。やろうと思えばできるが、そもそも疑ってみないと始まらない類の確認です。

ステップ2:対象ホストはどこで決まっているのか

私:ジョブテンプレート ID #306 は、対象ホストを教えて

2.png

答えは bigip01 の1台。ですが、そこに至る過程が本題です。

AIはまず Workflow Job Templates Retrieve を叩き、ワークフロー自体には "inventory": null でインベントリが設定されていないことを確認。そこで諦めずに Workflow Jobs Workflow Nodes List を追加で叩いて、各ノードのジョブテンプレートを個別に調べ、「全ノードが bigip01 インベントリを使っているので、対象ホストも bigip01」と結論を出しています。

AAPの設定は階層構造になっていて、上の階層が null なら下の階層を見に行く必要がある。 この「1つ下の階層まで自分で掘る」動きは、ツールを順番に呼べるMCPならではです。1回のAPIコールでは絶対に出てこない答えです。

そして副産物としてワークフロー全体の構成図まで出てきました。

[承認ノード] BIG-IP証明書更新承認
     ↓ 承認後
[1] BIG-IP_証明書発行       (JT #302) → bigip01
     ↓ always
[2] BIG-IP_証明書インポート  (JT #303) → bigip01
     ↓ success        ↓ failure
[3] BIG-IP_ClientSSL割当   [R] BIG-IP_証明書ロールバック (JT #308)
     ↓ always              ↓ always
[4] BIG-IP_証明書検証       [R] BIG-IP_証明書検証(スキップ)
     (JT #305) → bigip01

先頭に承認ノードがあり、失敗時にはロールバック経路が分岐している。前半の言葉で言えば、これは既にL3の設計がされたワークフローです。この点は後半でもう一度触れます。

ステップ3:ホストの接続設定を確認する

私:bigip01 の詳細情報を教えて

3.png

ホスト変数、Ansible Facts、直近のジョブ実行履歴がまとめて返ってきます。

注目したいのは ansible_connection: localAAPコントローラーからSSH接続せず、ローカル実行でBIG-IPのREST APIを叩く構成です。F5の自動化では定番のパターンですが、これをGUIで確認するにはホストの「変数」タブを開く必要があります。

has_active_failures: false も一緒に返ってくるので、「今このホストは健全か」まで1回で分かります。

ステップ4:スケジュールのRRULEを人間の言葉に翻訳させる

ここがいちばん「AIに聞いてよかった」と思った場面です。

私:#306 0_BIG-IP_証明書更新ワークフロー の次の次のスケジュールはある?

4.png

返ってきた生の設定はこれです。

RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU

これ、パッと読めますか。 私は読めません。BYMONTHDAY=19..25BYDAY=SU の組み合わせが何を意味するのか、しばらく考える必要があります。

AIの回答は一行でした。

これは「毎月、19〜25日の範囲にある日曜日」に実行するルールです。

つまり「毎月第4日曜日」を表現するためのイディオムです。さらに次回・次々回・3回目の実行日時をJSTに変換した表まで出してくれました。

日時
次回 2026-09-20(日)09:30 JST
次々回 2026-10-25(日)09:30 JST
3回目 2026-11-22(日)09:30 JST

RRULEの解読とタイムゾーン変換は、人間がやるとミスが出やすく、しかも面倒くさい。 そしてAIは非常に得意。この非対称性こそが、L1を使う理由そのものです。

(余談ですが、GUIのスケジュール画面にも次回実行日は出ます。ただし「なぜその日なのか」は出ません。ルールの意味を言語化してくれるのがありがたいところです)

ステップ5:他のジョブとの競合を確認する

私:近い日時で別のジョブがスケジュールされているかどうか確認して

5.png

システム定義のCleanupジョブ4件を含む全6件を、next_run 昇順で整理してくれました。

そして重要な発見が2つ。

  1. BIG-IP更新(9/20)の9日前(9/11)に、別の「01_証明書更新ワークフロー」(Webサーバー向け)が動く予定がある
  2. ただし対象インベントリが異なる(webservers vs bigip01)ため、同一リソースへの競合はない

さらに、Webサーバー側のインベントリに has_active_failures: true が立っていることまで拾っています。聞いていないことまで気づいて報告してくるのは、横断的にデータを見ているからこその挙動です。

なお、この回答で使われているのは MCP ツールではなく curl でした。

Ran curl -s -k -H "Authorization: Bearer xxxx" "https://xx.xx.xx.xx/api/..."

全スケジュール横断の一覧は登録済みのツールセットではカバーしきれず、AIが自分でAPIを直接叩いています。 MCPは万能の窓口ではなく、足りない部分はシェルで補われる。良し悪しではなく、実際そうなるという話です。ここでは読み取り専用トークンなので問題ありませんが、「AIが何を実行したか」を目視できる状態にしておくことの重要性を示す例でもあります。

5ステップで分かったこと

わずか5つの質問で、ここまで分かりました。

  • 同名ワークフローが2つあり、手動実行版とスケジュール版で extra_vars が食い違っている(要対処)
  • 対象ホストは bigip01 1台、ワークフロー階層ではなく各ノードのJTでインベントリが決まっている
  • 接続方式は ansible_connection: local(REST API経由)
  • スケジュールは「毎月第4日曜 09:30 JST」、次回は 2026-09-20
  • 当日に競合するジョブはなし。ただし9日前にWebサーバー側の証明書更新が走り、そちらのインベントリには障害フラグが立っている

そして、この間AIは何も変更していません。 全部読み取りです。間違っていたら私が気づくし、間違っていても何も壊れない。これがL1です。

従来のやり方との比較

GUI REST API直叩き MCP(L1)
単発の確認 ◎ 速い
横断的な確認 ✕ 画面遷移が多い ○ スクリプトを書けば
条件付き抽出 ○ 書けば
準備コスト なし スクリプト作成 初回のみMCP登録
結果の信頼性 ◎ 画面が真実 要検証
定型・反復作業 △ コスト的に不利

MCPは万能ではありません。 毎日同じ確認をするなら、Playbookやスクリプトを書いたほうが確実で安く済みます。

MCPが強いのは、毎回少しずつ違う、探索的な問い合わせです。

気をつけていること(落とし穴)

1. 答えは必ず裏を取る

ステップ1で「#322 と #306 で extra_vars が食い違っている」という発見がありました。これは対処が必要な指摘ですが、直す前に必ずGUIで両方のテンプレートを開いて確認します。

「ないと言われた」ときはさらに要注意です。AIが「競合するスケジュールはありません」と答えたとき、それが「本当にない」のか「取得できていないだけ」なのかは、回答からは区別がつきません。

AIの答えは"当たりをつけるため"に使い、確定はGUI/APIで行う。 これがL1のルールです。逆に言えば、当たりをつける段階が速くなるだけでも十分に元は取れます。

2. MCPだけでは完結しない

ステップ5で見たとおり、登録したツールセットでカバーできない問い合わせが来ると、AIは curl でAPIを直接叩きにいきます。

これ自体は悪いことではありませんが、「MCPサーバーの権限設定さえ絞れば安全」とは言い切れないことを意味します。AIが使えるのはMCPツールだけではなく、実行環境のシェルも含まれます。読み取り専用トークンしか渡していなければ実害はありませんが、渡すトークンのスコープこそが本当の境界線だという認識は持っておきたいところです。

3. トークン消費

AAPの環境が大きいと、インベントリ一覧だけでもレスポンスが巨大になります。MCPサーバー側には discover エンドポイントによるトークン消費削減の仕組みが用意されているので、大規模環境ではドキュメントを確認しておくとよいと思います。

出典:https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.7/extend-assembly_deploying_ansible_mcp_server

質問側の工夫としては、「全部出して」ではなく「〇〇の条件に合うものだけ、名前とIDだけ」のように、最初から絞るのが効きます。

4. 機密情報の扱い

security_compliance ツールセットは認証情報を扱いますが、シークレットそのものは露出しない設計になっています。とはいえ、AIとの会話ログにインフラ構成が残るという事実は変わりません。組織のポリシー上、構成情報を外部LLMに送れるのかは事前に確認が必要です。ここはツールの問題ではなくガバナンスの問題です。

(本記事の画面キャプチャも、FQDN・IPアドレス・トークンはマスクしています。ブログや社内共有に貼るときは、回答本文だけでなくツール実行行のコマンドまで確認してください。ステップ5のように、AIが叩いたcurlのURLとBearerトークンがそのまま画面に出ます)

5. 権限はAAP側で絞る

MCPサーバーはAAPのRBACを継承します。つまりトークンの持ち主の権限を超えることはできません。逆に言えば、管理者権限のトークンを渡せばAIも管理者権限で見えてしまう。専用のサービスアカウントを作って最小権限を与えるのが安全です。

そして前半で書いたとおり、 サービスアカウントを分ける理由は権限だけではありません。 activity streamを見たときに「これはAI経由の実行だ」と判別できる状態にしておく。読み取りしかしていない今のうちにやっておくべき仕込みです。


L1から一段上げるとき

L1に慣れてくると、「ここまで分かってるなら実行までやってほしい」と思う瞬間が必ず来ます。そこで考えるべきことを整理しておきます。

L2へ:AIに案を作らせ、人が実行する

ALLOW_WRITE_OPERATIONS は false のまま、AIには変更手順やPlaybookの下書きを作らせる。実行するのは人。可逆性の観点では、L1とほぼ同じ安全性のまま、価値だけを増やせます。まずここが現実的な次の一歩だと思います。

L3へ:書き込みを許すなら

ここは慎重に。最低限、以下は設計してから進めるべきだと考えています。

  • 書き込み用トークンを読み取り用と分ける(用途ごとに別トークン、別サービスアカウント)
  • alwaysAllow を見直す:読み取り前提で入れた自動承認リストを、そのまま書き込み権限に持ち込まない
  • 対象を絞る:AIが起動できるジョブテンプレートを、レビュー済みのものだけに限定する
  • 承認ゲートを置く:AAP側のワークフロー承認ノードを使えば、AIがジョブを起動しても人の承認なしには先に進まない
  • ロールバック経路を用意する:失敗時に自動で戻せる設計になっているか
  • 監査経路を確保する:誰が(どのトークンが)何を起動したかがactivity streamで追えること

ここで、ステップ2で出てきたワークフロー構成をもう一度見てください。

[承認ノード] BIG-IP証明書更新承認
     ↓ 承認後
[1] BIG-IP_証明書発行 → [2] インポート → [3] ClientSSL割当 → [4] 検証
                            ↓ failure
                        [R] ロールバック

先頭に承認ノード、失敗時にロールバック。
AIの話が出てくるずっと前から、Ansibleの世界ではこういう設計をしてきています。

つまり、L3に必要な部品はAAPにすでに揃っている
AIに「このワークフローを起動して」と頼めるようにしても、承認ノードで人が止まる。これは、ゼロから承認フローを作るより圧倒的に安全で早い道です。

逆に言えば、承認ノードもロールバックもないワークフローをAIから起動できるようにするのは、もう少し先の話かもしれません。
L3に上げる前にやるべきは、MCPの設定ではなくワークフローの設計です。

AIは「どのPlaybookをいつ動かすか」を判断するが、「何をするか」はすでに人 (とAI) が書いてテストしたものに限る。この分業は、インフラ運用には適合性が高いと思います。


まとめ

  • AI活用は「使う/使わない」ではなく、人の関与度の段階で考えると議論がかみ合う
  • レベルは製品の属性ではなく作業の属性。同じMCPサーバーでも、権限の渡し方でL1にもL3にもなる
  • 選定の軸は可逆性
  • 関与度と直交するもう一本の軸が可視性。危ないのは自律だからではなく、自律かつ見えないから
  • AAPのログは、人が押したのかAIが叩いたのかを区別しない。 AI用サービスアカウントの分離は、L3になってからでは遅い仕込み
  • AAPの設定確認は、L1の教科書的なユースケース
  • RRULEの解読、階層をまたいだインベントリの追跡、スケジュール競合の突き合わせ——人間が面倒だと感じる作業ほどAIが得意という非対称性が、L1の価値の源泉
  • L3に必要な部品(承認ノード、ロールバック経路)はAAPにすでにある。上げるべきはMCPの設定ではなく、まずワークフローの設計
  • すでに自動化できている作業にAIを重ねる必要はない。AIの価値は、まだ人が毎回考えている部分にある
  • ALLOW_WRITE_OPERATIONS のデフォルトが false であることは、ベンダーからの「まずL1から始めよ」というメッセージ
  • そして自分の側のレベルは、mcp.jsonalwaysAllow に何を書くかで決まる。思想ではなく設定ファイルの1行

「AIがAIを使う」世界は確かに面白いテーマですが、その手前にある 「人のための、よくできた補助ツール」 としてのAIは、今日から実務で効きます。しかもそこで積んだ経験が、上のレベルに上がるときの設計判断を支えてくれる。

まずはIBM Bob で MCP サーバーを動かして、Read権限のトークンを1本作り動かしてみることから、始めてみてはいかがでしょうか、ということで本記事を締めさせていただきます。


参考

MCPサーバー for AAP の発表(Red Hat Blog)
https://www.redhat.com/en/blog/it-automation-agentic-ai-introducing-mcp-server-red-hat-ansible-automation-platform

Deploy the MCP server on Ansible Automation Platform(AAP 2.7 Documentation)
https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.7/extend-assembly_deploying_ansible_mcp_server

Deploying Ansible MCP server(AAP 2.6 Containerized installation)
https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.6/html/containerized_installation/deploying-ansible-mcp-server

ansible/aap-mcp-server(GitHub)
https://github.com/ansible/aap-mcp-server

Using MCP in Bob(IBM Bob Docs)
https://bob.ibm.com/docs/ide/configuration/mcp/mcp-in-bob

MCP server transports(IBM Bob Docs)
https://bob.ibm.com/docs/ide/configuration/mcp/server-transports

IBM Bob × MCP連携の実践:Ansible Automation Platformを日本語で操作(Qiita)
https://qiita.com/c_u/items/a52c2f4203ce76e97aea

3
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?