DLP CodeGraph проверяет выбранный контент до отправки провайдеру модели и после получения ответа. При совпадении система может заблокировать, замаскировать, предупредить или только записать событие. DLP помогает обнаружить случайную передачу чувствительных данных. Администратор выбирает категории и действия, проверяет результат на синтетических данных и настраивает оповещения для команды безопасности.
Граница контроля
Настройки DLP находятся в разделе security.dlp файла config.yaml.
Они задают проверку запросов и ответов, категории чувствительных данных,
действия при совпадении и доставку оповещений.
API публикует аутентифицированные операции конфигурации, политик и активности под актуальной
поверхностью /api/v1/security/dlp. Поля запросов и ответов берите из OpenAPI
развёрнутой версии. Чтение конфигурации требует активного пользователя;
изменение конфигурации требует прав администратора.
Действия и их смысл
| Значение настройки | Операционный смысл |
|---|---|
BLOCK (block) |
Остановить защищённый запрос и вернуть результат блокировки. |
MASK (mask) |
Заменить совпавший контент до пересечения защищённой границы. |
WARN (warn) |
Продолжить обработку, но записать предупреждение. |
LOG_ONLY (log_only) |
Записать совпадение, не меняя контент. |
При совпадении выбирается наиболее строгое действие из настроек категорий
и pre_request.default_action: BLOCK, MASK, WARN, LOG_ONLY. Если выбранное
действие — WARN или LOG_ONLY, система записывает совпадение и продолжает
обработку исходного контента.
В таблице описаны действия проверки запроса. Для ответа ContentScanner.scan_response()
при совпадении всегда формирует маскированный текст и возвращает blocked=False,
даже если поле action содержит BLOCK, WARN или LOG_ONLY. Проверяйте фактический
результат и изменённый текст, а не только метку действия.
Настройка политики
В конфигурации разделены pre_request и post_response, категории, ключевые слова и webhook. В настройках по умолчанию
есть сигналы учётных данных, персональных данных и исходного кода. Проверьте
активные категории и шаблоны в настройках своей установки.
Сохраните настройки через интерфейс
- Войдите как администратор и откройте «Безопасность» → DLP.
- В поле «Раздел DLP» выберите «Настройки». Включите DLP, проверку до запроса и проверку после ответа.
- Задайте действия по умолчанию для обоих направлений. Например,
BLOCKдо запроса останавливает отправку при совпадении; ответ маскируется по правилам, описанным выше. - Выберите раздел «Категория». Для нужных категорий включите проверку
и задайте действие. Учитывайте общий приоритет: категория с
WARNпри действии по умолчаниюBLOCKвсё равно приведёт к блокировке запроса. - Нажмите «Сохранить DLP». Вернитесь в «Настройки» и проверьте значения после обновления страницы. В разделе «Состояние» проверьте фактическое включение DLP; в «Журнале» найдите запись об изменении настроек.
- Выполните проверку развёртывания из раздела ниже: чистый запрос должен пройти, а запрос с синтетическим совпадением — дать выбранный результат.
Интерфейс сохраняет настройки через PUT /api/v1/security/dlp/config.
Для автоматизации передайте enabled, pre_request, post_response
и categories; у каждого направления есть enabled и default_action,
у каждой категории — enabled и action. Ключи категорий возьмите из
GET /api/v1/security/dlp/config. После записи повторите этот GET и
сопоставьте сохранённые значения. Сервис записывает раздел security.dlp,
перезагружает конфигурацию безопасности и возвращает обновлённое состояние.
Для каждого развёртывания зафиксируйте:
- включены ли общие средства безопасности и DLP;
- активные категории, их действия и уровни серьёзности;
- согласованные списки ключевых слов и владельца;
- действия по умолчанию до запроса и после ответа;
- адрес webhook и ответственного за него, ссылку на секрет, таймаут, повторные попытки и действия оповещения;
- порядок исключений, сроки их действия, ревью и отката.
Для проверки выбранного действия используйте синтетический маркер. Сохраните результат и удалите маркер после проверки.
Поток запроса и ответа
До защищённого вызова модели CodeGraph проверяет системную инструкцию и запрос пользователя по политике pre_request.
BLOCK останавливает вызов, MASK отправляет изменённый контент, а WARN и LOG_ONLY могут
пропустить исходный контент выбранному провайдеру.
Для обычного SecureLLMProvider.generate() ответ проверяется до возврата вызывающей стороне.
В generate_stream() части ответа выдаются до проверки собранного текста;
проверка не может отозвать уже выданные части. При оценке передачи данных рассматривайте оба направления. Полная модель
описана в руководстве по безопасности LLM.
Оповещения и SIEM
DLP может формировать оповещения webhook и сопоставляет действия с событиями SIEM dlp.block,
dlp.mask, dlp.warn и dlp.log. Это разные результаты:
- сканер обнаружил совпадение;
- действие изменило либо пропустило контент;
- диспетчер принял событие;
- настроенный обработчик сообщил о доставке;
- получатель webhook или SIEM действительно получил и проиндексировал событие.
Найдите событие в системе-получателе и сохраните запись с его идентификатором. Для диагностики используйте статус обработчика, число повторных попыток и состояние буфера. Сопоставьте эти данные с полученной записью. Настройка получателей и проверка экспорта описаны в руководстве по интеграции с SIEM.
Локальная проверка сканера
Из корня исходного репозитория CodeGraph с установленными Python-зависимостями
сохраните пример в check_dlp.py и выполните python check_dlp.py.
Политика существует только в памяти и не меняет конфигурацию развёртывания.
Используется синтетический маркер без реального секрета.
from src.security.config import (
DLPAction, DLPCategoryConfig, DLPConfig, DLPPatternConfig,
DLPPreRequestConfig, DLPPostResponseConfig,
)
from src.security.dlp.scanner import ContentScanner
config = DLPConfig(
enabled=True,
categories={"synthetic": DLPCategoryConfig(
enabled=True, action=DLPAction.BLOCK,
patterns=[DLPPatternConfig(
name="demo_marker", regex=r"DLP_DEMO_MARKER", mask_with="[MASKED]",
)],
)},
pre_request=DLPPreRequestConfig(enabled=True),
post_response=DLPPostResponseConfig(enabled=True),
)
scanner = ContentScanner(config)
clean = scanner.scan_request("ordinary example")
request = scanner.scan_request("DLP_DEMO_MARKER")
response = scanner.scan_response("DLP_DEMO_MARKER")
assert not clean.has_matches and not clean.blocked
assert request.has_matches and request.blocked
assert response.has_matches and not response.blocked
assert response.modified_content == "[MASKED]"
print("Clean request passed; marked request blocked; response masked")
Ожидайте указанное сообщение и код завершения 0. AssertionError означает
расхождение результата с ожидаемым. Пример проверяет сканер; он не вызывает
провайдера и не проверяет API, потоковый клиент или доставку оповещений.
Проверка развёртывания
Используйте нечувствительные синтетические значения для каждой включённой категории:
- сохраните действующую политику и ревизию выпуска;
- отправьте ожидаемо чистый промпт и промпт с ожидаемым совпадением;
- проверьте выбранное действие и факт вызова провайдера;
- подтвердите маскирование в возвращённом или отправленном контенте, не записывая исходный секрет;
- просмотрите активность DLP через интерфейс с аутентификацией;
- подтвердите получение события webhook или SIEM, если они настроены;
- верните одобренную политику и запишите результат.
Проверяйте pre-request и post-response независимо. Повторяйте сценарий после смены провайдера, политики, паттернов или профиля безопасности.
Ограничения и инциденты
Сопоставление с шаблонами может пропустить преобразованные, разделённые, закодированные, доменные или новые чувствительные данные и способно давать ложные срабатывания. Для каждой категории проверяйте примеры совпадений и чистого контента. По результатам уточняйте шаблоны и повторяйте проверку.
При подозрении на утечку остановите затронутый процесс, сохраните данные аудита без секретов, если раскрыты учётные данные, замените их. Определите область затронутых данных у провайдера и получателя и следуйте процедуре обработки инцидентов заказчика. Изменение политики при восстановлении требует владельца, причины, ревью и срока действия.