{ "index": 98, "slug": "editorial-2025-04-mechanism-ai-data-privacy", "title": "Передача данных в AI: четыре проверки до отправки контекста", "excerpt": "Класс данных, условия обработки, сетевой маршрут и полномочия отвечают на разные вопросы. Разбираем, как соединить их в один fail-closed контроль и остановить передачу при пробеле в доказательствах.", "contentHtml": "

Симптом обычно выглядит безобидно: инженер копирует в AI-инструмент кусок лога, тикет или stack trace, а потом не может точно сказать, что именно ушло наружу. В настройках включён корпоративный тариф, сеть разрешает нужный домен, коллега устно подтвердил «можно». Но эти факты не доказывают одно и то же. Цена ошибки — раскрытие персональных данных или секрета, нарушение договорного условия, невозможность восстановить решение и остановка всего сценария до повторной проверки.

\n

Тезис статьи простой: передача контекста допустима только тогда, когда сходятся четыре независимых доказательства. Нужно знать класс записи, применимую policy и договорные условия, конкретный технический маршрут и полномочия человека на эту запись в этот срок. Если один слой неизвестен, система должна остановить hand-off и вернуть причину. Нельзя заменить отсутствующий факт более удобным фактом из другой колонки.

\n

Почему одного разрешения недостаточно

\n

Класс описывает содержимое. Например, public, internal или restricted. Это не название папки и не ощущение автора фрагмента. Класс должен иметь владельца и правило, по которому его присвоили. Удаление имени из строки тоже не меняет автоматически класс: структура события, редкий идентификатор и сочетание полей могут оставаться чувствительными.

\n

Policy отвечает на вопрос «допустима ли такая обработка». Договор уточняет условия для конкретного сервиса, тарифа, региона и функции: retention, обучение моделей, subprocessors или запрет внешнего хранения. Слово «корпоративный» не заменяет проверку этих условий. Одобрение продукта не является автоматически разрешением на любой payload.

\n

Egress отвечает на другой вопрос: куда и каким путём может уйти запрос. Это endpoint, proxy, firewall, DNS-политика или другой сетевой control. Разрешённый маршрут не делает данные допустимыми. Authorization отвечает ещё на один слой: какой владелец разрешил конкретную запись, конкретному requester, для конкретного destination и до какой даты.

\n
\"Маршрут
Каждый слой проверяет свой вопрос. Несовпадение на любом переходе закрывает передачу и сохраняет причину остановки.
\n

Механизм: четыре доказательства должны описывать одну операцию

\n

Рассмотрим запрос на анализ ошибки в платёжном сервисе. Инженер хочет передать AI фрагмент журнала. В нём есть время, тип операции, идентификатор клиента и текст исключения. Даже если значение идентификатора заменили на client-17, нужно отдельно решить, что осталось в записи и какой класс ей присвоен.

\n

Первое доказательство — карточка контекста. В ней есть стабильный идентификатор записи, версия, класс, владелец, срок действия и ссылка на правило классификации. Второе — policy и contract evidence для выбранной поверхности. Ссылка должна покрывать именно тот plan и тот режим, в котором работает инструмент. Третье — проверенный egress scope: destination и технический control должны совпадать с карточкой. Четвёртое — датированное решение владельца. Оно содержит record id, requester, destination, срок и причину.

\n

Проверка не должна начинаться с approval. Иначе человек сможет невольно «перекрыть» запрет класса. Она не должна начинаться с сети. Иначе доступный endpoint станет ложным доказательством допустимости. Сначала проверяют форму запроса и запись, затем допустимость, маршрут, доступ и срок полномочий. Только после этого можно передать результат в отдельный разрешённый workflow.

\n

Таблица диагностики

\n
Симптом → причина → проверка → действие
СимптомПричинаПроверкаДействие
«В логе нет имени, значит можно»Редактура смешана с классификациейСверить остаточную структуру, класс и owner ruleНе передавать; запросить классификацию или заменить запись на публичный пример
«У нас Enterprise-тариф»План принят за договорное условиеПроверить policy, retention и training terms для нужной функцииЗакрыть hand-off до появления ссылки и применимого scope
«Firewall уже разрешил домен»Сетевой control принят за решение о данныхСопоставить destination, route и egress scope с карточкойИспользовать только подтверждённый маршрут; не искать обход
«Коллега разрешал это раньше»Approval не привязан к record, requester или срокуСверить id записи, роль, requester, destination и expiryПолучить новое датированное решение или остановить передачу
«Неизвестно, что вернёт интеграция»Дополнительный context и внешние запросы не учтеныПроверить документацию конкретной surface и включённые функцииОставить данные локально до подтверждения всех outbound paths
\n

Учебный пример с отрицательным путём

\n

Ниже — ограниченный пример на JavaScript. В нём используются только фиксированные строки, нет настоящего лога, PII, секрета, файла, сети, вызова модели или production side effect. Функция не отправляет payload. Она показывает только контракт: запись с запрещённым классом должна остановиться до проверки approval.

\n
const request = createFixedContextRequest('restricted-log-shape');\nconst decision = assessEgress(request);\nconst result = stopWhenClosed(decision);\n\nconsole.log(decision.accepted);              // false\nconsole.log(decision.reason);                // class-not-allowed\nconsole.log(result.payloadReleased);         // false\nconsole.log(result.nextAction);              // ask-data-owner\n\n// В этом учебном примере нет HTTP-вызова.
\n

Реальная реализация должна проверять строгую схему входа. Не принимайте лишние поля, отсутствующий scope, поддельную authorization или просроченную дату как частично корректный запрос. Fail-closed означает конкретный результат: accepted: false, причина, ссылка на проверенный источник и следующий владелец вопроса. Это не доказывает, что технология всегда запрещена. Это доказывает только, что текущих фактов недостаточно для данной передачи.

\n

Как выполнить проверку

\n
  1. Остановите копирование. Назовите record id и не открывайте AI-поверхность ради «быстрой проверки».
  2. Опишите класс. Зафиксируйте содержимое, версию классификации, owner и правило. Не считайте редактирование доказательством безопасности.
  3. Сверьте policy и contract. Проверьте plan, feature, region, retention и другие условия, которые относятся к выбранной surface.
  4. Проверьте маршрут. Запишите destination, route и сетевой control. Убедитесь, что они совпадают с разрешённым scope.
  5. Проверьте полномочия. Сопоставьте requester, access к record, роль владельца, record id и expiry. Старое общее одобрение не переносится автоматически.
  6. Выберите outcome. При полном совпадении передайте только разрешённый контекст в authorised workflow. При пробеле сохраните payload локально, запишите reason и назначьте следующий вопрос.
\n

Что могут и чего не могут доказать официальные документы

\n

Документация конкретного AI-продукта может описывать обработку prompt, добавление repository context или отдельный внешний поиск. Это помогает обнаружить дополнительные границы egress. Но такая документация не классифицирует ваш лог и не выдаёт сотруднику право на его раскрытие.

\n

Сетевое правило снижает риск неправильного endpoint, но не видит смысл payload. DPA и условия сервиса помогают ответить на вопрос о permitted processing, но не подтверждают, что человек имеет доступ к записи. NIST описывает policy-based access и неявное доверие к network location как разные вещи. Эти источники формируют вопросы для проверки; они не дают универсального вердикта «можно передавать».

\n

Ограничения

\n

Четыре проверки не заменяют DLP, data inventory, юридическую оценку, access control или технический мониторинг. Классификация может ошибиться. Документ поставщика может измениться. Proxy может быть настроен не так, как написано в схеме. Поэтому в рабочей системе храните версию evidence, дату проверки, применимый scope и границу, которую документ не покрывает.

\n

Не обещайте результат, которого не измеряли. Эта статья не утверждает, что конкретная интеграция сохраняет или не сохраняет prompt, не обучает на нём модели и не гарантирует отсутствие утечки. Учебный код не является доказательством свойств production. Его проверяемый результат уже: запрещённый класс не приводит к передаче.

\n

Критерий готовности

\n

Контроль готов к ограниченному применению, когда другой инженер может взять одну карточку без payload и воспроизвести весь вопрос: какой класс, какая policy и договорная версия, какой destination и route, кто разрешил, какой срок. Для каждого пробела система возвращает accepted: false, reason, citation и next action; ни один отрицательный case не вызывает внешний запрос. Положительный outcome допускает только тот scope, который совпал во всех четырёх доказательствах. Если эти условия нельзя проверить, готов не hand-off, а только следующий вопрос владельцу данных.

\n

Проверяемые источники

\n" }