Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается проверка подлинности и защита серверов MCP, работающих в приложениях контейнеров Azure. Подход отличается в зависимости от того, размещается ли изолированное приложение контейнера или используется сервер MCP, управляемый платформой , в динамических сеансах.
Предпосылки
- Учетная запись Azure с активной подпиской. Создайте его бесплатно.
- Azure CLI версии 2.62.0 или более поздней.
- Существующее контейнерное приложение или пул сеансов. Если у вас нет этого сервера, ознакомьтесь с руководствами по серверу MCP.
Общие сведения о моделях проверки подлинности
Приложения контейнеров Azure поддерживают две модели проверки подлинности для серверов MCP. В следующей таблице приведены основные различия.
| Аспект | Независимое контейнерное приложение | Динамические сеансы MCP |
|---|---|---|
| Механизм проверки подлинности | Встроенная проверка подлинности контейнерных приложений с помощью идентификатора Microsoft Entra | Ключ API с помощью x-ms-apikey заголовка |
| Тип токена | Маркер носителя OAuth 2.0 | Непрозрачная строка ключа API |
| Поставщик удостоверения личности | Майкрософт Ентра айди | Azure Resource Manager |
| Смена ключа и токена | Управляется с помощью Microsoft Entra ID | Регенерация через API Azure Resource Manager |
| Область авторизации | Настраиваемая для каждого приложения | Уровень пула сеансов |
| Шифрование транспорта | TLS (ингресс контейнерных приложений) | TLS (конечная точка сеансов контейнерных приложений) |
Автономное контейнерное приложение с аутентификацией Microsoft Entra ID
При развертывании собственного сервера MCP в качестве приложения-контейнера вы владеете уровнем проверки подлинности. Используйте встроенную функцию проверки подлинности контейнерных приложений, поддерживаемую идентификатором Microsoft Entra.
Настройка встроенной проверки подлинности
Ниже описано, как зарегистрировать приложение Microsoft Entra ID и включить встроенную аутентификацию в вашем приложении-контейнере.
Зарегистрируйте приложение в идентификаторе Microsoft Entra:
APP_ID=$(az ad app create \ --display-name "mcp-server-auth" \ --sign-in-audience AzureADMyOrg \ --query appId -o tsv)Создайте субъект-службу:
az ad sp create --id $APP_IDДобавьте секрет клиента:
CLIENT_SECRET=$(az ad app credential reset --id $APP_ID --query password -o tsv) TENANT_ID=$(az account show --query tenantId -o tsv)Включите встроенную проверку подлинности в приложении-контейнере:
az containerapp auth microsoft update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --client-id $APP_ID \ --client-secret $CLIENT_SECRET \ --tenant-id $TENANT_ID \ --issuer "https://login.microsoftonline.com/$TENANT_ID/v2.0" \ --yesЗадайте действие для неаутентифицированных, чтобы требовать вход в систему.
az containerapp auth update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --unauthenticated-client-action Return401
Подключение от клиента MCP с маркером носителя
Если серверу MCP требуется маркер носителя, настройте получение маркера в клиенте MCP. В следующем примере показана .vscode/mcp.json конфигурация для GitHub Copilot:
{
"servers": {
"my-mcp-server": {
"type": "http",
"url": "https://<CONTAINER_APP_NAME>.<REGION>.azurecontainerapps.io/mcp",
"headers": {
"Authorization": "Bearer ${input:mcpBearerToken}"
}
}
},
"inputs": [
{
"id": "mcpBearerToken",
"type": "promptString",
"description": "Enter your bearer token for the MCP server",
"password": true
}
]
}
Подсказка
Для разработки получите токен с помощью az account get-access-token --resource $APP_ID --query accessToken -o tsv и вставьте его, когда будет запрос. Для автоматизированных рабочих процессов интегрируйтесь с системой управления маркерами организации.
Настройка CORS
Клиентам MCP, подключающимся из веб-сред, необходимы заголовки CORS. Используйте следующую команду, чтобы настроить CORS в приложении контейнера:
az containerapp ingress cors update \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--allowed-origins "https://vscode.dev" "https://github.dev" \
--allowed-methods "GET" "POST" "OPTIONS" \
--allowed-headers "Content-Type" "Authorization" "Mcp-Session-Id" \
--max-age 3600
Следующие заголовки являются ключевыми для предоставления доступа:
-
Content-Type: требуется для запросов JSON-RPC -
Authorization: требуется для проверки подлинности маркера носителя -
Mcp-Session-Id: используется клиентами MCP для сеансов с сохранением состояния
Замечание
GitHub Copilot подключается к удаленным серверам MCP из классического приложения VS Code, а не из браузера. CORS требуется только в том случае, если вы планируете поддерживать клиенты MCP на основе браузера или VS Code для Интернета. Одиночные учебные материалы используют подстановочные знаки CORS для упрощения; в рабочей среде ограничивайте доступ к определённым надёжным происхождениям, как показано здесь.
Рекомендации по безопасности для автономных серверов MCP
Примените следующие рекомендации для защиты автономного сервера MCP.
- Ограничения сети. Используйте ограничения IP-адресов или интеграцию виртуальной сети , чтобы ограничить доступ к известным IP-адресам клиента.
- Ограничение скорости. Реализуйте ограничение скорости в коде приложения или перед приложением с помощью службы "Управление API Azure".
- Проверка входных данных: проверьте все аргументы инструментов в коде сервера MCP. Входные данные средства MCP являются произвольными JSON. Относиться к ним как к ненадежным.
-
Проектирование без отслеживания состояния: предпочитайте серверы MCP без отслеживания состояния, чтобы избежать рисков, связанных с перехватом сеансов. В большинстве пакетов SDK MCP это означает отключение создания идентификатора сеанса на стороне сервера (например,
sessionIdGenerator: undefinedв TypeScript илиstateless_http=TruePython). -
Пробы работоспособности: настройте пробы работоспособности в отдельной конечной точке (например
/healthz, не в конечной точке MCP). Конечные точки MCP ожидают запросов POST JSON-RPC и возвращают ошибки при обычных запросах GET.
Динамические сеансы с проверкой подлинности ключа API
Это важно
Сервер MCP под управлением платформы для динамических сеансов находится в предварительной версии. Версия API 2025-02-02-preview и свойства mcpServerSettings могут быть изменены.
Сервер MCP под управлением платформы в динамических сеансах использует проверку подлинности ключа API. Ключ распространяется на пул сеансов и предоставляет доступ ко всем инструментам и сеансам в пуле.
Поток проверки подлинности ключа API
Ниже описано, как работает проверка подлинности ключа API для динамических сеансов.
- Клиент отправляет запрос JSON-RPC с заголовком
x-ms-apikey. - Прокси-сервер пула сеансов проверяет ключ на уровне управления Azure.
- Если ключ действителен, запрос пересылается в сеанс. В противном случае возвращается ошибка проверки подлинности.
Получение ключа API
Используйте следующую команду, чтобы получить ключ API для пула сеансов.
API_KEY=$(az rest --method POST \
--uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/sessionPools/<SESSION_POOL_NAME>/fetchMCPServerCredentials" \
--uri-parameters api-version=2025-02-02-preview \
--query "apiKey" -o tsv)
Поворот и кэширование ключа API
Ключ API можно повторно создать в любое время. Результаты проверки платформы кэшируются до пяти минут, поэтому ранее допустимые ключи могут продолжать работать после восстановления до истечения срока действия кэша.
Чтобы повернуть ключ API, вызовите regenerateCredentials действие в пуле сеансов:
az rest --method POST \
--uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/sessionPools/<SESSION_POOL_NAME>/regenerateCredentials" \
--uri-parameters api-version=2025-02-02-preview
После повторного восстановления извлеките новый ключ, используя fetchMCPServerCredentials как показано ранее.
Рекомендации по безопасности для динамических сеансов
Примените следующие рекомендации для защиты развертывания динамических сеансов MCP.
- Область ключа API: ключ API предоставляет доступ ко всему пулу сеансов. Любой клиент с ключом может создавать среды и выполнять код. Не делитесь ключом с ненадежными сторонами.
- Изоляция среды: каждый сеанс выполняется в изолированном контейнере Hyper-V. Выполнение кода в одном сеансе не может получить доступ к данным другого сеанса.
-
Исходящий трафик сети: управление доступом сеансов к Интернету с помощью
sessionNetworkConfiguration.status. Установите значениеEgressDisabled, если сеансы не требуют доступа к внешней сети. -
Время существования сеанса: настройка
coolDownPeriodInSecondsавтоматического уничтожения неактивных сеансов. Этот параметр ограничивает окно воздействия, если сеанс скомпрометирован. - Хранилище секретов: храните ключ API в Azure Key Vault или в секретах Container Apps, а не в коде или конфигурационных файлах.
Распространенные несоответствия проверки подлинности
Распространенная ошибка — использование заголовка с ключом API (x-ms-apikey) с автономным приложением контейнера или использование токена аутентификации с конечной точкой MCP для сеансов. В следующей таблице показано, что происходит при их сочетании.
| Несовпадение | Результат |
|---|---|
x-ms-apikey заголовок, отправленный в автономное приложение |
Заголовок игнорируется; запрос попадает в встроенную проверку подлинности и возвращает 401 , если включена проверка подлинности |
Authorization: Bearer отправлено в сеансы MCP |
Проверка валидности ключа завершается ошибкой, и возвращает 401 |
Убедитесь, что конфигурация клиента MCP соответствует развернутой модели размещения.
Связанный контент
- Общие сведения о серверах MCP в приложениях контейнеров Azure
- Проверка подлинности и авторизация в приложениях контейнеров Azure
- Проверка подлинности Microsoft Entra ID
- Общие сведения о динамических сеансах
- Управление секретами в приложениях-контейнерах
- Настройка CORS для приложений-контейнеров
- Устранение неполадок серверов MCP в приложениях контейнеров