Перейти к основному содержимому

Эксплуатация DLP в CodeGraph

Настройте проверку запросов и ответов модели через DLP. Проверьте блокировку, маскирование данных и доставку оповещения по выбранным правилам.

Корпоративная эксплуатация

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. В настройках по умолчанию есть сигналы учётных данных, персональных данных и исходного кода. Проверьте активные категории и шаблоны в настройках своей установки.

Сохраните настройки через интерфейс

  1. Войдите как администратор и откройте «Безопасность» → DLP.
  2. В поле «Раздел DLP» выберите «Настройки». Включите DLP, проверку до запроса и проверку после ответа.
  3. Задайте действия по умолчанию для обоих направлений. Например, BLOCK до запроса останавливает отправку при совпадении; ответ маскируется по правилам, описанным выше.
  4. Выберите раздел «Категория». Для нужных категорий включите проверку и задайте действие. Учитывайте общий приоритет: категория с WARN при действии по умолчанию BLOCK всё равно приведёт к блокировке запроса.
  5. Нажмите «Сохранить DLP». Вернитесь в «Настройки» и проверьте значения после обновления страницы. В разделе «Состояние» проверьте фактическое включение DLP; в «Журнале» найдите запись об изменении настроек.
  6. Выполните проверку развёртывания из раздела ниже: чистый запрос должен пройти, а запрос с синтетическим совпадением — дать выбранный результат.

Интерфейс сохраняет настройки через 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. Это разные результаты:

  1. сканер обнаружил совпадение;
  2. действие изменило либо пропустило контент;
  3. диспетчер принял событие;
  4. настроенный обработчик сообщил о доставке;
  5. получатель 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, потоковый клиент или доставку оповещений.

Проверка развёртывания

Используйте нечувствительные синтетические значения для каждой включённой категории:

  1. сохраните действующую политику и ревизию выпуска;
  2. отправьте ожидаемо чистый промпт и промпт с ожидаемым совпадением;
  3. проверьте выбранное действие и факт вызова провайдера;
  4. подтвердите маскирование в возвращённом или отправленном контенте, не записывая исходный секрет;
  5. просмотрите активность DLP через интерфейс с аутентификацией;
  6. подтвердите получение события webhook или SIEM, если они настроены;
  7. верните одобренную политику и запишите результат.

Проверяйте pre-request и post-response независимо. Повторяйте сценарий после смены провайдера, политики, паттернов или профиля безопасности.

Ограничения и инциденты

Сопоставление с шаблонами может пропустить преобразованные, разделённые, закодированные, доменные или новые чувствительные данные и способно давать ложные срабатывания. Для каждой категории проверяйте примеры совпадений и чистого контента. По результатам уточняйте шаблоны и повторяйте проверку.

При подозрении на утечку остановите затронутый процесс, сохраните данные аудита без секретов, если раскрыты учётные данные, замените их. Определите область затронутых данных у провайдера и получателя и следуйте процедуре обработки инцидентов заказчика. Изменение политики при восстановлении требует владельца, причины, ревью и срока действия.