Этот технический обзор Workstation охватывает безопасность и аутентификацию агентного ИИ: защиту корпоративных агентов, вызывающих инструменты через MCP (Model Context Protocol), с помощью OAuth 2.1, размещение высокорисковых конечных точек MCP за VPN / частной сетью и управление учётными данными инструментов через HashiCorp Vault — динамические секреты, аренды, авторотацию и немедленный отзыв. Рекомендуются отраслевые схемы для Claude, OpenAI и Cursor.
- Проблема: Агенты со статическими долгоживущими ключами инструментов + публичный 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 для секретов.
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 admin | 5–15 минут; отзыв по завершении инструмента |
| Чтение / staging | Реплики чтения, ticket API | 30–60 минут |
| Ключ LLM-провайдера | Организационный ключ OpenAI / Anthropic | Управляется Vault; ротация по расписанию; никогда в MCP JSON |
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. Рекомендуемые настройки по вендорам
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 | Общий пароль робота |
| MCP | PRM + токены с привязкой audience | Токены в URL; без срока действия |
| Сеть | VPN / PrivateLink + egress ACL | Публичный MCP для prod-инструментов |
| Секреты | Аренда Vault + ротация + отзыв | Годичные ключи в mcp.json |
| Ops | Аудит IdP+MCP+Vault; человеческие шлюзы | Prod-деплои / платежи без шлюзов |
7. Чек-лист внедрения
- Инвентаризируйте каждый MCP-сервер и классифицируйте как публичный или частный.
- Реализуйте OAuth 2.1 + PRM на всех удалённых MCP; включите EMA с корпоративным IdP.
- Перенесите MCP + Vault за VPN/частную сеть; задокументируйте, как Cursor/Claude подключаются к сети.
- Замените статические ключи инструментов динамическими секретами Vault; задайте TTL по классу риска.
- Подключите Vault Agent (или SDK renew/revoke) к средам выполнения агентов; отзывайте аренды по окончании сессии.
- Разделите ключи LLM-провайдера; храните и ротируйте их в Vault — никогда в промптах или конфигурации MCP.
- Добавьте шлюзы человеческого одобрения для денег, изменений идентичности и production-деплоев.
- Тест: истёкшая аренда закрывается с отказом; токен с неверным audience отклоняется; публичный путь заблокирован.
Опубликовано Workstation — корпоративная автоматизация, мультиагентные платформы и безопасная доставка на Kubernetes.