このコンテンツは自動機械翻訳サービスによる翻訳版であり、皆さまの便宜のために提供しています。原本の英語版と異なる誤り、省略、解釈の微妙な違いが含まれる場合があります。ご不明な点がある場合は、英語版原本をご確認ください。
Cloudflareは、AI戦略の中核としてモデルコンテキストプロトコル(MCP)を積極的に導入しています。この変化は、エンジニアリング組織だけでなく、製品、営業、マーケティング、財務チームの従業員がエージェンティックワークフローを使って日々の業務を効率化しています。しかし、MCPとエージェンティックワークフローの導入には、セキュリティリスクがないわけではありません。これには、承認の乱立、プロンプトインジェクション、およびサプライチェーンのリスクなどがあります。この広範な全社的採用を保護するために、当社はCloudflare One (SASE) プラットフォームとCloudflareの開発者プラットフォームの両方から一連のセキュリティ制御を統合し、従業員の速度を落とすことなく、MCPでAIの利用を管理できるようにしました。
このブログでは、当社プラットフォームのさまざまな部分を組み合わせて、自律的AIの時代に対応した統一されたセキュリティアーキテクチャを構築することによって、MCPワークフローを保護するための独自のベストプラクティスについて説明します。また、企業向けMCPのデプロイをサポートする2つの新しいコンセプトも紹介します:
また、当社がMCPの導入にどのように取り組み、リモートMCPサーバー、Cloudflare Access、MCPサーバーポータル、AI GatewayなどのCloudflare製品を使用してMCPセキュリティアーキテクチャを構築したかについても説明します。
MCPは、開発者がAIアプリケーションとアクセスする必要のあるデータソースとの間に双方向の接続を構築できるオープンスタンダードです。このアーキテクチャでは、MCPクライアントはLLMまたは他のAIエージェントとの統合ポイントであり、MCPサーバーはMCPクライアントと企業リソースの間に位置します。
MCPクライアントとMCPサーバーが分離されることにより、エージェントはAI(MCPクライアントで統合)と企業リソースの認証情報とAPI(MCPサーバーで統合)の明確な境界を維持しながら、自律的に目標を追求し、行動を起こすことができます。
Cloudflareの社員は、プロジェクト管理プラットフォーム、社内Wiki、ドキュメントおよびコード管理プラットフォームなど、さまざまな社内リソースの情報にアクセスするために、MCPサーバーを常に使用しています。
ローカルでホストされたMCPサーバーがセキュリティ上の負担であることを、早い段階から認識していました。ローカルMCPサーバーのデプロイメントは、未検証のソフトウェアソースやバージョンに依存する場合があり、サプライチェーン攻撃やツールインジェクション攻撃のリスクが高まります。ITおよびセキュリティ管理者がこれらのサーバーを管理することはできなくなり、どのMCPサーバーを実行するか、どのように最新の状態に維持するかは、個々の従業員や開発者に委ねられます。これは失敗ゲームです。
その代わり、Cloudflareには、企業全体へのMCPサーバーのデプロイメントを管理する中央集中型チームがあり、このチームは、管理されたインフラストラクチャをすぐに提供する共有MCPプラットフォームをMonorepo内に構築しました。従業員がMCP経由で内部リソースを公開したい場合、まずAIガバナンスチームから承認を得て、テンプレートをコピーし、ツール定義を記述してデプロイします。その際、監査ログ付きのデフォルト拒否の書き込み制御、自動生成されたCI/CDパイプライン、およびシークレット管理を無料で継承できます。つまり、新しい管理対象MCPサーバーの立ち上げにかかる数分であることを意味します。プラットフォーム自体にガバナンスが組み込まれているため、導入が急速に広がることが可能です。
当社のCI/CDパイプラインは、リモートMCPサーバーとしてCloudflareの開発者プラットフォーム上のバニティドメインにデプロイします。これにより、従業員がどのMCPサーバーを使用しているかを可視化し、ソフトウェアソースの制御を維持することができます。さらに、Cloudflare開発者プラットフォーム上のすべてのリモートMCPサーバーは、データセンターのグローバルネットワーク上に自動的にデプロイされるため、世界のどこにいても、従業員がMCPサーバーに低遅延でアクセスできます。
Cloudflare Accessは認証を提供します
当社のMCPサーバーの一部は、CloudflareドキュメントMCPサーバーやCloudflare Radar MCPサーバーのようなパブリックリソースの前に配置されているため、誰でもアクセスできるようにする必要があります。しかし、当社の従業員が使用するMCPサーバーの多くは、当社のプライベート企業リソースの前に配置されています。これらのMCPサーバーは、権限のあるCloudflare従業員以外のすべてのユーザーがアクセスできないようにするため、ユーザー認証を必要とします。これを実現するために、MCPサーバー用のMonorepoテンプレートは、Cloudflare AccessをOAuthプロバイダーとして統合します。Cloudflare Accessは、ログインフローを保護し、リソースへのアクセストークンを発行すると同時に、エンドユーザーのシングルサインオン(SSO)、多要素認証(MFA)、およびIPアドレス、ロケーション、デバイス証明書などのさまざまなコンテキスト属性を検証するIDアグリゲーターとして機能します。
MCPサーバーポータルは、検出とガバナンスを一元化
MCPサーバーポータルは、すべてのAIアクティビティのガバナンスと制御を統合します。
リモートMCPサーバーの数が増えるにつれて、新たな壁、つまり検出という新たな壁に直面しました。当社は、すべての従業員(特にMCPを初めて使う従業員)が、利用可能なすべてのMCPサーバーを簡単に見つけて利用できるようにしたいと考えました。私たちのMCPサーバーポータル製品は、便利なソリューションを提供してくれました。従業員はMCPクライアントをMCPサーバーポータルに接続するだけで、ポータルは使用を許可された社内およびサードパーティのMCPサーバーをすぐに表示します。
さらに、当社のMCPサーバーポータルは、一元化されたロギング、一貫したポリシーの適用、データ損失防止(DLPガードレール)を提供します。当社の管理者は、誰がどのMCPポータルにログインしているかを確認し、個人を特定できるデータ(PII)などの特定のデータが特定のMCPサーバーと共有されることを防止するDLPルールを作成することができます。
また、ポータル自体に誰がアクセスできるか、各MCPサーバーのどのツールを公開するかを制御するポリシーを作成することもできます。たとえば、社内コードリポジトリの前にあるMCPサーバーの読み取り専用ツールのみを公開する、当社の財務グループに属する従業員のみがアクセスできるMCPサーバーポータルを1つ設定できます。一方、当社のエンジニアリングチームに所属する会社のノートパソコンを使用する従業員のみがアクセスできる別のMCPサーバーポータルは、より強力な読み取り/書き込みツールをコードリポジトリMCPサーバーに公開する可能性があります。
当社のMCPサーバーポータルアーキテクチャの概要を上に示します。このポータルは、CloudflareにホストされたリモートMCPサーバーと、Cloudflare以外の場所でホストされたサードパーティのMCPサーバーの両方をサポートしています。このアーキテクチャのパフォーマンスがユニークなのは、これらのセキュリティコンポーネントとネットワーキングコンポーネントが、すべてグローバルネットワーク内の同じ物理マシン上で実行される点です。従業員のリクエストがMCPサーバーポータル、CloudflareがホストするリモートMCPサーバー、Cloudflare Access間を移動する場合、従業員のトラフィックは同じ物理マシンから離れる必要はありません。
MCPサーバーポータルのコードモードがコストを削減
数か月にわたる大量のMCPのデプロイ後、公正なトークンの支払いが完了しました。また、ほとんどの人がMCPのやり方を間違っていると考え始めました。
MCPへの標準的なアプローチは、MCPサーバー経由で公開されるAPI操作ごとに個別のツールを定義する必要があります。しかし、この静的で網羅的なアプローチは、特に何千ものエンドポイントを持つ大規模なプラットフォームでは、エージェントのコンテキストウィンドウをすぐに使い果たさせます。
以前、サーバー側のコードモードを使用してCloudflareのMCPサーバーを稼働させ、トークン使用量を99.9%削減しながら、Cloudflare APIの何千ものエンドポイントを公開した方法について書きました。Cloudflare MCPサーバーは、次の2つのツールを公開します。1つの検索ツールは、モデルが利用可能なものを調べるためにJavaScriptを書くことを可能にし、実行ツールは、JavaScriptを書くことで見つけたツールを呼び出すことを可能にします。このモデルは、すべてを事前に受け取るのではなく、オンデマンドで必要なものを発見します。
このパターンがとても気に入っているので、すべての人に提供する必要がありました。そこで、MCPサーバーポータルで「コードモード」パターンを使用する機能をリリースしました。お客様は、すべてのMCPサーバーの前に、監査制御や段階的なツール開示を行う中央集中型ポータルを設置して、トークンコストを削減できるようになります。
仕組みは次の通りです。すべてのツール定義をクライアントに公開する代わりに、基盤となるすべてのMCPサーバーは、portal_codemode_searchとportal_codemode_executeの2つのMCPポータルツールに集約されます。検索ツールは、モデルに検索ツールは、モデルにcodemode.tools()へのアクセスを提供します。接続されたすべてのアップストリームMCPサーバーからすべてのツール定義を返す関数です。モデルは次に、これらの定義をフィルタリングおよび調査するためにJavaScriptを書き、すべてのスキーマがコンテキストに読み込まれることなく、必要なツールを見つけます。実行ツールは、各アップストリームツールが呼び出し可能な関数として利用できるコードモードのプロキシオブジェクトを提供します。モデルは、これらのツールを直接呼び出し、複数の操作を連鎖させ、結果をフィルタリングし、コード内でエラーを処理するJavaScriptを書きます。これらはすべて、Dynamic Workersによって提供されるMCPサーバーポータル上のサンドボックス環境で実行されます。
以下は、Jiraチケットを検索し、Google Driveからの情報を使用して更新する必要があるエージェントの例です。まず、次のような適切なツールを探します。
// portal_codemode_search
async () => {
const tools = await codemode.tools();
return tools
.filter(t => t.name.includes("jira") || t.name.includes("drive"))
.map(t => ({ name: t.name, params: Object.keys(t.inputSchema.properties || {}) }));
}
モデルは、ツールの完全なスキーマがそのコンテキストに入力されることなく、必要な正確なツール名とパラメータを把握できるようになりました。そして、操作を連鎖させるために、単一の実行呼び出しを書き込みます。
// portal_codemode_execute
async () => {
const tickets = await codemode.jira_search_jira_with_jql({
jql: ‘project = BLOG AND status = “In Progress”’,
fields: [“summary”, “description”]
});
const doc = await codemode.google_workspace_drive_get_content({
fileId: “1aBcDeFgHiJk”
});
await codemode.jira_update_jira_ticket({
issueKey: tickets[0].key,
fields: { description: tickets[0].description + “\n\n” + doc.content }
});
return { updated: tickets[0].key };
}
これは2つのツール呼び出しです。1人が利用可能なものを発見し、2人が作業を行います。コードモードがなければ、この同じワークフローでモデルは両方のMCPサーバーから全ツールの完全なスキーマを受け取り、3つの個別のツール呼び出しを行う必要があったでしょう。
節約効果を見てみましょう。内部MCPサーバーポータルが4つの内部MCPサーバーに接続されている場合、定義のためだけで約9,400トークンのコンテキストを消費する52のツールが公開されることになります。コードモードを有効にすると、この52個のツールが2つのポータルツールに崩壊し、約600トークンが消費されます。これは94%削減されます。そして重要なことに、このコストは固定されています。ポータルに接続するMCPサーバーが増えても、コードモードのトークンコストは増えません。
コードモードは、URLにクエリパラメータを追加することにより、MCPサーバーポータルで有効化できます。通常のURL(例:https://myportal.example.com/mcp)、URLに ?codemode=search_and_executeを付加します (例:https://myportal.example.com/mcp?codemode=search_and_execute).
AI Gatewayは拡張性とコスト管理を提供します
これで終わりではありません。MCPクライアントとLLMの間の接続にAI Gatewayを配置することで、弊社のアーキテクチャに接続します。これにより、さまざまなLLMプロバイダーをすばやく切り替えたり(ベンダーロックインを防ぐため)、(各従業員が消費できるトークンの数を制限することで)コスト管理を実施できます。アーキテクチャ全体を以下に示します。
Cloudflare GatewayがシャドーMCPを検出しブロック
これまで、許可されたMCPサーバーに管理されたアクセスを提供してきましたが、ここでは不正なMCPサーバーへの対処について見ていきましょう。Cloudflare Gatewayを使用して、シャドーMCPの検出を実行できます。Cloudflare Gatewayは、企業のセキュリティチームが従業員のインターネットトラフィックを可視化し、制御できるようにする、包括的なセキュアWebゲートウェイです。
Cloudflare Gateway APIを使用して多層スキャンを実行し、MCPサーバーポータル経由でアクセスされていないリモートMCPサーバーを見つけることができます。これは、次のような既存のGatewayとData Loss Prevention(DLP)セレクタを使用することができます。
Gateway httpHost セレクタを使用してスキャンする
GatewayのhttpRequestURIセレクタを使用して、/mcpや/mcp/sseなどのMCP固有のURLパスをスキャン
DLPベースのボディ検査を使用してMCPトラフィックを検出します。これは、そのトラフィックがmcpやsseの明らかな言及を含まないURIを使用している場合でも同様です。具体的には、MCPがHTTP経由でJSON-RPCを使用しているという事実を利用しています。つまり、すべてのリクエストに「tools/call」、「プロンプト/get」、「initialize」などの値を持つ「method」フィールドが含まれるのです。HTTP本文内のMCPトラフィックを検出するために使用できる正規表現ルールのいくつかを以下に示します。
const DLP_REGEX_PATTERNS = [
{
name: "MCP Initialize Method",
regex: '"method"\\s{0,5}:\\s{0,5}"initialize"',
},
{
name: "MCP Tools Call",
regex: '"method"\\s{0,5}:\\s{0,5}"tools/call"',
},
{
name: "MCP Tools List",
regex: '"method"\\s{0,5}:\\s{0,5}"tools/list"',
},
{
name: "MCP Resources Read",
regex: '"method"\\s{0,5}:\\s{0,5}"resources/read"',
},
{
name: "MCP Resources List",
regex: '"method"\\s{0,5}:\\s{0,5}"resources/list"',
},
{
name: "MCP Prompts List",
regex: '"method"\\s{0,5}:\\s{0,5}"prompts/(list|get)"',
},
{
name: "MCP Sampling Create Message",
regex: '"method"\\s{0,5}:\\s{0,5}"sampling/createMessage"',
},
{
name: "MCP Protocol Version",
regex: '"protocolVersion"\\s{0,5}:\\s{0,5}"202[4-9]',
},
{
name: "MCP Notifications Initialized",
regex: '"method"\\s{0,5}:\\s{0,5}"notifications/initialized"',
},
{
name: "MCP Roots List",
regex: '"method"\\s{0,5}:\\s{0,5}"roots/list"',
},
];
Gateway APIは、追加の自動化をサポートしています。たとえば、上記で定義したカスタムDLPプロファイルを使用して、トラフィックをブロックしたり、リダイレクトしたり、MCPペイロードをログに記録して検査することができます。これらの機能を組み合わせることで、Gatewayは、企業ネットワーク経由でアクセスされる不正なリモートMCPサーバーを包括的に検出することができます。
構築方法の詳細については、このチュートリアルを参照してください。
外部公開されたMCPサーバーは、AI Security for Appsで保護
これまでは、従業員による社内MCPサーバーへのアクセスの保護に重点を置いていました。しかし、他の多くの組織と同様に、当社もお客様がCloudflare製品をエージェント的に管理・運用するために利用できる外部公開のMCPサーバーを保有しています。これらのMCPサーバーは、Cloudflareの開発者プラットフォーム上でホストされています。(特定の製品の個々のMCPのリストはこちらでご覧いただけます。または、コードモードを使用してCloudflare API全体へのより効率的なアクセスを実現するための新しいアプローチを参照してください。)
私たちは、すべての組織が製品に対して公式なファーストパーティのMCPサーバーを公開すべきだと考えています。代替案として、顧客が公開リポジトリから未検証のサーバーをソースしてしまう可能性があり、パッケージには危険な信頼前提、未公開のデータ収集、あらゆる種類の承認されていない動作が含まれている可能性があります。自社のMCPサーバーを公開することで、顧客が使用するツールのコード、更新頻度、セキュリティ体制を制御できます。
リモートMCPサーバーはすべてHTTPエンドポイントであるため、Cloudflare Web Application ファイアウォール (WAF)の内側に配置することができます。お客様はWAF内でAI Security for Apps機能を有効にして、インバウンドMCPトラフィックを自動的に検査し、プロンプトインジェクションの試み、機密データの漏洩、トピック分類を検出できます。公開されているMCPは、他のWeb APIと同様に保護されています。
MCPの全社的導入に向けて独自の努力を続ける他の組織にとって、当社の経験、製品、リファレンスアーキテクチャが有用になることを願っています。
当社独自のMCPワークフローは、次の方法で保護しています:
開発者向けに、認証にCloudflare Accessを使用した開発者向けプラットフォーム上でリモートMCPサーバーを構築・デプロイするためのテンプレート化されたフレームワークを提供しています
ワークフォース全体をMCPサーバーポータルに接続することで、認証されたMCPサーバーへのセキュアなIDベースのアクセスを確保
従業員のMCPクライアントを支えるLLMへのアクセスをAI Gatewayで仲介してコストを管理し、MCPサーバーポータルでコードモードを使用してトークン消費とコンテキストの肥大化を削減
検出Cloudflare GatewayによるシャドーMCPの使用
企業向けMCPの導入を進める企業は、まずは既存のリモートMCPサーバーやサードパーティMCPサーバーをCloudflare MCPサーバーポータルの背後に配置し、コードモードを有効にすることで、より安価で安全、かつシンプルな企業向けMCPデプロイメントのメリットを享受できるようにすることをお勧めします。
謝辞:このリファレンスアーキテクチャとブログは、Cloudflare内のさまざまな役割やビジネスユニットの多くの人々の仕事を代表するものです。これは貢献者の一部に過ぎません:Ann Ming Samborski、Kate Reznykova、Mike Nomitch、James Royal、Liam Reese、Yumna Moazzam、Simon Thorpe、Rian van der Merwe、Rajesh Bhatia、Ayush Thakur、Gonzalo Chavarri、Maddy Onyehara、Haley Campbell氏