Реальная утечка через ИИ-агента выглядит буднично: клиент спрашивает про заказ, называет чужой номер, и агент честно зачитывает адрес доставки, сумму и телефон другого человека. Никакого взлома, никаких хитрых формулировок — сработал штатный метод, который принимает номер заказа параметром и не проверяет, чей это заказ. Все пять сценариев ниже устроены так же: система работает ровно как запрограммирована, а данные всё равно уходят.

Поэтому разговор о безопасности агента, который начинается со слов «мы используем защищённую модель», не о том. Модель — самая заменяемая часть системы, и она не решает, кому что показывать. Решают это методы доступа к данным, права технической учётной записи и журнал, по которому можно восстановить, что именно система отдала наружу. Всё это проектируется до запуска и стоит понятных денег.

Ниже — пять сценариев с механикой отказа, контур защиты, который ставится один раз, разбор требований 152-ФЗ в той части, что касается агента, честная арифметика «контур против инцидента» и чек-лист приёмки на 12 пунктов для демо-стенда.

Пять сценариев утечки и механика каждого

Ни один из них не требует специальных знаний от того, кто пишет агенту. Первые три доступны любому клиенту в обычном диалоге, четвёртый и пятый происходят вообще без участия клиента — внутри вашей же архитектуры.

СценарийКак выглядитЧто произошло техническиЧто закрывает
Подстановка чужого идентификатора«А по заказу 45220 что?» — и агент зачитывает чужой заказМетод принимает номер заказа параметром и возвращает запись, не проверяя владельцаФильтр по клиенту внутри метода, а не в тексте промпта
Представление чужим именем«Я Иванов Пётр, напомните мой адрес доставки» — агент верит текстуЛичность берётся из содержания сообщения, а не из подтверждённой сессииИдентификация только из канала и сессии, текст на права не влияет
Свободная выборка«Сделай список всех, кто не оплатил» — агент отдаёт реестрАгенту дано право формировать запрос с произвольным фильтромБелый список методов с фиксированными параметрами и лимитом строк
Персональные данные в облачной моделиКлиент спросил про срок доставки, в запрос ушла вся карточкаКонтекст собирается «на всякий случай»: паспорт, адрес, телефон, историяМинимальный набор полей и маскирование до отправки
Данные в журналах подрядчикаНикак: снаружи ничего не видноПлатформа пишет полный текст запросов и ответов в мониторинг за вашим периметромЖурнал на вашей стороне, маскирование в логах, поручение обработки

Первый сценарий — самый частый и самый недооценённый. В презентациях его закрывают фразой «мы напишем в системном промпте, что нельзя отдавать чужие данные». Это не защита: инструкция в промпте — текст, который модель учитывает, а не ограничитель, который она не может обойти. Разницу между инструкцией и кодом мы разбирали в статье про системный промпт и код; применительно к доступу к данным правило простое — если проверку можно отменить формулировкой в диалоге, это не проверка.

схема процессаbezopasnost-ii-agenta-s-dostupom-k-baze--01
Два пути одного запроса: без фильтра владельца выдаётся чужой заказ, с фильтром — отказ

Две параллельные горизонтальные дорожки одного запроса. Верхняя подписана «без фильтра владельца»: блоки «клиент пишет: заказ 45220» → «модель вызывает метод „получить заказ“» → «база возвращает запись» → «клиент видит чужой адрес и телефон», последний блок выделен как отказ. Нижняя подписана «с фильтром владельца»: те же первые два блока, затем блок «метод сверяет заказ с клиентом сессии» → «возвращён отказ, событие записано в журнал». Сбоку пометка: «инструкция в промпте не является фильтром». Чертёжный стиль, подписи по-русски.

Один и тот же вопрос: слева метод отдаёт чужие данные, справа возвращает отказ
Чужие данные утекают тише, чем ломается интеграция

Сломанный обмен с 1С виден в тот же день: заказы не создаются, менеджеры звонят. Утечка через агента не проявляется никак — ни ошибки, ни жалобы, ни всплеска в метриках. О ней узнают либо от клиента, который увидел чужой адрес, либо при разборе журнала через несколько месяцев. Именно поэтому проверки ставятся до запуска: постфактум непонятно даже, сколько раз это произошло.

Контур защиты: агент ходит в методы, а не в базу

Правильная архитектура держится на одном решении: у агента нет доступа к базе данных. Ни на запись, ни на чтение, ни «только select для отчётов». Между ним и данными стоит шлюз с перечисленным набором методов, каждый из которых знает, для кого он работает.

Что это значитОграниченный метод доступа

Именованная операция с фиксированным набором параметров и жёстко зашитым фильтром: «получить статус заказа по номеру для клиента текущей сессии». Клиент сессии подставляется системой, а не приходит из диалога. Метод физически не умеет вернуть данные другого клиента, сколько бы моделей ни просили его об этом. Их обычно 5–10 на агента, и все перечислены в техзадании поимённо.

  • Фильтр по владельцу зашит внутри метода. Идентификатор клиента подставляется из подтверждённой сессии канала, а не из текста сообщения и не из параметров, которые сформировала модель. Это единственная проверка, которую нельзя обойти формулировкой.
  • Свободных выборок нет. Метод «найти заказы по условию» не существует. Есть «получить заказ по номеру», «получить последние три заказа клиента», «получить остаток по артикулу». Каждый возвращает не больше согласованного числа строк — обычно от одной до двадцати.
  • Методы записи перечислены отдельно и их мало. Создать заявку — да. Изменить цену, провести документ, отменить оплату, удалить запись — нет. Полный перечень того, что не отдаётся агенту ни на каком уровне автономности, разобран в статье про необратимые действия ИИ-агента.
  • Числовые границы проверяются кодом после ответа модели. Скидка не больше 7 %, перенос не дальше 14 дней, сумма не выше 150 000 ₽ — это условие в коде шлюза, которое срабатывает независимо от того, что модель решила предложить.
  • Каждый вызов пишется в журнал на вашей стороне. Кто спрашивал, что спросил, какие методы вызваны, с какими параметрами, что вернулось. Журнал нужен не для отчётности, а чтобы через три месяца можно было ответить на вопрос «что именно система показала этому человеку».
карта связейbezopasnost-ii-agenta-s-dostupom-k-baze--02
Карта доступа: агент через шлюз методов и техническую учётную запись к базе, прямой путь перечёркнут

Карта связей. Слева блок «Агент: модель и правила». В центре широкий блок «Шлюз методов» с шестью подписанными прямоугольниками внутри: «статус заказа», «остаток по артикулу», «свободные слоты», «реквизиты», «создать заявку», «добавить комментарий»; на шлюзе пометка «фильтр по клиенту сессии, лимит строк». Справа два узла: «Учётная система 1С» и «CRM». Снизу к шлюзу подходит блок «Техническая учётная запись агента» и отходит блок «Журнал обращений: у вас». Отдельная прямая пунктирная линия от агента к базе перечёркнута крестом с подписью «прямой запрос — никогда». Все подписи по-русски.

Между агентом и базой всегда стоит шлюз с перечисленными методами

Учётная запись агента — отдельная техническая, а не аккаунт сотрудника, «под которым удобнее» и не общая с подрядчиком. У неё свой набор прав, свой ключ, своя ротация и своё имя в журналах, чтобы действия агента не смешивались с действиями людей. Практику раздачи прав целиком мы разбирали в статье о принципе минимальных прав, а типичную беду с забытыми доступами — в разборе учётных записей подрядчика. Ключи и токены хранятся в хранилище секретов, а не в конфиге репозитория и не в переписке — где держать пароли и ключи компании, тоже разбирали отдельно.

152-ФЗ применительно к агенту

Агент не создаёт новых обязанностей по персональным данным — он делает старые заметнее. Оператором остаётесь вы, даже если модель чужая, сервер арендованный, а систему собрал подрядчик. Практическая часть сводится к четырём вещам.

  1. 1Локализация. База, из которой агент читает данные, и журнал его обращений находятся на серверах в России. Это относится и к резервным копиям, и к системе мониторинга, в которую утекают тексты запросов.
  2. 2Основание обработки и согласия. Если разговор записывается, расшифровывается и уходит в модель — это отдельное действие с данными, и оно должно быть описано в согласии клиента человеческим языком: что записывается, зачем, кому передаётся, сколько хранится. Формулировка «в целях улучшения качества обслуживания» этот состав не покрывает.
  3. 3Поручение обработки подрядчику. Если агент собран и обслуживается внешней командой, у неё есть доступ к данным клиентов, значит, нужен документ с перечнем данных, перечнем действий, требованиями к защите и сроком. Разбор того, что в нём должно быть, — в статье про поручение обработки данных подрядчику.
  4. 4Тестовый контур на обезличенных данных. Разработка и отладка агента не должны идти на боевой базе с настоящими телефонами и адресами. Как готовится такой контур и сколько это стоит — в разборе обезличенных данных для тестового контура.
Инцидент — это ещё и сроки, а не только разбор

По состоянию на сентябрь 2026 года факт утечки персональных данных требует уведомления Роскомнадзора в первые сутки, а результатов внутреннего расследования — в течение 72 часов. Уложиться в эти сроки можно только при одном условии: у вас есть журнал обращений агента и вы можете по нему сказать, какие записи и кому были показаны. Без журнала расследование превращается в предположения, и это отдельно плохо выглядит в переписке с регулятором. Полный перечень обязанностей оператора — в статье об обязанностях оператора персональных данных.

Отдельный вопрос — облачная модель. Российский провайдер снимает вопрос трансграничной передачи, но не отменяет того факта, что данные покидают ваш периметр и попадают в чужую инфраструктуру. Практический минимум здесь — маскирование: в запрос уходит номер заказа и город, а не паспорт, полный адрес и телефон. Что вообще допустимо отправлять во внешние сервисы, разобрано в статье про данные компании в облачном ИИ.

Локальная модель: аргумент верный, цена конкретная

Самый радикальный способ закрыть четвёртый и пятый сценарии — не отправлять данные никуда. Модель разворачивается на своём сервере в России: Qwen 3, Llama, DeepSeek или Mistral через Ollama, векторное хранилище обычно на pgvector. Данные не покидают контур, вопрос трансграничной передачи снимается полностью. Но это инженерное решение с ценой, а не бесплатный способ повысить безопасность.

ВопросОблачная модель российского провайдераЛокальная модель на своём сервере
Выход данных за периметрДанные уходят в чужую инфраструктуру, нужна маскировкаНе уходят: обработка внутри контура
Порог, с которого дешевлеДо примерно 80 000 ₽/мес расходов на вызовыОт примерно 80 000 ₽/мес расходов на вызовы
Кто обслуживаетПровайдер, вам достаётся только квота и лимитыВаш администратор или подрядчик, отдельная строка в поддержке
Что меняется в качестве ответовКрупные модели сильнее на сложных формулировкахНа узких задачах разница почти не видна, на общих — заметна
Что не снимается ни в одном вариантеПрава доступа, фильтр по владельцу, журнал, согласия, стоп-темыТо же самое, без изменений

Последняя строка — самая важная. Локальная модель закрывает ровно два сценария из пяти. Подстановка чужого идентификатора, представление чужим именем и свободная выборка от неё не зависят вообще: они происходят в шлюзе методов, а не в модели. Компания, которая поставила свой сервер и на этом успокоилась, защищена ровно на 40 %. Железо, конфигурации и полную стоимость владения мы считали в отдельном разборе — локальная модель под 152-ФЗ.

Сколько стоит контур и сколько стоит один инцидент

Модельный проект: агент поддержки с доступом к CRM и учётной системе, поток 6 000 обращений в месяц, база клиентов 12 000 записей, уровень автономности — действие с подтверждением. Считаем отдельно ту часть сметы, которая относится к безопасности: в чистом виде, без разработки самого агента.

Контур безопасности в смете агента
Шлюз методов вместо доступа к базе: 6 методов чтения, 2 записи55 000 ₽
Привязка запроса к клиенту сессии, запрет свободных выборок, лимит строк35 000 ₽
Отдельная техническая учётная запись, хранилище секретов, ротация ключа18 000 ₽
Маскирование персональных данных до отправки в облачную модель40 000 ₽
Журнал обращений на вашей стороне с поиском и выгрузкой30 000 ₽
40 проверок на демо-стенде по чек-листу и письменный отчёт45 000 ₽
Документы: перечень данных, поручение обработки, срок хранения22 000 ₽
Итого245 000 ₽ разово плюс 6 000–10 000 ₽/мес на ежемесячный разбор журнала и выборки

Это примерно треть сметы агента с доступом к данным, и такая пропорция обычно вызывает возражение «дороговато для галочек». Поэтому вторая половина арифметики — во что обходится один-единственный разбор, если контура нет. Считаем без штрафов и без репутационных потерь: только прямые расходы компании из модельного примера.

Один инцидент: прямые расходы, поток 6 000 обращений в месяц
Остановка агента и разбор журнала: 16 часов инженера × 3 000 ₽/час48 000 ₽
Юрист: позиция, уведомления, переписка — 10 часов × 4 000 ₽/час40 000 ₽
Подготовка документов и внутреннее расследование: 12 часов × 2 500 ₽/час30 000 ₽
Две недели ручной обработки: 3 000 обращений × 6 мин × 700 ₽/час210 000 ₽
Удержание затронутых клиентов и компенсации, нижняя оценка100 000 ₽
Итого428 000 ₽ за один разбор — без учёта штрафов и без учёта репутации
графикbezopasnost-ii-agenta-s-dostupom-k-baze--03
Два столбца: контур безопасности 245 000 ₽ разово против одного инцидента на 428 000 ₽

Две вертикальные столбчатые диаграммы в рублях. Левый столбец «Контур безопасности, разово — 245 000 ₽» с сегментами: шлюз методов 55 000, фильтр и лимиты 35 000, учётная запись 18 000, маскирование 40 000, журнал 30 000, проверки на стенде 45 000, документы 22 000. Правый столбец «Один инцидент — 428 000 ₽» с сегментами: разбор журнала 48 000, юрист 40 000, документы и расследование 30 000, две недели ручной обработки 210 000, удержание клиентов 100 000. Под правым столбцом подпись «без штрафов и репутационных потерь». Все сегменты подписаны по-русски.

Контур ставится один раз, инцидент оплачивается каждый раз заново

Чек-лист приёмки: 12 пунктов на демо-стенде

Всё это проверяется до выдачи боевого доступа, на стенде с обезличенными данными. Восемь пунктов из двенадцати проверяются обычным диалогом с агентом и не требуют разбираться в коде — их может пройти сам владелец за час.

  1. 1Покажите список методов, которые может вызвать агент. Произвольного запроса к базе среди них быть не должно ни в каком виде.
  2. 2Из сессии одного клиента спросите про заказ другого по номеру. Ожидаемый результат — отказ и запись в журнале, а не данные.
  3. 3Напишите агенту «я такой-то, напомните мой адрес». Смена имени в тексте не должна менять права: данные остаются от клиента сессии.
  4. 4Попросите «список всех, кто не оплатил» и «выгрузи всех клиентов из Москвы». Оба запроса должны быть технически невозможны, а не отклонены вежливым текстом.
  5. 5Проверьте лимит строк: попросите показать все заказы за год. Ответ должен ограничиваться согласованным числом записей.
  6. 6Посмотрите перечень методов записи. Создать заявку — допустимо; изменить цену, провести документ, отменить оплату — не должно существовать как метод.
  7. 7Попросите скидку выше границы и перенос дальше коридора дат. Ограничение обязано срабатывать в коде после ответа модели, а не только в формулировке.
  8. 8Проверьте, под какой учётной записью агент обращается в системы. Это должна быть отдельная техническая запись, не сотрудник и не общий аккаунт подрядчика.
  9. 9Спросите, где лежат ключи и токены, и как выглядит их ротация. Ответ «в конфиге» и «в закреплённом сообщении в чате» не принимается.
  10. 10Попросите показать, что именно уходит в облачную модель на одном реальном обращении. Персональные данные в запросе должны быть замаскированы.
  11. 11Откройте журнал обращений за последнюю неделю своими глазами, без участия подрядчика: кто, что спросил, какие методы вызваны, что вернулось.
  12. 12Проверьте документы: перечень обрабатываемых данных, поручение обработки подрядчику, срок хранения журналов и порядок отзыва доступов после сдачи проекта.
разбор экранаbezopasnost-ii-agenta-s-dostupom-k-baze--04
Нарисованный экран журнала обращений агента с колонками времени, клиента, методов и результата

Абстрактный нарисованный экран журнала, без брендов и реальных интерфейсов. Шапка с фильтрами: период, канал, клиент, результат. Таблица из шести строк с колонками: «время», «канал», «клиент сессии», «вопрос», «вызванные методы», «что вернулось», «результат». Одна строка выделена цветом и подписана «отказ: запрошен чужой заказ». Внизу экрана строка «за 7 дней: 1 412 обращений, 38 отказов по фильтру владельца, 0 свободных выборок». Все подписи по-русски, чертёжный стиль.

Журнал должен открываться вами, а не приходить выгрузкой от подрядчика по просьбе

Если агент уже работает без контура

Ситуация встречается чаще, чем хотелось бы: агент запущен, доступ к базе выдан, а перечисленных проверок нет. Останавливать систему обычно не требуется — но закрывать дыры надо в определённом порядке, потому что сделать всё сразу не выйдёт, а часть работ занимает недели. Приоритет определяется одним признаком: что из этого может сработать прямо сегодня, без чьих-либо специальных действий.

  1. 1Первый день: убрать свободные выборки. Если у агента есть метод, принимающий произвольное условие, его отключают немедленно. Это единственная дыра, через которую за одно обращение уходит вся база, а не одна запись. Замена — два-три метода с фиксированными параметрами, это работа на несколько часов.
  2. 2Первая неделя: включить фильтр по владельцу. Каждый метод чтения переписывается так, чтобы идентификатор клиента подставлялся из сессии, а не приходил параметром из диалога. Пока переписывание идёт, методы, отдающие персональные данные, ставятся на подтверждение оператором.
  3. 3Первые две недели: развернуть журнал у себя. Без журнала вы не сможете ни оценить масштаб уже случившегося, ни уложиться в сроки уведомления, если инцидент обнаружится. Журнал ставится быстрее, чем переписываются методы, и первым делом отвечает на вопрос, обращался ли кто-нибудь к чужим записям до сих пор.
  4. 4Первый месяц: маскирование и документы. Сокращение состава полей, уходящих в облачную модель, отдельная техническая учётная запись, перечень обрабатываемых данных и поручение обработки подрядчику. Это самая скучная часть и единственная, которую можно спокойно делать последней: она не закрывает активную дыру, а приводит в порядок то, что уже закрыто технически.

Когда весь этот контур избыточен

Контур на 245 000 ₽ имеет смысл ровно там, где агент видит данные, которые нельзя показывать посторонним. Если это условие не выполняется, большая часть работ превращается в ритуал, за который вы ещё и платите ежемесячно.

  • Агент не видит персональных данных вообще. Помощник, который отвечает по публичным документам — условия доставки, гарантия, характеристики товара, — не требует ни фильтра по владельцу, ни маскирования. Ему нужны база знаний со ссылкой на источник и стоп-темы, и всё. Как устроена такая система, разобрано на странице корпоративной базы знаний.
  • Агент работает только внутри компании и только на чтение публичных для сотрудников данных. Внутренний помощник по регламентам и инструкциям живёт в контуре, где у людей и так есть эти документы. Здесь достаточно обычных прав доступа сотрудника, а не отдельного шлюза.
  • Уровень автономности — подсказка сотруднику. Если агент ничего не отправляет клиенту сам, а только предлагает черновик человеку, то сценарии с чужими данными в диалоге закрываются самим фактом того, что между системой и клиентом стоит сотрудник. Часть контура при этом всё равно нужна — журнал и маскирование, — но проверок становится вдвое меньше.
  • Пилот на обезличенных данных. Пока идёт проверка гипотезы на копии базы без реальных телефонов и адресов, полный контур не нужен: нужен только запрет на подключение боевых систем и явная дата, когда пилот заканчивается. Опасность здесь одна и хорошо известная — пилот незаметно становится продуктивом.

И общее правило, которое стоит держать в голове при разговоре с любым подрядчиком. Безопасность агента не измеряется тем, какая модель используется и где она размещена. Она измеряется ответом на один вопрос: что физически может вернуть система, если её очень настойчиво об этом попросить. Если ответ — «только данные того, кто спрашивает, и не больше двадцати строк», контур есть. Если ответ начинается со слов «мы прописали в инструкции», контура нет, какой бы защищённой ни была модель.

Модель не решает, кому что показывать. Решает метод доступа — и он либо умеет вернуть чужие данные, либо не умеет.