Skip to content
ВозможностиДокументацияЦеныПартнёрыPlaygroundFAQ
Zero TrustArchitectureNIST

Zero Trust для AI-агентов: применяем NIST 800-207 к автономным системам

1 минута чтения

Когда инженеры впервые слышат про zero trust AI, они обычно думают: «запретить агенту выполнять rm -rf». Но Zero Trust — это не чёрный список команд. Это архитектурная модель, формально закреплённая в NIST SP 800-207 (июль 2020), которая требует простого, но радикального: никогда не доверять по умолчанию, проверять каждый доступ явно и делать это непрерывно, а не один раз на входе в сеть.

Классическая zero trust architecture строилась вокруг людей и их устройств. Автономные AI-агенты ломают обе предпосылки. У Cursor, Claude Code или Copilot нет учётки в Okta, нет MFA-токена и нет ноутбука с EDR. Зато у них есть интерпретатор команд, доступ к вашим репозиториям и способность самостоятельно принимать решения о следующем действии — совершенно новый класс субъекта безопасности, к которому старые периметровые модели не применимы.

В этой статье мы применяем NIST 800-207 к Cursor, Claude Code и Copilot: берём пять пиларов из CISA Zero Trust Maturity Model — identity, device, network, application/workload, data — и проецируем каждый на специфику LLM-агентов. Главный сдвиг: AI agent identity перестаёт быть «учёткой разработчика, под которой запустили агент», и становится самостоятельной, криптографически проверяемой сущностью с ограниченным сроком жизни и явными scope'ами.

Краткий ответ

Zero Trust для AI-агентов означает: ни один субъект (агент, MCP-сервер, LLM-провайдер) не получает доступ по факту нахождения в доверенной сети или под учёткой человека. Каждый доступ явно авторизуется policy engine на основе identity (SPIFFE/SVID), runtime-постуры (eBPF), сети (mTLS) и контекста данных — на каждый tool-вызов, а не на сессию. Каркас — пять пиларов NIST 800-207; внедрение — за 90 дней, начиная с identity.

Что вы узнаете

  • чем NIST 800-207 отличается для людей и для автономных AI-агентов;
  • как выдать агенту verifiable identity через SPIFFE/SPIRE и JWT-SVID;
  • как организовать mTLS между агентом и MCP-серверами без общего пароля;
  • где проходит граница между Policy Decision Point и Policy Enforcement Point, и как описать доступ на Rego;
  • как выглядит эталонная архитектура FlowLink и поэтапный план внедрения за 90 дней.

Почему классический Zero Trust не дотягивает до агентов

NIST 800-207 формулирует семь базовых тезисов. Третий звучит так: «доступ предоставляется на каждую сессию, а не один раз при входе». Для человека, открывшего портал в 9 утра, это значит «проверим снова в полдень». Для агента, делающего 400 tool-вызовов в час, это должно означать «проверим каждый вызов». Разница — три порядка величины.

Вторая проблема — скорость делегирования. Человек запрашивает доступ через тикет и ждёт одобрения. Агент в середине задачи сам решает дернуть внешнее API, смонтировать директорию или запустить curl. Если проверка доступа не встроена в критический путь каждого действия, она просто не сработает — агент её «обогнёт» тем же путём, каким обходит медленные CI-пайплайны.

Поэтому для AI-агентов идея Zero Trust переформулируется так: никакой субъект (человек, агент, MCP-сервер, LLM-провайдер) не получает доступ по факту нахождения в доверенной сети или под доверённой учёткой; каждый доступ явно авторизуется policy engine на основе identity, контекста и состояния среды в момент запроса.

Сводная карта: пилар NIST → агентский контроль

Пять пиларов CISA/NIST Zero Trust Maturity Model, спроецированных на автономных AI-агентов
Пилар (CISA/NIST)Классический смыслЧто значит для AI-агентаТехнологии
IdentitySSO, MFA, учётка сотрудникаWorkload-identity с TTL, scopeами, атрибутами задачиSPIFFE, SPIRE, JWT-SVID
DeviceEDR, posture laptopsRuntime-постура: syscalls, целостность процессаeBPF, seccomp-bpf, LSM
Networkmicrosegmentation, VPN-lessmTLS на каждый MCP/tool-вызов, DNS-фильтрацияSPIFFE mTLS, nftables
Application / WorkloadWAF, API authzPolicy Decision Point на каждый tool-callOPA, Rego, PEP/PDP
DataDLP, классификацияКонтроль над RAG-корпусом, секретами, бюджетом моделейpgvector ACL, vault, budget governor

Разберём каждый пилар по отдельности — с конфигами, которые реально работают в production.

Принцип 1: Identity для AI-агентов

Первый и самый важный сдвиг. Сегодня 90% развёртываний AI-агентов работают под identity человека: Cursor наследует токен разработчика, Claude Code запускается от пользователя dev@laptop, а Copilot «живёт» внутри GitHub-аккаунта инженера. Это значит, что в логах аудита все действия агента неотличимы от действий человека. Если завтра агент зальёт секрет в публичный gist, следствие покажет на разработчика — а не на автономную сессию LLM.

90%

развёртываний AI-агентов работают под identity человекаВ логах аудита действия агента неотличимы от действий разработчика. Zero Trust требует собственной, криптографически проверяемой identity для каждого агента.

NIST 800-207 требует, чтобы у каждого ресурса была identity. AI-агент — это ресурс. Следовательно, ему нужен собственный, независимо проверяемый идентификатор, который:

  • выдаётся автоматически при старте сессии, а не копируется из .env;
  • живёт строго время жизни задачи (TTL), после чего криптографически аннулируется;
  • несёт атрибуты: тип агента, задачу, владельца-делегатора, разрешённые scope'ы;
  • проверяется на каждом tool-вызове, а не один раз при handshake.

Эталонный стандарт для workload-identity — SPIFFE (Secure Production Identity Framework for Everyone) и его реализация SPIRE. Каждый агент при старте регистрируется и получает SVID (SPIFFE Verifiable Identity Document). Регистрируем сессию Claude Code как workload:

spire-register.sh
bash
# Регистрируем AI-агента как workload с уникальным identity
spire-server entry create \
-spiffeID spiffe://flowlink.ai/agent/claude-code/session-a7f3b2 \
-parentID spiffe://flowlink.ai/host/prod-runner-04 \
-selector "unix:path:/opt/flowlink/agent.sock" \
-x509SVIDTTL 3600 \
-jwtSVIDTTL 300
# Агент при старте забирает свой JWT-SVID через workload API
spire-agent api fetch jwt -audience mcp.flowlink.ai -spiffeID \
spiffe://flowlink.ai/agent/claude-code/session-a7f3b2

Полученный JWT-SVID — это и есть AI agent identity. Обратите внимание на короткий TTL: 300 секунд для JWT, 1 час для x509. Сессия агента живёт час — значит и её identity не должна пережить задачу. Если хакер украдёт токен, через 5 минут он превратится в тыкву. Содержимое токена несёт контекст, недоступный из обычного логина:

JWT-SVID payload
json
{
"sub": "spiffe://flowlink.ai/agent/claude-code/session-a7f3b2",
"iss": "spiffe://flowlink.ai",
"exp": 1779864000,
"aud": "mcp.flowlink.ai",
"flowlink.agent_type": "claude-code",
"flowlink.task": "refactor-auth-module",
"flowlink.owner": "team-platform",
"flowlink.scopes": ["bash", "read", "write:src", "mcp:github"],
"flowlink.budget_usd": 12.50,
"flowlink.human_approval": false
}

Теперь в audit journal каждая запись однозначно связана с конкретной сессией агента, конкретной задачей и конкретным человеком-делегатором. Это фундамент, без которого все остальные пилары бессмысленны — нельзя применять политику к субъекту без identity.

Принцип 2: Device и runtime-постура

Пятый тезис NIST 800-207: предприятие «мониторит и измеряет целостность и состояние безопасности всех активов непрерывно». Для ноутбука это posture-check (антивирус обновлён, диск зашифрован). Для AI-агента «device» — это процесс и его runtime: какие syscall'ы он делает, какие файлы трогает, не отклонилось ли поведение от заявленной задачи.

Здесь ключевую роль играют механизмы уровня ядра Linux. Подробно defence-in-depth для агентов (eBPF LSM, mount namespaces, capabilities) мы разбирали в статье про постановку Claude Code в production — здесь сосредоточимся на том, как runtime-контроль встраивается в Zero Trust-цикл. Суть в том, что проверка постуры должна быть не одноразовым gate'ом при старте, а потоком телеметрии, на который опирается policy engine:

monitor_agent_exec.bpf.c
c
// eBPF-программа: непрерывно докладывает posture-сигналы агента
SEC("lsm/bprm_check_security")
int BPF_PROG(monitor_agent_exec, struct linux_binprm *bprm) {
char comm[16];
bpf_get_current_comm(&comm, sizeof(comm));
// Агент должен запускать только команды из декларации задачи
if (is_flowlink_agent(comm) && !declared_in_task(bprm->filename)) {
emit_event(&((struct posture_event){
.kind = UNEXPECTED_EXEC,
.agent = current_agent_id(),
.target = bprm->filename,
}));
// PEP решит: заблокировать или запросить human approval
return -EPERM;
}
return 0;
}

Дополнительно жёсткий seccomp-bpf-профиль отсекает syscall'ы, которые агенту в принципе не нужны: ptrace, mount, unshare, keyctl, bpf. Это не «правило политики», а физическое ограничение ядра — даже если policy engine скомпрометирован, агент не сможет делать то, чего ядро не позволяет. Таким образом device-пилар становится последней линией обороны и независимым источником достоверных фактов о поведении.

Принцип 3: Сеть — mTLS без неявного доверия

Второй тезис NIST: «вся коммуникация защищена независимо от расположения в сети». Это прямое убийство идеи «внутренний трафик доверенный, внешний — нет». Для AI-агента это значит, что соединение агента с MCP-сервером внутри того же VPC должно быть зашифровано и аутентифицировано точно так же, как соединение с внешним SaaS.

На практике это mTLS с mutual SPIFFE-аутентификацией. Ни один компонент не общается plaintext, ни у кого нет «общего пароля от MCP». Каждый участник предъявляет свой SVID, и доверие устанавливается через единый trust bundle. Подробно про защиту credential-потока между агентом и инструментами — в статье про предотвращение утечек MCP-кредов, а здесь — рабочая конфигурация PEP на стороне MCP-gateway:

/etc/flowlink/mcp-gateway.conf
# /etc/flowlink/mcp-gateway.conf — mTLS между агентом и MCP-сервером
server {
listen 8443 ssl;
server_name mcp.flowlink.ai;
# Сертификат gateway как workload (SVID), валидируется через SPIFFE bundle
ssl_certificate /var/lib/spire/agent/svid.pem;
ssl_certificate_key /var/lib/spire/agent/svid.key;
# ОБЯЗАТЕЛЬНО mutual: агент тоже предъявляет свой SVID
ssl_client_certificate /var/lib/spire/trust/bundle.pem;
ssl_verify_client on;
ssl_verify_depth 2;
# Отклоняем соединения с истекшим/аннулированным SVID
if ($ssl_client_verify != SUCCESS) { return 496; }
location / {
# PEP: проксируем SPIFFE-ID дальше, в PDP, вместе с телом tool-вызова
proxy_set_header X-SPIFFE-ID $ssl_client_s_dn_cn;
proxy_set_header X-Task-ID $http_x_task_id;
proxy_pass http://127.0.0.1:9000; # → Policy Decision Point
}
}

Теперь даже если кто-то получит сетевой доступ к mcp.flowlink.ai, без валидного SVID из trust domain flowlink.ai он не пройдёт даже handshake. Никаких shared API-ключей в .env, никаких «внутренних» эндпоинтов без TLS. Сеть перестаёт быть источником доверия — им становится криптография и policy.

Принцип 4: Application / Workload — Policy Decision Point на каждый вызов

Это ядро Zero Trust, выраженное в архитектурных компонентах NIST 800-207: Policy Enforcement Point (PEP) перехватывает запрос, Policy Decision Point (PDP) — он же Policy Engine — принимает решение, а Policy Administrator ведёт журнал. PEP и PDP всегда разделены: тот, кто исполняет решение, не должен сам его принимать. Иначе компрометация одного компонента открывает всё.

Для AI-агента PEP — это MCP-gateway и eBPF-shield из предыдущих разделов. PDP — отдельный сервис с policy engine на OPA (Open Policy Agent), куда сходятся все сигналы: identity из SPIRE, posture из eBPF, бюджет из governor, классификация данных. Решение описывается декларативно на Rego:

flowlink.rego
rego
package flowlink.authz
# По умолчанию — запрет. Zero Trust не выдаёт права «на всякий случай».
default allow := false
allow if {
# 1. Identity: SVID из доверенного trust domain, тип агента заявлен
input.identity.trust_domain == "flowlink.ai"
input.identity.agent_type == "claude-code"
# 2. Запрошенный инструмент входит в scope текущей сессии
input.action.tool in input.identity.scopes
# 3. Команда прошла статический анализ: деструктивных паттернов нет
not destructive(input.action.command)
# 4. Budget governor: в сессии ещё остались средства
input.session.budget_remaining > 0
# 5. Runtime-постура чиста: за последние 60с не было аномалий от eBPF
input.posture.anomaly_score < 0.3
# 6. Данные: операция не затрагивает restricted-секреты без одобрения
not touches_restricted(input.action)
}
destructive(cmd) if {
lower(cmd) == destructive_patterns[_]
}
destructive_patterns := [
"rm -rf /", "DROP TABLE", "DROP DATABASE",
":(){ :|:& };:", # fork-bomb
"dd of=/dev/sda", "mkfs",
]
# restricted-данные требуют явного human approval в момент вызова
touches_restricted(action) if {
action.resource.classification == "restricted"
not input.session.human_approval
}

Trust Algorithm в Rego

Обратите внимание на структуру allow: каждое условие — отдельный сигнал доверия. Это и есть Trust Algorithm из NIST 800-207, только вместо абстракции — читаемый Rego. Уберите любое условие — и агент получает право, которого у него быть не должно.

Важный нюанс: решение PDP не кешируется надолго. NIST требует per-session авторизации; для агента мы идём дальше — per-call. Стоимость одного вызова OPA с загруженными данными — единицы миллисекунд; на фоне секунды LLM-генерации это шум. Зато если в середине сессии eBPF зафиксирует аномалию или бюджет иссякнет, следующий tool-call будет отклонён немедленно, без ожидания «переавторизации в конце часа».

Принцип 5: Данные и модели

Последний пилар — защита самих данных. Для AI-систем сюда попадают четыре категории, которых нет в классическом DLP: промпты, RAG-корпус, embedding'и и веса моделей. Контроль доступа к ним должен подчиняться тем же правилам, что и к таблицам в БД: классификация + авторизация на каждое чтение.

Возьмём RAG поверх корпоративного knowledge base. Векторы лежат в pgvector, и «агент с доступом к базе» не должен автоматически видеть всё. Классификация записей и проверка scope'ов выполняется на уровне SQL-запроса:

rag-search.sql
sql
-- RAG-поиск с enforcement-фильтром по classification и scope агента
WITH agent AS (
SELECT :scope_bits AS scopes, :session_id AS sid
)
SELECT chunk.id, chunk.text,
chunk.embedding <=> :query_vec AS distance
FROM document_chunks chunk
CROSS JOIN agent
WHERE chunk.classification IN ('public', 'internal')
OR (chunk.classification = 'restricted'
AND 'read:restricted' = ANY(agent.scopes)
AND EXISTS (SELECT 1 FROM approvals a
WHERE a.session_id = agent.sid
AND a.resource_id = chunk.id))
ORDER BY distance
LIMIT 10;

Так агент никогда не «случайно» подтянет в контракт секретный договор — фильтр сработает на уровне БД, ещё до того, как текст попадёт в промпт. Дополнительно:

  • Промпты проходят санитизацию: инъекции и PII редачатся до отправки LLM-провайдеру;
  • Секреты никогда не попадают в промпт напрямую — они выдаются через credential vault по принципу just-in-time, на конкретный tool-call и с аудитом;
  • Веса моделей и embedding'и классифицируются как restricted-активы: их экспорт за пределы trust domain приравнен к выгрузке исходников.

Наконец, к данным относится и бюджет потребления моделей. Расход токенов — это тоже доступ к ресурсу, и NIST-логика применима к нему в полной мере: лимит задаётся в identity агента, governor списывает стоимость каждого вызова, а при исчерпании PDP перестаёт выдавать allow. Подробнее — в материале про budget governor для LLM-вызовов.

Эталонная архитектура

Соберём все пять пиларов в единую картину. Ниже — текстовая диаграмма того, как компоненты FlowLink реализуют эталонную архитектуру Zero Trust из NIST 800-207 (PEP, PDP, PA) применительно к автономным агентам. Каждый блок — независимый сервис со своим SVID и своим пределом ответственности; компрометация любого одного не разрушает всю систему.

Эталонная архитектура Zero Trust для AI-агентов

Поток одного tool-вызова: агент с SVID стучится в PEP (MCP gateway); PEP мува запрос в PDP; PDP опрашивает vault (есть ли секрет), eBPF-shield (чиста ли постура) и governor (есть ли бюджет); на основе Rego-политики выносит allow или deny; решение вместе с полным контекстом уходит в append-only audit journal; если allow — PEP исполняет действие и списывает бюджет. Ни одна стрелка на схеме не подразумевает «доверия по умолчанию».

План внедрения за 90 дней

Не пытайтесь построить всю архитектуру сразу — это самый частый повод свернуть Zero Trust-инициативу. Делайте пилары последовательно, каждый приносит измеримую пользу сам по себе. Вот проверенный на практике roadmap:

Внедрение Zero Trust для AI-агентов за 90 дней

Последовательный rollout пяти пиларов NIST 800-207 — от identity до зрелости. Каждый этап приносит измеримую пользу сам по себе.

  1. Дни 1–15 · Identity

    Разверните SPIRE, заведите trust domain flowlink.ai, выпустите SVID всем агентам и MCP-серверам. Перестаньте запускать агентов под учётками людей. Метрика: 100% агентов имеют verifiable identity, в логах видна сессия агента, а не пользователь dev.

  2. Дни 16–30 · Network

    Включите mutual TLS на всех MCP-соединениях, убейте последний plaintext-эндпоинт, добавьте DNS-фильтрацию. Метрика: ноль plaintext-коннектов, каждый MCP-вызов несёт X-SPIFFE-ID.

  3. Дни 31–45 · Workload

    Поднимите PDP на OPA, опишите базовые политики (destructive-команды, whitelist инструментов) и проведите через него весь MCP-трафик. Метрика: каждый tool-call получает явный allow/deny с причиной в журнале. См. разбор защиты Cursor в статье про опасные команды.

  4. Дни 46–60 · Device

    Накатите seccomp-профиль и eBPF-shield на runtime, заведите поток posture-телеметрии в PDP. Метрика: аномальное поведение агента меняет решение PDP за < 1 секунды; как мониторить — в материале про серверную активность агентов.

  5. Дни 61–75 · Data

    Классифицируйте RAG-корпус и секреты, включите enforcement-фильтры в pgvector, подключите credential vault с JIT-выдачей. Метрика: restricted-данные видны только с явным approval.

  6. Дни 76–90 · Зрелость

    Добавьте budget governor, Prometheus-дашборды, alert'ы на аномалии и регулярные tabletop-учения. Метрика: среда проходит аудит OWASP / NIST 800-207 без критических замечаний.

Итог

Zero Trust для AI-агентов — это не продукт и не галочка в чеклисте. Это переосмысление субъекта доступа: вместо «доверенного пользователя в доверенной сети» мы получаем проверяемую workload-identity, mTLS на каждом соединении, PDP на каждый вызов и непрерывный контроль runtime и данных. NIST 800-207 даёт каркас из пяти пиларов; задача — честно применить каждый к реалиям автономных LLM-систем, а не переносить корпоративные SSO-шаблоны туда, где они не работают.

Технологии для этого уже成熟: SPIFFE/SPIRE, eBPF, seccomp, OPA, pgvector, mTLS. FlowLink собирает их в единый каркас — policy engine, eBPF-shield, MCP gateway, credential vault, budget governor и audit journal — так что не приходится склеивать пять инструментов руками. Начните с identity, остальное наворачивается инкрементально, и за 90 дней вы приходите к архитектуре, где ни один агент не получает доступ «по умолчанию».

Плюсы и минусы подхода Zero Trust для агентов

Плюсы

  • Проверяемая workload-identity (SPIFFE/SVID): действия агента однозначно атрибутируются, а не прячутся за учёткой разработчика
  • Per-call авторизация в OPA блокирует аномалию или исчерпание бюджета немедленно, без ожидания конца сессии
  • mTLS на каждом соединении убирает иллюзию «доверенного внутреннего трафика» — доверяет только криптография
  • eBPF и seccomp — последняя линия обороны на уровне ядра, независимая от policy engine

Минусы

  • Эксплуатационная сложность: SPIRE, OPA, eBPF, vault, governor — пять систем вместо одной
  • Нужна редкая экспертиза: eBPF/LSM, Rego-политики, SPIFFE trust domains
  • Per-call проверка добавляет задержку (единицы миллисекунд на вызов) — незначительно на фоне LLM, но измеримо
  • 90-дневный rollout требует последовательности — попытка построить всё сразу чаще сворачивает инициативу

Часто задаваемые вопросы

Что такое Zero Trust для AI-агентов и чем он отличается от классического?

Это применение модели NIST SP 800-207 к автономным LLM-агентам. Главное отличие: для человека доступ проверяется «на каждую сессию», а агент делает сотни tool-вызовов в час — поэтому проверка переносится на каждый вызов. Субъектом доступа становится не учётка разработчика, а сам агент с собственной криптографической identity (SPIFFE/SVID), а доверие определяется policy engine на основе identity, runtime-постуры, сети и контекста данных.

Зачем агенту собственная identity, если есть учётка разработчика?

Потому что под учёткой человека действия агента в логах неотличимы от действий разработчика: если агент зальёт секрет в публичный gist, следствие покажет на человека. NIST 800-207 требует identity у каждого ресурса. AI-агенту выдаётся SVID (SPIFFE Verifiable Identity Document) с коротким TTL (например, 300с для JWT), атрибутами задачи и явными scope'ами — он автоматически аннулируется по завершении сессии.

Почему авторизация должна быть на каждый tool-вызов, а не на сессию?

Скорость делегирования: агент сам решает дернуть внешнее API или запустить curl в середине задачи. Если проверка не встроена в критический путь каждого действия, агент её «обогнёт». Per-call решение в OPA стоит единицы миллисекунд (шум на фоне секунды LLM-генерации), зато если eBPF зафиксирует аномалию или бюджет иссякнет, следующий tool-call будет отклонён немедленно — без ожидания «переавторизации в конце часа».

Что такое PEP и PDP и зачем их разделять?

Policy Enforcement Point (PEP) перехватывает запрос и исполняет решение (например, MCP-gateway и eBPF-shield). Policy Decision Point (PDP) — отдельный сервис на OPA, который это решение принимает по Rego-политике. Разделение обязательно: тот, кто исполняет решение, не должен сам его принимать — иначе компрометация одного компонента открывает всю систему. PEP и PDP общаются через проверяемые identity и журналируются.

Сколько времени занимает внедрение и с чего начать?

Реалистичный roadmap — 90 дней с последовательным включением пиларов. Начинать надо с identity (SPIRE + SVID всем агентам), затем network (mTLS на MCP), workload (OPA), device (seccomp + eBPF) и data (RAG-фильтры + credential vault). Каждый пилар приносит измеримую пользу сам по себе — главное не пытаться построить всю архитектуру сразу, это самый частый повод свернуть инициативу.

Какие технологии нужны для Zero Trust AI-агентов?

Пять пиларов закрываются стеком: SPIFFE/SPIRE и JWT-SVID для workload-identity, eBPF и seccomp-bpf для runtime-постуры, mTLS с mutual SPIFFE-аутентификацией для сети, OPA/Rego как Policy Decision Point, и pgvector с enforcement-фильтрами плюс credential vault для данных. FlowLink собирает их в единый каркас (policy engine, eBPF-shield, MCP gateway, credential vault, budget governor, audit journal), чтобы не склеивать инструменты руками.

Готовы защитить свои AI-агенты?

Начните с бесплатного аудита безопасности ваших AI-инструментов.

Получить бесплатный аудит