Глава 1. Zero Data Retention & Privacy: исключение утечек и PII/GDPR
Сотрудник «Ковчега» вставляет в ассистента выписку клиента, чтобы тот подготовил ответ на претензию. В выписке — ФИО, паспорт, IBAN, адрес, суммы операций. Ассистент вызывает облачную модель. С этого момента ПДн клиента банка физически покинули периметр и лежат в инфраструктуре провайдера — минимум в оперативной обработке, а по умолчанию ещё и в логах abuse-мониторинга на 30 дней. Клиент об этом не знает и согласия на такой трансфер не давал.
Это не гипотетический риск, а самый частый способ, которым компании нарушают GDPR через ИИ: не злым умыслом, а тем, что на пути запроса не стояло ничего, что бы вычистило данные до вызова модели. Эта глава — про первую плоскость control plane: data plane, слой, гарантирующий, что конфиденциальные данные компании и ПДн пользователей не утекут, не осядут в логах провайдера и не попадут в обучение публичных моделей.
Бизнес-цель клиента
Для «Ковчега» цена утечки — не абстрактный штраф, а комбинация: GDPR-санкции + нарушение банковской тайны + отзыв доверия регулятором. Задача плоскости: модель никогда не видит реальных ПДн, а компания может это доказать. Три обещания бизнесу:
- ПДн и банковская тайна не покидают периметр в открытом виде.
- Провайдер не хранит промпты и не обучается на них (Zero Data Retention).
- Право клиента на удаление (GDPR ст. 17) не ломается тем, что данные ушли в чужое обучение и стали невозвратными.
Драйвер: угроза или регулятор
- GDPR: отправка ПДн в LLM-провайдера без правового основания и без гарантий нехранения — нарушение ст. 5 (минимизация, ограничение хранения), ст. 25 (privacy by design), ст. 32 (безопасность обработки). Трансграничная передача добавляет главу V.
- Логи провайдера: хранение промптов для abuse-мониторинга — это уже экспорт ПДн третьей стороне, даже если «никто их не читает».
- Обучение на данных: попадание ПДн в обучающий корпус делает право на удаление неисполнимым — юридический тупик.
- EU AI Act: data governance для high-risk (Art. 10) пересекается с GDPR.
Архитектурный паттерн
In-Flight Anonymization Gateway + ZDR — прослойка перед вызовом LLM, которая обезличивает данные на входе и восстанавливает на выходе, плюс контрактный Zero Data Retention как второй рубеж. Модель работает с плейсхолдерами; реальные значения живут только внутри периметра доли секунды.
┌────────── Anonymization Gateway ──────────┐
«Иванов И.И.,│ detect (NER+regex) → mask → <PERSON_1> │
IBAN RS35…» │ │ │ masked prompt
────────────►│ ▼ │──────────────► LLM (ZDR)
│ mapping → Redis (TTL = жизнь запроса) │◄──────────────
│ ▲ │ masked answer
«Уважаемый │ unmask ◄── mapping │
Иванов И.И.»│ │
◄────────────└─────────────────────────────────────────────┘Инженерный стек & провайдеры
- Детекция PII/NER: Microsoft Presidio (open, MIT; актуальный релиз 2.2.362, март 2026; 50+ типов сущностей; сменные NLP-бэкенды — spaCy / ONNX / Stanza / HuggingFace); Private AI, AWS Comprehend PII как альтернативы; regex для структурного (IBAN, СНИЛС, паспорт, карта).
- Gateway: LiteLLM Proxy (есть нативная интеграция с Presidio) или собственный FastAPI-слой.
- Mapping store: Redis с коротким TTL.
- ZDR: Enterprise-контракты (Azure OpenAI, Anthropic / OpenAI Enterprise, AWS Bedrock) с Zero Data Retention и отключённым логированием промптов, зафиксировано в DPA.
Инженерная реализация
### Шаг 1. Gateway как единственная дверь к модели
Прямые вызовы LLM из сервисов запрещены сетевой политикой — всё идёт через gateway. Иначе любой разработчик, дернувший API напрямую, обходит всю плоскость.
### Шаг 2. Детекция и обратимое маскирование
NER + regex находят сущности; каждая заменяется на типизированный плейсхолдер, а обратное отображение кладётся в Redis под ключ trace_id (тот же id, что в аудите — гл. 4):
results = analyzer.analyze(text=prompt, language="ru") # Presidio NER
masked, mapping = reversible_mask(prompt, results) # <PERSON_1>, <IBAN_1>...
redis.setex(f"pii:{trace_id}", TTL_SECONDS, json.dumps(mapping))
resp = llm.call(masked, extra_headers={"x-zdr": "true"})
answer = unmask(resp, json.loads(redis.get(f"pii:{trace_id}")))
### Шаг 3. Fail-closed
Если детектор недоступен или уверенность ниже порога — запрос блокируется, а не пробрасывается «как есть». Приватность — свойство, которое ломается тихо; поэтому дефолт — отказ, не пропуск.
### Шаг 4. ZDR как второй рубеж
Маскирование неполно (см. ниже), поэтому ZDR обязателен независимо от него: даже если что-то просочилось, провайдер контрактно не хранит и не обучается. Два рубежа, не один.
Где ломается
- Recall < 100%. NER пропускает неструктурированные и редкие имена, транслит, опечатки, нестандартные форматы. Маскирование снижает риск, не обнуляет — отсюда обязательность ZDR.
- Квази-идентификаторы. «Клиент из посёлка N, 1974 г.р., единственный ИП» не является PII по отдельным полям, но реидентифицируется по совокупности. Маскирование сущностей это не ловит — это про k-анонимность, другой инструмент.
- Псевдонимизация ≠ анонимизация. Ключевой юридический нюанс: обратимое маскирование с сохранением mapping — это по GDPR псевдонимизация, а не анонимизация. Данные остаются ПДн, к mapping-хранилищу применяются все требования (шифрование, доступ, TTL). Не выдавайте псевдонимизацию за «данных больше нет».
- Утечка через структуру. Даже обезличенный текст несёт коммерческую тайну (суммы, условия сделки) — второй аргумент за ZDR.
- Латентность. NER на каждом запросе и на длинных документах заметно тормозит; кэш детекции и батчинг помогают, но плата есть.
- Деанонимизация галлюцинаций. Модель может «сочинить» плейсхолдер, которого нет в mapping — unmask должен это переживать (оставлять как есть + флаг в аудит).
Стандарты и маппинг
- GDPR: ст. 5, 25, 32, глава V (трансфер); псевдонимизация — ст. 4(5).
- EU AI Act: Art. 10 (data governance для high-risk).
- ISO/IEC 42001: контроли управления данными ИИ-системы.
- OWASP LLM: LLM02 (Sensitive Information Disclosure).
- NIST AI RMF: Map/Manage — data privacy.
Лаба и артефакт
Развернуть LiteLLM + Presidio перед «Ковчегом»; собрать golden-датасет синтетических ПДн клиентов (разные форматы, транслит, квази-идентификаторы); замерить precision/recall детектора по типам, латентность; включить fail-closed; подписать/зафиксировать ZDR в DPA. Артефакт: gateway-конфиг + отчёт по recall на golden-датасете + карта mapping-хранилища с режимом шифрования и TTL (доказательство для гл. 6).
Чеклист зрелости
- L1: ZDR-контракт подписан, логирование промптов у провайдера отключено.
- L2: gateway с NER-маскированием на пути всех вызовов, mapping с TTL и шифрованием, fail-closed.
- L3: метрики recall в CI, покрытие квази-идентификаторов, регресс на golden-датасете при смене модели, честная классификация «псевдонимизация» в реестре обработки.
Источники
- [Microsoft Presidio — PII detection guide 2026](https://explainx.ai/blog/microsoft-presidio-pii-detection-anonymization-guide-2026)
- [Presidio PII masking with LiteLLM](https://docs.litellm.ai/docs/tutorials/presidio_pii_masking)
- [PII Shield: reversible privacy proxy (Microsoft)](https://techcommunity.microsoft.com/blog/azuredevcommunityblog/introducing-pii-shield-a-privacy-proxy-for-every-llm-call/4514726)
- [PII detection & masking in production (2026)](https://devopsboys.com/blog/llm-pii-detection-masking-production-2026)
Как это устроено — инженерные разборы
Отдельные howto из практики, где плоскость контроля показана на работающем коде и артефакте.
- Выходной фильтр для AI: персональные данные и секреты не уходят за периметр организацииВыходной фильтр: PII и секреты не уходят за периметр — та же плоскость data plane.
Читать дальше
Ставите ИИ в продакшен под регуляторным риском?
Проектирование control plane под вашу систему: приватность, доступ, guardrails, аудит, соответствие EU AI Act / ISO 42001 — как работающая архитектура, а не политика в PDF.
Написать на почтуДвижок перехода
Next Move Engine — система, которая доводит команду до автономного цикла доставки.
Next Move Engine →