企業内 AI エージェント導入の課題
企業のネットワーク環境で、AIエージェント(ChatGPT や Amazon Q Developer など)を導入しようとした際、思いがけない通信エラーに遭遇していませんか?
Gemini や ChatGPT などの汎用 AI エージェントをブラウザから実施する方法は、広く利用されています。
開発者にとっては Amazon Q Developer などの IDE (統合開発環境) と連携する AI エージェントも重要な存在です。
MCP (Model Context Protocol) とは、AIエージェントが様々な情報源(データソースやツール)と連携するためのプロトコルです。
MCP 連携を行うことで、AWS などのクラウドや、Sysdig などのセキュリティツール、Backlog などの課題管理ツールなど、多くの情報源と連携した作業が可能となります。
本記事は、社内ネットワークにカスタムルート証明書が適用されている環境で、AI エージェントを利用している開発者や IT 管理者の方々に向けて、そのトラブルと具体的な解決策を解説します。
カスタムルート証明書とは
組織は、自社のセキュリティを担保するため、インターネット通信を管理することが一般的です。
HTTPS などの安全な通信は、エンドツーエンドで暗号化を提供するため、通信経路での解読をサポートしません。
多くの企業では、社内ネットワークのセキュリティ強化のため独自の『ルート証明書』(カスタムルート証明書)をパソコンに配布し、インターネット通信を監視・制御しています。
この環境下で、AI エージェントの連携に不可欠な MCP(Model Context Protocol)サーバーを Docker で動かそうとすると、証明書エラーが発生し、通信がブロックされます。
MCP サーバーとカスタムルート証明書環境で発生する問題
このような構成の組織において、上述の AI 利用における MCP サーバーと相性の問題が度々発生します。
MCP サーバーは、広く利用されることから Docker Image として配布されることがあります。
Docker コンテナは、ホスト OS から独立した環境でアプリケーションを実行します。
そのため、ホスト OS に設定されているカスタムルート証明書がデフォルトでは引き継がれません。
組織のカスタムルート証明書が配布されず、HTTPS エラーとなり MCP が利用できないという問題が発生します。
この問題に対して、解決策を提示します。
Docker コンテナでのカスタムルート証明書の設定方法
この解決策は、MCP サーバーが Python や Node.js といった言語で記述されているという前提のもとで動作します。
MCP サーバーは、その実装の容易さから Python や Node.js で記述されることが多いです。
課題として提示した問題は、MCP の問題ではなく、Docker 内で Python や Node.js プログラムが証明書エラーを検知しているために発生しています。
Python や Node.js などのランタイムは、HTTPS通信を行う際に通信先のサーバー証明書が信頼できる認証局によって署名されているかを確認します。
カスタムルート証明書がコンテナ内に適用されていない場合、社内のプロキシサーバーなどによって再署名された証明書が信頼できないと判断され、SSL ハンドシェイクが失敗し、通信エラーが発生します。
そのため、解決策としては、Python や Node.js に対して、『カスタムルート証明書の存在を設定する』という方法になります。
自社開発のプログラムであればソースコードを変更して対処可能です。
しかし、Docker Image は公式が提供するソースコードのために変更不可能です。
ソースコードの改変なく、カスタムルート証明書を提示するため、環境変数を利用します。
具体的な解決策としては以下のとおりです。
{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
// ここから重要
"-v", f"{ssl_cert_file}:/opt/cert:ro", // ssl_cert_file はホスト上の証明書パス
"-e", "SSL_CERT_FILE",
"-e", "NODE_EXTRA_CA_CERTS",
"hello-world", // Docker image 名
],
"env": {
"SSL_CERT_FILE": "/opt/cert",
"NODE_EXTRA_CA_CERTS": "/opt/cert",
},
}
ここで、重要なのは -v オプションと、-e SSL_CERT_FILE 、-e NODE_EXTRA_CA_CERTS です。
それぞれ、Python と Node.js に対して環境変数を通してカスタムルート証明書を設定するものです。
-v オプションでホスト OS 上のカスタムルート証明書ファイルをコンテナ内の /opt/cert にマウント。
-e オプションで Python(SSL_CERT_FILE)と Node.js(NODE_EXTRA_CA_CERTS)の環境変数にそのパスを設定することで、各ランタイムが証明書を認識できるようにします。
Docker 内のコードが Python なのか Node.js なのか、判断することは簡単ではありません。
環境変数を設定することによる悪影響はほとんどないため、どちらも設定しておくことで、多くのケースで解決が見込まれます。
まとめ
AI エージェントや、MCP による連携は、開発者にとって必要不可欠なものとなっています。
しかし、カスタムルート証明書環境と Docker は相性が悪く、またその解決情報もほとんど情報がない状態です。
この記事の内容を参考にしていただくことで、企業ネットワークという信頼できる環境下で安全に AI エージェントと MCP による外部連携を実現することが可能となります。
この記事を参考に、安全にカスタムルート証明書環境下で MCP を使ってください。