Перейти к содержимому

Статья

Безопасность агентного ИИ: MCP OAuth, VPN и аренды HashiCorp Vault

Корпоративный справочник: MCP OAuth 2.1 + EMA, интеграция VPN, динамические секреты Vault, авторотация, отзыв аренды и матрица настроек вендоров

  • 6 мин чтения
  • ИИ
  • Безопасность
  • DevOps

Этот технический обзор TenthMatrix охватывает безопасность и аутентификацию агентного ИИ: защиту корпоративных агентов, вызывающих инструменты через MCP (Model Context Protocol), с помощью OAuth 2.1, размещение высокорисковых конечных точек MCP за VPN / частной сетью и управление учётными данными инструментов через HashiCorp Vault — динамические секреты, аренды, авторотацию и немедленный отзыв. Рекомендуются отраслевые схемы для Claude, OpenAI и Cursor.

Безопасность агентного ИИ: MCP OAuth, VPN, аренды Vault

Навигация. Сопутствующий блог: краткий дайджест. Связанное: системы глубокого обучения, агенты Bedrock, мультиагентные команды.
Related reading. Edge WAF on the same live-config OpenResty proxy: WSL Proxy WAF blog · explainable edge WAF article · product overview · wslproxy.org/waf · tour youtu.be/r10XSonA5JE.
Дайджест для агента (машиночитаемый).
  • Проблема: Агенты со статическими долгоживущими ключами инструментов + публичный MCP = расползание учётных данных и горизонтальное перемещение.
  • Auth: Удалённый MCP = OAuth 2.1 resource server + RFC 9728 PRM + RFC 8707 audience; PKCE обязателен.
  • Enterprise: Предпочтительно MCP Enterprise-Managed Authorization (EMA / ID-JAG) через корпоративный IdP.
  • Сеть: Внутренние MCP и Vault в VPN/private link; списки разрешённого egress по инструментам.
  • Секреты: Динамические секреты Vault + TTL аренды; авторотация статических ролей; отзыв по окончании сессии.
  • Разделение: API-ключи LLM-провайдера != токены доступа MCP != секреты бэкенд-инструментов.

Источники: MCP Authorization, аренды Vault, Vault AI agent validated pattern, Claude connector auth. Перед промышленным внедрением сверяйте актуальные документы вендоров.

1. Модель угроз для корпоративных агентов

Агент — привилегированный субъект автоматизации. Типичные режимы отказа:

  • Расползание секретов — API-ключи в MCP JSON, .env, закоммиченный в git, или вставка в промпты.
  • Подмена токена — токен доступа, выданный для сервера A, принимается сервером B (нет привязки audience).
  • Слишком широкие инструменты — один MCP может писать в prod БД и открывать файрволы в одной сессии.
  • Неаудируемый OBO — агент действует без привязки действий к личности человека.
  • Публичный MCP — внутренние инструменты доступны из интернета без VPN или private link.

Меры контроля должны охватывать идентичность (кто), авторизацию (какие инструменты), секреты (с какими учётными данными) и сеть (откуда).

2. Аутентификация MCP: отраслевой стандарт

Для удалённого MCP на базе HTTP спецификация согласована с OAuth 2.1:

  • MCP-сервер = OAuth resource server; клиенты отправляют Authorization: Bearer.
  • PKCE обязателен; implicit grant запрещён.
  • Серверы MUST публиковать Protected Resource Metadata (RFC 9728), чтобы клиенты обнаруживали authorization server.
  • Используйте Resource Indicators (RFC 8707), чтобы токены были привязаны по audience к данному MCP-серверу.
  • Authorization Server Metadata (RFC 8414) и/или OIDC discovery для возможностей AS.
  • Dynamic Client Registration (RFC 7591) рекомендуется там, где клиенты должны регистрироваться без ручных client ID.
# Protected Resource Metadata (conceptual)
{
  "resource": "https://mcp.internal.example/mcp",
  "authorization_servers": ["https://auth.example.com"],
  "scopes_supported": ["mcp:tools", "mcp:resources"]
}

STDIO / локальный MCP — иное: предпочтительны учётные данные окружения, внедряемые Vault Agent — не принуждайте браузерный OAuth для каждого десктопного инструмента. Удалённый/публичный MCP должен реализовывать OAuth 2.1.

2.1 Enterprise-Managed Authorization (zero-touch)

Расширение MCP Enterprise-Managed Authorization позволяет корпоративному IdP (Okta, Entra ID и др.) выдавать доступ к одобренным MCP-серверам при SSO с помощью ID-JAG (Identity Assertion JWT Authorization Grant), избегая усталости от согласия на каждый сервер. Внедряйте EMA для организационных флотилий Claude / IDE / агентов.

3. Интеграция VPN и частного MCP

OAuth аутентифицирует клиента; он не заменяет сетевую изоляцию.

  • Размещайте внутренние MCP-серверы и Vault в частном CIDR (VPN, PrivateLink, mesh Tailscale/WireGuard или service mesh mTLS).
  • Привязывайте слушатели MCP к частным интерфейсам; блокируйте публичный 443, если продукт не рассчитан на интернет.
  • Применяйте списки разрешённого egress из среды выполнения агента: только одобренные API/MCP-хосты.
  • Разделяйте плоскости: ноутбуки разработчиков в корп. VPN для Cursor; серверные агенты в VPC без интернет-MCP, кроме одобренного SaaS.

Паттерн: VPN для достижимости + OAuth для авторизации + Vault для секретов.

Рисунок A: архитектура IdP MCP Vault VPN

4. HashiCorp Vault для секретов агентов

Статические долгоживущие ключи инструментов несовместимы с радиусом поражения агента. Vault обеспечивает:

4.1 Динамические секреты + аренды

Каждый динамический секрет возвращает lease_id и TTL. Потребитель должен продлевать (если разрешено) или запрашивать замену до истечения. Когда аренда заканчивается, Vault может отозвать учётные данные у провайдера. Это принуждает check-in, улучшает журналы аудита и сокращает окна экспозиции.

4.2 Авторотация

Для статических ролей (например, пароль БД с rotation_period) Vault ротирует по расписанию. Шаблоны Vault Agent повторно получают данные ближе к концу срока (по умолчанию lease_renewal_threshold ~0,9 TTL) и могут перезапускать дочерний процесс при смене учётных данных.

4.3 Рекомендуемые TTL для агентов

Класс риска Пример Рекомендации по TTL
Критическая записьИзменение prod БД, IAM admin5–15 минут; отзыв по завершении инструмента
Чтение / stagingРеплики чтения, ticket API30–60 минут
Ключ LLM-провайдераОрганизационный ключ OpenAI / AnthropicУправляется Vault; ротация по расписанию; никогда в MCP JSON

Рисунок B: жизненный цикл аренды Vault

4.4 Vault + атрибуция пользователя (validated pattern)

Validated pattern HashiCorp: пользователь аутентифицируется; агент получает токен on-behalf-of (OBO); инструменты аутентифицируются в Vault через JWT; Vault сопоставляет claims с политиками и выдаёт ограниченные по области динамические секреты. Аудиторские следы связывают выдачу секретов с человеком, а не с общим робот-аккаунтом.

Vault Enterprise добавляет Agent Registry и профили OAuth resource server, чтобы зарегистрированные агенты предъявляли OAuth JWT без отдельного входа в Vault — с агент-специфичными ограничениями для делегирования / OBO.

# Conceptual agent tool hook (do not ship secrets to the model)
vault_token = login_jwt(obo_token)           # Vault auth
secret = vault.read("database/creds/agent-ro")
lease_id, ttl = secret["lease_id"], secret["lease_duration"]
try:
    run_tool(db_url=secret["data"])          # use within TTL
finally:
    vault.lease.revoke(lease_id)             # or let TTL expire

5. Рекомендуемые настройки по вендорам

Рисунок C: паттерны Claude OpenAI Cursor

5.1 Claude (Anthropic)

  • Предпочитайте OAuth для удалённых MCP-коннекторов; возвращайте 401 с WWW-Authenticate, указывающим на PRM, чтобы клиенты могли обнаружить auth.
  • Никогда не помещайте токены/API-ключи в query string URL коннектора (логируются, кэшируются, запрещены правилами токенов MCP).
  • Claude Code: локальный OAuth с безопасным хранилищем токенов и обновлением; плагины не должны читать токены.
  • Hosted Claude: управляемые Anthropic client credentials для согласившихся пользователей; по-прежнему храните секреты инструментов в Vault за вашим MCP.
  • Enterprise: согласуйте IdP с MCP EMA для zero-touch доступа к серверам.

5.2 OpenAI (Agents / tools)

  • Разделяйте API-ключи модели и учётные данные инструментов; разная ротация и радиус поражения.
  • Запускайте среды выполнения агентов в VPC; вызывайте частный MCP через частную сеть.
  • Передавайте в инструменты токены с атрибуцией пользователя; аутентифицируйтесь в Vault через JWT; выпускайте динамические секреты на каждый вызов.
  • Логируйте каждый вызов инструмента с user + agent + lease_id для соответствия требованиям.

5.3 Cursor

  • Конфигурация MCP-сервера: ссылайтесь только на переменные окружения — никогда не хардкодьте секреты в mcp.json.
  • STDIO-серверы: запускайте под Vault Agent (шаблон или env), чтобы аренды ротировались без копирования паролей разработчиками.
  • Удалённый MCP: OAuth, если сервер поддерживает; иначе корп. VPN + короткоживущий bearer из Vault.
  • Политика команды: allowlist одобренных MCP-серверов; блокируйте недоверенные community MCP на prod-кодовых базах.
  • Исключайте .env / файлы секретов из контекста правилами ignore; правила проекта: запрет вставки секретов в чат.

6. Справочная матрица контроля

Уровень Контроль Антипаттерн
ИдентичностьSSO IdP + EMA / OAuth PKCEОбщий пароль робота
MCPPRM + токены с привязкой audienceТокены в URL; без срока действия
СетьVPN / PrivateLink + egress ACLПубличный MCP для prod-инструментов
СекретыАренда Vault + ротация + отзывГодичные ключи в mcp.json
OpsАудит IdP+MCP+Vault; человеческие шлюзыProd-деплои / платежи без шлюзов

7. Чек-лист внедрения

  1. Инвентаризируйте каждый MCP-сервер и классифицируйте как публичный или частный.
  2. Реализуйте OAuth 2.1 + PRM на всех удалённых MCP; включите EMA с корпоративным IdP.
  3. Перенесите MCP + Vault за VPN/частную сеть; задокументируйте, как Cursor/Claude подключаются к сети.
  4. Замените статические ключи инструментов динамическими секретами Vault; задайте TTL по классу риска.
  5. Подключите Vault Agent (или SDK renew/revoke) к средам выполнения агентов; отзывайте аренды по окончании сессии.
  6. Разделите ключи LLM-провайдера; храните и ротируйте их в Vault — никогда в промптах или конфигурации MCP.
  7. Добавьте шлюзы человеческого одобрения для денег, изменений идентичности и production-деплоев.
  8. Тест: истёкшая аренда закрывается с отказом; токен с неверным audience отклоняется; публичный путь заблокирован.
Правило маршрутизации TenthMatrix. Парадная дверь = MCP OAuth (кто может вызывать инструменты). Сетевая дверь = VPN/mesh (откуда). Дверь секретов = аренды Vault (чем). Если любая дверь подпёрта статическим ключом, считайте это инцидентом, который ждёт своего часа.

Опубликовано TenthMatrix — корпоративная автоматизация, мультиагентные платформы и безопасная доставка на Kubernetes.