В Cloudflare мы активно внедрили Model Context Protocol (MCP) как ключевую часть нашей стратегии в области ИИ. Этот переход вышел далеко за пределы нашей инженерной организации: теперь сотрудники из отделов продукта, продаж, маркетинга и финансов используют агентные рабочие процессы для повышения эффективности в своих повседневных задачах. Однако внедрение агентных рабочих процессов с MCP сопряжено с рисками для безопасности. К ним относятся: распространение полномочий, инъекция промптов и риски цепочки поставок. Чтобы обеспечить безопасность этого широкого внедрения по всей компании, мы интегрировали набор средств контроля безопасности как из нашей платформы Cloudflare One (SASE), так и из платформы для разработчиков Cloudflare, что позволяет нам управлять использованием ИИ с помощью MCP, не замедляя работу наших сотрудников.
В этом блоге мы рассмотрим наши лучшие практики по обеспечению безопасности рабочих процессов MCP, объединяя различные части нашей платформы для создания единой архитектуры безопасности в эпоху автономного ИИ. Мы также поделимся двумя новыми концепциями, которые поддерживают корпоративные развертывания MCP:
-
Мы запускаем режим Code с порталами серверов MCP, чтобы кардинально сократить затраты на токены, связанные с использованием MCP;
-
Мы описываем, как использовать Cloudflare Gateway для обнаружения теневых MCP, чтобы выявлять использование несанкционированных удаленных серверов MCP.
Мы также расскажем о том, как наша организация подошла к развертыванию MCP и как мы построили нашу архитектуру безопасности MCP с использованием продуктов Cloudflare, включая удаленные серверы MCP, Cloudflare Access, порталы серверов MCP и AI Gateway.
Удаленные серверы MCP обеспечивают лучшую видимость и контроль
MCP — это открытый стандарт, который позволяет разработчикам создавать двустороннее соединение между ИИ-приложениями и необходимыми им источниками данных. В этой архитектуре клиент MCP является точкой интеграции с LLM или другим ИИ-агентом, а сервер MCP находится между клиентом MCP и корпоративными ресурсами.
Разделение между клиентами и серверами MCP позволяет агентам автономно достигать целей и выполнять действия, сохраняя четкую границу между ИИ (интегрированным на стороне клиента MCP) и учетными данными и API корпоративного ресурса (интегрированными на стороне сервера MCP).
Наши сотрудники в Cloudflare постоянно используют серверы MCP для доступа к информации в различных внутренних ресурсах, включая нашу платформу управления проектами, внутреннюю вики, платформы документации и управления кодом и многое другое.
Очень рано мы осознали, что локально размещенные серверы MCP представляют угрозу безопасности. Развертывания локальных серверов MCP могут полагаться на непроверенные источники и версии программного обеспечения, что увеличивает риск атак на цепочку поставок или атак инъекции инструментов. Они не позволяют ИТ- и security-администраторам управлять этими серверами, оставляя на усмотрение отдельных сотрудников и разработчиков выбор, какие серверы MCP они хотят запускать и как хотят поддерживать их в актуальном состоянии. Это проигрышная стратегия.
Вместо этого у нас в Cloudflare есть централизованная команда, которая управляет развертыванием наших серверов MCP по всему предприятию. Эта команда построила общую платформу MCP внутри нашего монорепозитория, которая предоставляет управляемую инфраструктуру "из коробки". Когда сотрудник хочет предоставить доступ к внутреннему ресурсу через MCP, он сначала получает одобрение от нашей команды по управлению ИИ, а затем копирует шаблон, пишет определения своих инструментов и выполняет развертывание, наследуя при этом элементы управления с политикой "запрещено по умолчанию" для операций записи с аудит-логированием, автоматически сгенерированные CI/CD-пайплайны и управление секретами без дополнительных усилий. Это означает, что создание нового управляемого сервера MCP занимает считанные минуты. Управление встроено в саму платформу, что и позволило внедрению распространиться так быстро.
Наш CI/CD-пайплайн развертывает их как удаленные серверы MCP на пользовательских доменах в платформе для разработчиков Cloudflare. Это дает нам видимость того, какие серверы MCP используются нашими сотрудниками, сохраняя при этом контроль над источниками программного обеспечения. В качестве дополнительного бонуса каждый удаленный сервер MCP на платформе для разработчиков Cloudflare автоматически развертывается в нашей глобальной сети дата-центров, поэтому наши сотрудники могут получать доступ к серверам MCP с низкой задержкой, независимо от того, где они находятся в мире.
Cloudflare Access обеспечивает аутентификацию
Некоторые из наших серверов MCP находятся перед общедоступными ресурсами, такими как наш сервер MCP для документации Cloudflare или сервер MCP для Cloudflare Radar, и поэтому мы хотим, чтобы они были доступны всем. Но многие серверы MCP, используемые нашими сотрудниками, находятся перед нашими частными корпоративными ресурсами. Эти серверы MCP требуют аутентификации пользователя, чтобы гарантировать, что они недоступны никому, кроме авторизованных сотрудников Cloudflare. Для этого наш шаблон монорепозитория для серверов MCP интегрирует Cloudflare Access в качестве провайдера OAuth. Cloudflare Access защищает потоки входа в систему и выдает токены доступа к ресурсам, выступая в качестве агрегатора идентификации, который проверяет единый вход (SSO) конечного пользователя, многофакторную аутентификацию (MFA) и различные контекстные атрибуты, такие как IP-адреса, местоположение или сертификаты устройств.
Порталы серверов MCP централизуют обнаружение и управление
Порталы серверов MCP унифицируют управление и контроль всей активности ИИ.
По мере роста количества наших удаленных серверов MCP мы столкнулись с новой проблемой: обнаружением. Мы хотели, чтобы каждому сотруднику (особенно тем, кто новичок в MCP) было легко находить и работать со всеми доступными им серверами MCP. Наш продукт "Порталы серверов MCP" предоставил удобное решение. Сотрудник просто подключает свой клиент MCP к порталу серверов MCP, и портал немедленно показывает все внутренние и сторонние серверы MCP, которые он имеет право использовать.
Кроме того, наши порталы серверов MCP обеспечивают централизованное логирование, последовательное применение политик и средства защиты от утечки данных (DLP). Наши администраторы могут видеть, кто и в какой портал MCP вошел, и создавать правила DLP, которые предотвращают передачу определенных данных, таких как персональные данные (PII), определенным серверам MCP.
Мы также можем создавать политики, которые контролируют, кто имеет доступ к самому порталу и какие инструменты от каждого сервера MCP должны быть доступны. Например, мы можем настроить один портал серверов MCP, доступный только сотрудникам, входящим в группу финансов, который предоставляет доступ только к инструментам чтения для сервера MCP, работающего с нашим внутренним репозиторием кода. В то же время другой портал серверов MCP, доступный только сотрудникам на их корпоративных ноутбуках, входящим в инженерную команду, может предоставлять более мощные инструменты чтения/записи для нашего сервера MCP репозитория кода.
Обзор архитектуры нашего портала MCP-серверов показан выше. Порталы поддерживают как удалённые MCP-серверы, размещённые на Cloudflare, так и сторонние MCP-серверы, размещённые где угодно ещё. Уникальную производительность этой архитектуре обеспечивает то, что все эти компоненты безопасности и сети работают на одном физическом сервере в рамках нашей глобальной сети. Когда запрос сотрудника проходит через портал MCP-сервера, удалённый MCP-сервер на Cloudflare и Cloudflare Access, его трафику никогда не нужно покидать один и тот же физический сервер.
Режим Code Mode с порталами MCP-серверов снижает затраты
После месяцев развёртывания MCP в больших масштабах мы заплатили изрядную долю токенов. Мы также начали думать, что большинство людей используют MCP неправильно.
Стандартный подход к MCP требует определения отдельного инструмента для каждой операции API, которая предоставляется через MCP-сервер. Но этот статический и исчерпывающий подход быстро исчерпывает контекстное окно агента, особенно для крупных платформ с тысячами конечных точек.
Ранее мы писали о том, как использовали серверный режим Code Mode для работы MCP-сервера Cloudflare, что позволило нам открыть доступ к тысячам конечных точек в API Cloudflare, одновременно сократив использование токенов на 99,9%. MCP-сервер Cloudflare предоставляет всего два инструмента: инструмент search позволяет модели писать JavaScript для изучения доступных возможностей, а инструмент execute позволяет ей писать JavaScript для вызова найденных инструментов. Модель обнаруживает то, что ей нужно, по запросу, а не получает всё заранее.
Нам настолько понравился этот паттерн, что мы должны были сделать его доступным для всех. Поэтому мы запустили возможность использовать паттерн «Режим Code Mode» с порталами MCP-серверов. Теперь вы можете вывести все свои MCP-серверы через централизованный портал, который выполняет аудит контроля и постепенное раскрытие инструментов, чтобы снизить затраты на токены.
Вот как это работает. Вместо предоставления каждого определения инструмента клиенту, все ваши базовые MCP-серверы сводятся всего к двум инструментам MCP-портала: portal_codemode_search и portal_codemode_execute. Инструмент search даёт модели доступ к функции codemode.tools(), которая возвращает все определения инструментов с каждого подключённого вышестоящего MCP-сервера. Затем модель пишет JavaScript для фильтрации и изучения этих определений, находя именно те инструменты, которые ей нужны, без загрузки каждой схемы в контекст. Инструмент execute предоставляет прокси-объект codemode, где каждый вышестоящий инструмент доступен как вызываемая функция. Модель пишет JavaScript, который вызывает эти инструменты напрямую, объединяя несколько операций, фильтруя результаты и обрабатывая ошибки в коде. Всё это выполняется в изолированной среде на портале MCP-сервера, работающей на базе Dynamic Workers.
Вот пример агента, которому нужно найти тикет 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 || {}) }));
}
Теперь модель знает точные названия инструментов и необходимые параметры, без того чтобы полные схемы инструментов когда-либо попадали в её контекст. Затем она пишет один вызов execute, чтобы объединить операции вместе:
// 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 + “nn” + doc.content }
});
return { updated: tickets[0].key };
}
Это всего два вызова инструментов. Первый обнаруживает, что доступно, второй выполняет работу. Без режима Code Mode тот же рабочий процесс потребовал бы от модели получения полных схем каждого инструмента с обоих MCP-серверов заранее, а затем трёх отдельных вызовов инструментов.
Давайте рассмотрим экономию в перспективе: когда наш внутренний портал MCP-серверов подключён всего к четырём нашим внутренним MCP-серверам, он предоставляет 52 инструмента, которые потребляют примерно 9400 токенов контекста только для своих определений. При включённом режиме Code Mode эти 52 инструмента сводятся к 2 инструментам портала, потребляющим примерно 600 токенов, что на 94% меньше. И что критически важно, эта стоимость остаётся фиксированной. По мере подключения большего количества MCP-серверов к порталу стоимость токенов для режима Code Mode не растёт.
Режим Code Mode можно активировать на портале MCP-сервера, добавив параметр запроса в URL. Вместо подключения к вашему порталу по обычному URL (например, https://myportal.example.com/mcp) вы добавляете ?codemode=search_and_execute к URL (например, https://myportal.example.com/mcp?codemode=search_and_execute).
AI Gateway обеспечивает расширяемость и контроль затрат
Мы ещё не закончили. Мы подключаем AI Gateway к нашей архитектуре, размещая его на соединении между MCP-клиентом и LLM. Это позволяет нам быстро переключаться между различными поставщиками LLM (чтобы избежать привязки к вендору) и применять контроль затрат (ограничивая количество токенов, которые может потратить каждый сотрудник). Полная архитектура показана ниже.
Cloudflare Gateway обнаруживает и блокирует скрытый MCP
Теперь, когда мы обеспечили управляемый доступ к авторизованным MCP-серверам, давайте рассмотрим работу с неавторизованными MCP-серверами. Мы можем выполнить обнаружение скрытого MCP с помощью Cloudflare Gateway. Cloudflare Gateway — это наш комплексный безопасный веб-шлюз, который предоставляет командам безопасности предприятий возможность видимости и контроля за интернет-трафиком своих сотрудников.
Мы можем использовать API Cloudflare Gateway для выполнения многоуровневого сканирования, чтобы найти удалённые MCP-серверы, к которым не обращаются через портал MCP-сервера. Это возможно с использованием различных существующих селекторов Gateway и защиты от потери данных (DLP), включая:
-
Использование селектора Gateway
httpHostдля сканирования:-
известных имён хостов MCP-серверов (например, mcp.stripe.com)
-
поддоменов mcp.* с использованием шаблонов имён хостов с подстановочными знаками
-
-
Использование селектора Gateway
httpRequestURIдля сканирования специфичных для MCP путей URL, таких как /mcp и /mcp/sse -
Использование проверки тела на основе DLP для обнаружения трафика MCP, даже если этот трафик использует URI, не содержащие характерных упоминаний
mcpилиsse. В частности, мы используем тот факт, что MCP использует JSON-RPC поверх HTTP, что означает, что каждый запрос содержит поле "method" со значениями вроде "tools/call", "prompts/get" или "initialize." Вот несколько правил с регулярными выражениями, которые можно использовать для обнаружения трафика MCP в теле HTTP:
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"',
},
];
API Gateway поддерживает дополнительную автоматизацию. Например, можно использовать определённый выше пользовательский профиль DLP для блокировки трафика, его перенаправления или просто для записи и проверки полезных данных MCP. Всё вместе это позволяет использовать Gateway для комплексного обнаружения неавторизованных удалённых MCP-серверов, к которым обращаются через корпоративную сеть.
Для получения дополнительной информации о том, как это реализовать, см. это руководство.
Публичные MCP-серверы защищены с помощью AI Security for Apps
До сих пор мы фокусировались на защите доступа наших сотрудников к внутренним MCP-серверам. Но, как и многие другие организации, у нас также есть публичные MCP-серверы, которые наши клиенты могут использовать для автономного администрирования и управления продуктами Cloudflare. Эти MCP-серверы размещены на платформе для разработчиков Cloudflare. (Вы можете найти список отдельных MCP для конкретных продуктов здесь или вернуться к нашему новому подходу для предоставления более эффективного доступа ко всему API Cloudflare с помощью Code Mode.)
Мы считаем, что каждая организация должна публиковать официальные MCP-серверы первого лица для своих продуктов. Альтернатива — это когда ваши клиенты используют непроверенные серверы из публичных репозиториев, где пакеты могут содержать опасные допущения доверия, нераскрытый сбор данных и любой спектр несанкционированного поведения. Публикуя собственные MCP-серверы, вы контролируете код, частоту обновлений и уровень безопасности инструментов, которые используют ваши клиенты.
Поскольку каждый удаленный MCP-сервер является HTTP-эндпоинтом, мы можем разместить его за Cloudflare Web Application Firewall (WAF). Клиенты могут активировать функцию AI Security for Apps в WAF для автоматической проверки входящего трафика MCP на предмет попыток инъекции промптов, утечки конфиденциальных данных и классификации тематики. Публичные MCP защищены так же, как и любой другой веб-API.
Будущее MCP в корпоративной среде
Мы надеемся, что наш опыт, продукты и референсные архитектуры будут полезны другим организациям на их собственном пути к широкому внедрению MCP в масштабах всего предприятия.
Мы обеспечили безопасность наших собственных MCP-процессов за счет:
-
Предоставления нашим разработчикам шаблонной инфраструктуры для создания и развертывания удаленных MCP-серверов на нашей платформе для разработчиков с использованием Cloudflare Access для аутентификации
-
Обеспечения безопасного доступа на основе идентификации к авторизованным MCP-серверам путем подключения всех наших сотрудников к порталам MCP-серверов
-
Контроля затрат с использованием AI Gateway для опосредования доступа к LLM, которые обеспечивают работу MCP-клиентов наших сотрудников, и использования Code Mode в порталах MCP-серверов для снижения потребления токенов и раздутия контекста
-
Обнаружения скрытого использования MCP с помощью Cloudflare Gateway
Для организаций, продвигающихся по пути внедрения MCP в своей корпоративной среде, мы рекомендуем начать с размещения существующих удаленных и сторонних MCP-серверов за порталами Cloudflare MCP-серверов и активации Code Mode, чтобы начать получать выгоду от более дешевых, безопасных и простых корпоративных развертываний MCP.
Благодарности: Эта референсная архитектура и блог представляют собой труд многих людей из разных ролей и бизнес-подразделений Cloudflare. Это лишь частичный список участников: Энн Минг Самборски, Кейт Резникова, Майк Номич, Джеймс Ройал, Лиам Риз, Юмна Моаззам, Саймон Торп, Риан ван дер Мерве, Раджеш Бхатия, Аюш Такер, Гонсало Чаварри, Мэдди Оньехара и Хейли Кэмпбелл.