Реклама. ИП Ахунов Александр Раисович, ИНН 665911236854
PII/secret redaction gate перед LLM за 21 день

PII/secret redaction gate перед LLM за 21 день

PII/secret redaction gate перед LLM за 21 день — это fail-closed контур: allowlist полей → pre-LLM scanner → redaction log → block-on-leak тест; секреты и персональные данные не уходят в промпт «как есть». Без gate любой sales/ops-агент рано или поздно отправит паспорт, токен или карту в стороннюю модель.

Ниже — политика полей, scanner, audit trail и критерии done на три недели. Это не RAG-метрики и не multi-tenant isolation сессий — отдельный слой на входе в LLM.

За 21 день: дорожная карта gate

ДниФокусАртефакт
1–3Инвентарь данныхкарта: какие поля CRM/чатов реально кормят модель
4–6Политикаallowlist / mask / drop / hash; owners и исключения
7–10Scannerдетекторы PII + secrets + custom patterns; unit-тесты
11–14Wire-inpre-LLM hook во все вызовы (draft, brief, score, RAG query)
15–17Redaction logчто срезано, hash исходника, model_call_id, без сырого секрета
18–21Block-on-leaksynthetic leak-тесты, fail-closed, on-call runbook

Must-have до production:

  1. Ни один путь к LLM в обход gate (единая функция prepare_llm_payload).
  2. Fail-closed: scanner error / timeout → block, не «пропустить как есть».
  3. Лог redaction без записи сырого секрета (только тип, позиция, hash).
  4. Allowlist полей сделки/контакта явным списком, не «все custom fields».
  5. Leak-тест в CI: известные fixtures с токенами/картами → 0 пропусков.

Политика полей: allowlist, mask, drop

Сначала inventarize, потом правила. Пример матрицы для sales-desk:

Поле / типДействиеПример
stage, product, amount (округл.)allow«стадия КП, пакет X»
name (ФИО полностью)mask«И. И.» или «Клиент #deal»
phone, emailhash/tokenстабильный псевдоним в рамках сделки
passport, SNILS, inn физлицаdropне в промпт никогда
card PAN, CVV, passwords, API keysdrop + blockleak-класс
body перепискиscan + redactвырезать совпадения паттернов
вложенияmetadata onlyне слать PDF «целиком» без политики

Правила, которые я фиксирую письменно:

  • default deny для неизвестных custom fields;
  • маска обратима только через vault/CRM UI для человека, не для модели;
  • «нужно ФИО модели» — отдельный risk-accept с owner и expiry, не «навсегда в system prompt».

Pre-LLM scanner и redaction log

Минимальный стек scanner:

СлойЧто ловитПоведение
Regex/secretsAPI keys, JWT, sk-, Bearer, private key blocksdrop + block call
PII patternsкарты (Luhn), телефоны, email, паспортные серии (локальные)mask или drop по политике
Allowlist filterJSON/CRM payloadstrip non-allowed keys
Entropy / keywordshigh-entropy strings, «password=»quarantine → HITL
Output optionalответ модели на echo секретаpost-check (доп. слой)

Redaction log (на вызов):

model_call_id
pipeline (brief|reply|score|...)
field_path[]
action: allow|mask|drop|block
pii_class: phone|email|pan|secret|custom
source_hash (sha256 truncated)
timestamp, policy_version

Сырой секрет не пишем. Для разбора инцидента достаточно class + path + hash + кто обошёл (если bypass).

Wire-in паттерн:

raw_context
  → allowlist_project(fields)
  → scan_and_redact(text_blobs)
  → if block_class: raise BlockedForLLM
  → else: llm_call(safe_payload)
  → append redaction_log

Block-on-leak тест и fail-closed

Без автотестов gate — декорация.

ТестВходОжидание
PAN Luhnтекст с валидным 16-digitdrop/block, call не уходит
API keysk- / xoxb- / PEMblock
Phone in CRM fieldallowlist phone=maskв промпте только маска
Unknown custom fieldUF_SECRET_NOTEstrip (default deny)
Scanner timeoutmock hangfail-closed, 0 call
Bypass attemptпрямой SDK call в кодеlint/CI forbid (import guard)

Критерии done на день 21:

  • 100% LLM-путей через prepare_llm_payload (code search + runtime counter);
  • leak-suite зелёный в CI;
  • redaction log доступен on-call ≥ 30 дней;
  • runbook: «что делать при BlockedForLLM» и «ложный positive»;
  • 0 известных raw secret в prompt logs за пилотный период.

Что это не заменяет: session isolation multi-tenant, eval/canary, budget caps — соседние контуры. Redaction gate отвечает только на вопрос: что вообще можно показать модели.

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

Достаточно ли «не присылай персональные данные» в system prompt?
Нет. Модель не filter; данные уже в user/context. Нужен детерминированный scanner + allowlist до вызова.

Mask или drop для телефона?
Для скоринга/brief обычно mask/псевдоним. Для логов промптов — никогда raw. Для support-агента с callback — отдельный tool «покажи телефон оператору», не LLM.

Что если бизнес требует «модель видит ФИО»?
Risk-accept: узкий pipeline, логирование, training запрета на echo, регулярный review. Не default для всех агентов.

Где хранить policy_version?
Рядом с кодом (yaml/json) + номер в redaction log. Смена политики = новый version, старые логи читаемы.

Читайте также

Внедрить redaction gate в ваш AI-контур: https://raisovich.ru

За сколько дней внедряют redaction gate перед LLM?

Целевой контур — 21 день: allowlist, scanner, block-on-leak тесты в CI, redaction log и 100% LLM-путей через prepare_llm_payload.

Что пишут в redaction log при срабатывании gate?

model_call_id, pipeline, field_path, action allow/mask/drop/block, pii_class, truncated source_hash и policy_version — без сырого секрета.

Что делать при BlockedForLLM в проде?

Fail-closed: вызов модели не уходит; on-call смотрит class + path + policy_version по runbook, правит allowlist или маскирует поле, не обходит scanner.

Р
Команда экспертов по AI-автоматизации бизнеса, созданию сайтов и продвижению нейросетями. Помогаем бизнесу расти с помощью современных технологий.

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

За сколько дней внедряют redaction gate перед LLM?

Целевой контур — 21 день: allowlist, scanner, block-on-leak тесты в CI, redaction log и 100% LLM-путей через prepare_llm_payload.

Что пишут в redaction log при срабатывании gate?

model_call_id, pipeline, field_path, action allow/mask/drop/block, pii_class, truncated source_hash и policy_version — без сырого секрета.