Redacted logs: что вырезать из CI-логов и что нельзя резать вслепую
Токены и приватные ключи нужно скрывать, но job id, версии, имена сервисов и exit code часто нужны для RCA. Разбираем баланс безопасности и диагностируемости.
Redaction легко понять неправильно. Кажется, что чем больше вырезали, тем безопаснее. Формально да. Но если после очистки в логе осталось только ERROR [REDACTED] failed at [REDACTED], инженер уже не сможет понять, что произошло.
Хороший redacted log сохраняет диагностический контекст и убирает только то, что может навредить: секреты, приватные ключи, персональные данные и внутренние токены.
Коротко: redaction vs anonymization
Redaction — точечное скрытие опасных фрагментов: токен заменили на [REDACTED_TOKEN], URL с паролем — на безопасный URL без credentials. Anonymization — более широкое обезличивание данных. Для CI чаще нужен redaction: нам важно сохранить структуру ошибки.
Что нужно вырезать всегда
- JWT и bearer tokens.
- AWS/GCP/Azure keys.
- SSH/private keys.
- Basic-auth credentials в URL.
- kubeconfig и service account tokens.
.npmrc,.pypirc, Docker auth.- Email/телефоны клиентов в тестовых дампах.
Если сомневаетесь, вырезайте. Секрет, попавший в внешний сервис или артефакт, уже нельзя «забыть» так же легко, как строку локального лога.
Что нельзя резать вслепую
Для RCA часто критичны:
- имя job/stage;
- номер pipeline/build/job;
- exit code;
- версия Docker image/runtime;
- package name;
- test file и test case;
- service name;
- URL без credentials;
- последние 20–50 строк stack trace.
Например, connect ECONNREFUSED db:5432 сообщает полезный сервис и порт. Если заменить всё на connect [REDACTED], RCA потеряет смысл.
Хорошие маркеры лучше пустоты
Плохо:
Error: request failed with token abc123...
Хорошо:
Error: request failed with token [REDACTED_TOKEN]
Ещё лучше:
Error: registry auth failed for registry.internal.example.com with token [REDACTED_NPM_TOKEN]
Так лог остаётся безопасным, но сохраняет контекст: проблема с registry auth, а не с тестом или кодом.
Где тут Exlogare
Exlogare выигрывает от качественного redaction: модель видит достаточно контекста, чтобы сказать «упала авторизация в npm registry после смены токена», но не видит сам токен. Поэтому перед подключением внешнего анализа стоит договориться, какие поля сохраняются, а какие всегда маскируются.
Для настройки формата отправки смотрите ingest API и generic-подключение через ingest-generic. Общие принципы обработки данных — в Security.
Читайте также
- Как безопасно передавать CI-логи наружу без утечки секретов
- Секреты в логах CI: 10 мест, где их обычно забывают
Чеклист
- Токены заменяются на типизированные маркеры.
- URL сохраняется без credentials.
- Job/stage/build id остаются в логе.
- Exit code и последние строки stack trace не удаляются.
- PII из тестовых данных маскируется.
- Redaction тестируется на реальных падениях, а не только на синтетике.