INTEGRITY Документация

Защита MCP-серверов

Вы можете защитить Серверы Model Context Protocol (MCP) с Cloudflare Access. Выберите подход в зависимости от того, кто управляет кодом и именем хоста MCP-сервера:

Подход Подходит для Auth выполняется через
Сторонний MCP-сервер, управляемый клиентом Код стороннего MCP-сервера, выполняющийся на имени хоста, которое вы контролируете в Cloudflare Сторонний MCP-сервер
Сторонний MCP-сервер под управлением SaaS Сторонние MCP-серверы, размещённые у провайдера, которые поддерживают настройки идентификации OAuth или OIDC, предоставленные клиентом Сторонний MCP-сервер с Access в качестве поставщика OIDC

Сторонний MCP-сервер, управляемый клиентом

Используйте эту настройку, если MCP-сервер работает на имени хоста, которое вы контролируете в Cloudflare, но код сервера управляется третьей стороной и уже обрабатывает собственный процесс OAuth. В этом случае не включайте Access Managed OAuth. Также не нужно добавлять имя хоста MCP-сервера в качестве публичного имени хоста в созданном приложении Access.

  1. Убедитесь, что имя хоста сервера MCP имеет Статус прокси включена в Cloudflare DNS.
  2. В Панель управления Cloudflare, перейдите в Zero Trust > Контроль доступа > Элементы управления ИИ.
  3. Перейдите в MCP-серверы на вкладке.
  4. Выберите Добавьте сервер MCP.
  5. Введите имя сервера.
  6. В HTTP URL, введите URL-адрес MCP-сервера, включая путь MCP. Например, https://mcp.example.com/mcp.
  7. Настройте Политики доступа чтобы определить пользователей, которые могут использовать MCP-сервер.
  8. Настройте, как пользователи будут проходить аутентификацию:

    1. Выберите поставщики идентификации которые вы хотите включить для своего приложения.

    2. (Рекомендуется) Если вы планируете разрешить доступ только через один IdP, включите Применить мгновенную аутентификацию. Конечные пользователи не увидят Страница входа Cloudflare Access. Вместо этого Cloudflare будет перенаправлять пользователей напрямую на событие входа SSO.

    3. (Необязательно) Включите Аутентификация с помощью Cloudflare One Client чтобы разрешить пользователям аутентифицироваться в приложении с использованием Идентификатор сессии Cloudflare One Client.
  9. Выберите Сохранить и подключить сервер.
  10. Если MCP-сервер запрашивает аутентификацию, пройдите процесс OAuth стороннего провайдера.

Сторонний MCP-сервер под управлением SaaS

Используйте эту настройку, если сторонний поставщик размещает MCP-сервер и позволяет настроить собственного поставщика OAuth или OIDC. В этой настройке MCP-сервер выполняет OAuth authorization code flow через Cloudflare Access и получает access_token который можно использовать для вызова нижестоящих сервисов.

В этом руководстве используется удалённый MCP-сервер на Cloudflare Workers чтобы показать настройку Access for SaaS. Для сервера, управляемого через SaaS, следуйте инструкциям по настройке от вашего поставщика и используйте значения Access for SaaS, созданные в Шаг 2. Когда пользователи подключаются к серверу MCP с помощью MCP-клиента, им будет предложено войти в вашу поставщик удостоверений и получают доступ только в случае прохождения вашей Политики доступа.

Предварительные требования

1. Разверните тестовый MCP-сервер

Чтобы развернуть наш пример MCP-сервера в ваш аккаунт Cloudflare:

  1. Выберите следующую кнопку, чтобы запустить Quickstart:

    Развертывание в Workers

  2. Выберите аккаунт, который содержит вашу организацию Zero Trust.

  3. На Создать приложение странице настройте следующие поля:

    • Учётная запись Git: Выберите существующий аккаунт или подключите новый аккаунт GitHub или GitLab.
    • Создать приватный репозиторий Git: Выберите, должен ли репозиторий проекта быть публичным или приватным.
    • Название проекта: mcp-server-cf-access
    • Выберите KV namespace: Создать новое
    • Назовите KV namespace: OAUTH_KV

    Мы настроим ACCESS_CLIENT_ID и другие значения секретов на следующем шаге.

  4. Выберите Создать и развернуть.

Сервер MCP будет развёрнут в вашем *.workers.dev поддомен на mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev. В вашем аккаунте GitHub или GitLab будет создан новый git-репозиторий для вашего MCP-сервера, настроенный на автоматическое развертывание в Cloudflare при каждом пуше изменений или слиянии pull request в основную ветку репозитория.

Вы можете использовать Wrangler CLI чтобы создать MCP-сервер на своём локальном компьютере и развернуть его в Cloudflare.

  1. Откройте терминал и клонируйте наш пример проекта:

    npm create cloudflare@latest -- mcp-server-cf-access --template=cloudflare/ai/demos/remote-mcp-cf-access

    Во время настройки выберите следующие параметры: - Для Хотите добавить файл AGENTS.md, чтобы помочь AI-инструментам для написания кода понимать API Cloudflare?, выберите No. - Для Хотите использовать git для контроля версий?, выберите No. - Для Хотите развернуть приложение?, выберите No (мы внесём некоторые изменения перед развёртыванием).

  2. Перейдите в каталог проекта:

    cd mcp-server-cf-access
  3. Создайте Пространство имён Workers KV чтобы хранить ключ. Имя привязки должно быть OAUTH_KV если хотите выполнить пример в исходном виде.

    npx wrangler kv namespace create "OAUTH_KV"

    Команда выведет имя привязки и ID пространства имен KV:

    {
    	"kv_namespaces": [
    		{
    			"binding": "OAUTH_KV",
    			"id": "<YOUR_KV_NAMESPACE_ID>"
    		}
    	]
    }
  4. Откройте wrangler.jsonc в редакторе и вставьте свой OAUTH_KV ID пространства имён:

    "kv_namespaces": [
    	{
    		"binding": "OAUTH_KV",
    		"id": "<YOUR_KV_NAMESPACE_ID>"
    	}
    ],
  5. Теперь Worker можно развернуть в глобальной сети Cloudflare:

    npx wrangler deploy

Worker будет развернут в вашем *.workers.dev поддомен на mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev.

2. Создайте приложение Access for SaaS

  1. В Панель управления Cloudflare, перейдите в Zero Trust > Контроль доступа > Приложения.

  2. Выберите Создать новое приложение.

  3. Выберите Приложение SaaS.

  4. В Приложение, введите пользовательское имя (например, MCP server) и выберите текстовое поле, которое появится ниже.

  5. Выберите OIDC в качестве протокола аутентификации.

  6. Выберите Добавить приложение.

  7. В URL-адреса перенаправления, введите URL-адрес обратного вызова авторизации для вашего MCP-сервера. URL-адрес обратного вызова для нашего пример MCP-сервера это https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback.

  8. Скопируйте следующие значения для ввода в наш пример сервера MCP. Другим серверам MCP могут потребоваться другие наборы входных значений.

    • Секрет клиента
    • Client ID
    • Token endpoint
    • Конечная точка авторизации
    • Ключевая конечная точка
  9. (Необязательно) В разделе Расширенные настройки, включите Токены обновления если хотите сократить количество входов пользователя у поставщика идентификации.

  10. Настройте Политики доступа чтобы определить пользователей, которые могут получить доступ к MCP-серверу.

  11. Настройте, как пользователи будут проходить аутентификацию:

    1. Выберите поставщики идентификации которые вы хотите включить для своего приложения.

    2. (Рекомендуется) Если вы планируете разрешить доступ только через один IdP, включите Применить мгновенную аутентификацию. Конечные пользователи не увидят Страница входа Cloudflare Access. Вместо этого Cloudflare будет перенаправлять пользователей напрямую на событие входа SSO.

    3. (Необязательно) Включите Аутентификация с помощью Cloudflare One Client чтобы разрешить пользователям аутентифицироваться в приложении с использованием Идентификатор сессии Cloudflare One Client.
  12. Выберите Создание.

  1. Сделайте POST запрос к Приложения Access конечная точка:

    Необходимые разрешения API-токена

    Хотя бы одно из следующих права доступа токена требуется:
    • Access: Apps and Policies Write
    Добавьте приложение Access
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "MCP server",
    		"type": "saas",
    		"saas_app": {
    				"auth_type": "oidc",
    				"redirect_uris": [
    						"https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback"
    				],
    				"grant_type": [
    						"authorization_code",
    						"refresh_tokens"
    				],
    				"refresh_token_options": {
    						"lifetime": "90d"
    				}
    		},
    		"policies": [
    				"f174e90a-fafe-4643-bbbc-4a0ed4fc8415"
    		],
    		"allowed_idps": []
    	}'
  2. Скопируйте client_id и client_secret возвращённый в ответе.

  3. Постройте URL-адреса конечных точек OAuth, используя ваш имя команды и client_id возвращённый в ответе:

    Конечная точка URL
    Token endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/token
    Конечная точка авторизации https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/authorization
    Ключевая конечная точка https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/jwks

3. Настройте свой MCP-сервер

Вашему MCP server нужно выполнить процесс авторизации OAuth 2.0, чтобы получить access_token из приложения SaaS, созданного в Шаг 2. При настройке клиента OAuth на вашем сервере MCP вам потребуется вставить конечные точки OAuth и учетные данные из приложения Access for SaaS.

Чтобы добавить конечные точки и учётные данные OAuth в наш пример MCP-сервера:

  1. В Панель управления Cloudflare, перейдите в Workers & Pages страницу.

    Перейдите в Workers & Pages ↗
  2. Выберите mcp-server-cf-access Worker.

  3. Перейдите в Настройки.

  4. В разделе Переменные и секреты, обновите каждый секрет соответствующим значением, полученным из Приложение Access for SaaS.

    Секрет Workers Поле SaaS app
    ACCESS_CLIENT_ID Client ID
    ACCESS_CLIENT_SECRET Секрет клиента
    ACCESS_TOKEN_URL Token endpoint
    ACCESS_AUTHORIZATION_URL Конечная точка авторизации
    ACCESS_JWKS_URL Ключевая конечная точка
  5. Для COOKIE_ENCRYPTION_KEY, вы можете использовать следующую команду, чтобы сгенерировать случайную строку:

    openssl rand -hex 32

    Введите вывод этой команды в COOKIE_ENCRYPTION_KEY.

  1. Создайте следующее Секреты Workers:

    npx wrangler secret put ACCESS_CLIENT_ID
    npx wrangler secret put ACCESS_CLIENT_SECRET
    npx wrangler secret put ACCESS_TOKEN_URL
    npx wrangler secret put ACCESS_AUTHORIZATION_URL
    npx wrangler secret put ACCESS_JWKS_URL
  2. Когда появится запрос на ввод секретного значения, вставьте соответствующие значения, полученные из Приложение Access for SaaS.

    Секрет Workers Поле SaaS app
    ACCESS_CLIENT_ID Client ID
    ACCESS_CLIENT_SECRET Секрет клиента
    ACCESS_TOKEN_URL Token endpoint
    ACCESS_AUTHORIZATION_URL Конечная точка авторизации
    ACCESS_JWKS_URL Ключевая конечная точка
  3. Создайте случайную строку для ключа шифрования cookie:

    openssl rand -hex 32

    Сохраните вывод этой команды в секрете Workers:

    npx wrangler secret put COOKIE_ENCRYPTION_KEY

4. Протестируйте соединение

Теперь можно подключиться к вашему MCP-серверу по адресу https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp с помощью Workers AI Playground, MCP inspector, или другие MCP-клиенты которые поддерживают удалённые серверы MCP.

Чтобы протестировать в Workers AI Playground:

  1. Перейдите в Workers AI Playground.

  2. В разделе MCP-серверы, введите https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp для URL MCP-сервера.

  3. Выберите Подключить.

  4. Появится всплывающее окно с запросом доступа к MCP-серверу. Выберите Одобрить.

  5. Следуйте подсказкам, чтобы войти в своего поставщика идентификации.

Workers AI Playground покажет Подключено статус. MCP-серверу следует успешно получить access_token от Cloudflare Access.

Следующие шаги

Чтобы разрешить MCP-серверу отправлять аутентифицированные запросы к другим self-hosted приложениям от имени пользователя, создайте Linked App Token политику на нижестоящем приложении. Сервер MCP передаёт Cf-Access-Jwt-Assertion заголовок, который он получает от Access, как Cf-Access-Token заголовок нижестоящему приложению.