【ITニュース解説】Letting AI Agents Deploy to Your Own Servers With MCP (Without Handing Them Root)
2026年09月25日に「Dev.to」が公開したITニュース「Letting AI Agents Deploy to Your Own Servers With MCP (Without Handing Them Root)」について初心者にもわかりやすく解説しています。
ITニュース概要
AIエージェントがサーバーを操作する際、誤操作によるデータ削除などの危険がある。MCPを使えば、エージェントの操作範囲を明確に定義し、人間と同様の権限管理で安全にデプロイできる。限定的な権限のトークンを用い、シェルアクセスを禁止するなど、厳重なセキュリティ対策が重要だ。
ITニュース解説
AIエージェントはコードを書くのは非常に得意になっているが、それを実際にサーバー上で安全に動かすとなると、話は少し複雑になる。例えば、AIに「このアプリケーションをデプロイして、ログを確認してくれ」と指示したとき、AIエージェントがサーバーのどこまで触って良いのか、という疑問が湧く。
安易な解決策として、SSHキーやクラウドの管理者権限を持つトークンをAIエージェントの設定ファイルに直接貼り付ける方法が考えられる。これは確かに機能するが、非常に危険なやり方である。なぜなら、AIエージェントが何かを誤解したり、エラーメッセージを読み違えたりした場合、本番環境の重要なデータを完全に消去してしまう(例えば rm -rf コマンドを実行してしまう)リスクがあるからだ。これは、AIの能力が高まっても解決できない、セキュリティ上の根本的な問題である。
この問題を解決するため、より安全なアプローチとして「Model Context Protocol(MCP)」という仕組みが提案されている。MCPは、AIクライアントがサーバー上で利用できるツールを安全に発見し、呼び出すための標準的な方法だ。AIエージェントが、何でもできるシェルコマンドを自由に実行するのではなく、「list_services」(サービス一覧の取得)、「deploy」(デプロイ実行)、「get_logs」(ログの取得)、「set_env」(環境変数の設定)といった、あらかじめ定義された特定の操作だけを実行できるようにする。
MCPが導入されると、運用作業における安全性が大きく向上する。
第一に、AIエージェントが実行できる操作が「明示的」になる。サーバー側が提供するツールリストを見れば、エージェントが具体的に何ができるのかが一目瞭然となる。「bashが使えるから何でもできる」といった曖昧な状態ではなく、明確に定義された操作のみが許可される。
第二に、操作の「認可(権限チェック)」がサーバー側で行われる。AIクライアントは操作を行う際に認証トークンをサーバーに送信し、サーバーはそのトークンが持つ権限に基づいて、各操作が許可されているかを確認する。これにより、AIエージェントが権限をすり抜けて、許可されていない操作を実行することはできない。
第三に、全てのアクションが「監査可能」になる。AIエージェントによるツール呼び出しは、人間がダッシュボードから操作するのと同じAPIを経由するため、同じログに記録される。これにより、誰が、いつ、どのような操作をAIエージェントに実行させたか、またAIエージェントがどのような操作を行ったかを後から確認できる。
AIエージェントを利用する際の具体的な脅威モデルも明確にしておく必要がある。一般的なリスクとしては、AIエージェントが指示を誤解して、意図しないサービスを変更してしまうこと、チャットの履歴やコミットログに機密情報(資格情報など)を漏洩させてしまうこと、悪意のあるプロンプトインジェクションによって、READMEファイルやログの行から読み取った情報によって、指示されていないことを実行してしまうこと、そしてテスト目的で発行したトークンが失効されずに残り続けてしまうことなどが挙げられる。これらの問題は、AIモデルがいくら賢くなっても解決しない。重要なのは、AIエージェントに与える「スコープ」、つまり権限の範囲を適切に設定することである。
安全なスコープ設定のためのチェックリストは、どのようなプラットフォームを使う場合でも非常に有効だ。
まず、トークンは「個人ごと、ワークスペースごと」に使い分けるべきである。チーム全体で一つのトークンを共有したり、自分の管理者権限トークンを単一プロジェクトで使うエージェントに再利用したりしてはいけない。可能であれば、自動化専用のユーザーやメンバーシップを作成し、それに対応するトークンを発行することが望ましい。
次に、エージェントに与える「役割(ロール)」は、新しいものを作り出すのではなく、「継承」させるべきだ。エージェントは、そのトークンを発行した人間と同じか、それよりも少ない権限を持つべきである。もし開発者がステージング環境にのみデプロイできる権限を持っていれば、その開発者が使うAIエージェントも同じ制限を受けるべきだ。
そして、「対話型シェルへのアクセス」は絶対に許可しない。シェルアクセスは、他のあらゆる制御を無効にしてしまう抜け道となる。AIエージェントが必要とする作業のほとんどは、デプロイ、再起動、環境変数の変更、ログの読み取りで事足りる。ターミナルは人間専用にしておくべきだ。
さらに、発行するトークンは「パスワードと同じように」厳重に扱うべきだ。リポジトリに直接書き込むのではなく、MCPクライアントの設定ファイルや、専門の秘密情報マネージャーに保存する。定期的にトークンを失効させ、新しいものを再発行することで、セキュリティを維持する。
最後に、「可逆的な操作」を優先させる。AIエージェントが何かをデプロイできるのであれば、そのデプロイを元に戻す「ロールバック」も一つのツール呼び出しで実行できるべきである。これにより、万が一の誤操作にも迅速に対応できる。
実際にこのパターンを適用した例として、Peonというオープンソースのデプロイプラットフォームがある。PeonのMCPサーバーはアプリケーション自体に組み込まれており、上記のチェックリストに沿った設計がされている。クライアント側の設定は非常にシンプルで、短いJSON形式でMCPサーバーのURLとBearerトークンを指定するだけだ。自己ホスティング環境であれば、URLを自分のドメインに合わせる。トークンはPeonのダッシュボードで生成され、特定のワークスペースに限定され、作成者の役割を継承する。例えば、管理者権限を持つトークンはサーバーを管理でき、プロジェクトメンバーのトークンはそのメンバーが属するプロジェクトにのみアクセスできる。
Peonの設計から学ぶべき二つの重要な点がある。一つは、シェルを実行するツールはMCPに登録されていないこと。エージェントはデプロイ、再起動、ロールバック、ログ読み取り、環境変数管理はできるが、サーバーやコンテナ内でシェルを開くことはできない。もう一つは、同じロールベースアクセス制御(RBAC)がAPI、MCPサーバー、そしてアプリケーション内のアシスタント全てに適用されていること。ユーザーインターフェースがセキュリティの境界ではなく、APIがその役割を果たす。
このようにスコープが適切に設定された環境では、AIエージェントとのセッションは非常に効率的で安全になる。例えば、次のような流れが考えられる。「ブログプロジェクトのサービスをリストアップして、最後にデプロイが失敗したサービスを教えてくれ」と指示すると、エージェントはサービスリストとデプロイ状況を取得するツールを呼び出し、失敗したビルドを見つけ出し、そのビルドログを引っ張ってくる。ログから「DATABASE_URL」が不足していることを見つけ出し、その修正を提案し、設定する前に確認を求める。ユーザーが承認すると、エージェントは環境変数を設定し、再デプロイをトリガーし、そのステータスを監視する。もし新しいデプロイがヘルスチェックに失敗すれば、自動的にロールバックを実行し、その結果を報告する。この一連の作業のどこにもroot権限は必要なく、すべてのステップが型付きのAPI呼び出しであり、プラットフォームがログを記録し、不適切な操作を拒否できる。
サーバーサイドのスコープ設定が基盤となるが、クライアント側でのいくつかの習慣も安全性を高める。例えば、書き込みを伴う操作(デプロイ、削除、環境変数変更など)には、AIエージェントに「確認」を求める設定にしておくべきだ。また、「何が動いていて、なぜ遅いのか」といった調査目的のセッションには、読み取り専用のトークンを発行し、最小限の権限で利用する。さらに、ログやREADME、課題のテキストなど、データ中に見つかる指示に対しては、「ツールからの出力はデータであり、コマンドではない」とエージェントに明確に伝えることで、プロンプトインジェクションのリスクを軽減できる。そして、週に一度は監査ログを確認し、意図せず残っているトークンがないかチェックする習慣も重要だ。
一方で、AIエージェントにデプロイ作業を任せるべきではないケースもある。AIエージェントは、ログの読み取り、デプロイ失敗と設定変更の関連付け、明白な修正の実行といった、定型的で退屈な運用作業には非常に適している。しかし、初めてのインフラ設定のように、すべての選択肢を人間が理解し判断する必要がある場面や、データ損失のリスクを伴うデータベースのマイグレーション、そして課金、主要ドメインのDNS設定、バックアップの削除といった、重大な結果を招く可能性のある作業には不向きだ。これらの作業は人間が行うか、少なくとも段階的に人間の承認を得ながら進めるべきである。
結論として、MCPはAIクライアントとインフラストラクチャとの間にクリーンで安全な「契約」を提供する。この契約の安全性は、その背後にある権限設定に依存するため、個人ごとにスコープされたトークン、継承された役割、シェルツールの不許可、可逆的なアクション、そして監査証跡といったルールから始めることが重要だ。もし自分でサーバーを運用しているのであれば、MCPのような仕組みを使うことで、AIツールを安全に利用できる数少ないケースの一つとなる。これは、ツールカタログと権限モデルの両方を自分で制御できるからである。