Відповідність GDPR при обміні журналами: анонімізація JSON-журналів застосунку перед надсиланням до DevOps-постачальників
Ваша програма записує структуровані JSON-журнали. Ваша команда DevOps пересилає їх до Datadog для аналізу. Datadog обробляє ці журнали на серверах США. Ваші журнали містять адреси електронної пошти клієнтів і IP-адреси.
Це GDPR-передача даних стороннім особам, яка потребує Угоди про обробку даних з Datadog та документації про правову підставу за статтями 44–49.
Типова структура JSON-журналів із PII
{
"timestamp": "2025-03-15T14:23:11Z",
"level": "INFO",
"service": "api-gateway",
"user_email": "customer@example.com",
"source_ip": "203.0.113.45",
"endpoint": "/api/v2/documents",
"status": 200,
"duration_ms": 145
}
Рішення: анонімізація до пересилання
Підхід 1: Конвеєр попередньої обробки
import json
from anonymizer import anonymize_text
def anonymize_log_line(log_line):
log = json.loads(log_line)
# Анонімізувати PII-поля
if 'user_email' in log:
log['user_email'] = anonymize_text(log['user_email'])
if 'source_ip' in log:
log['source_ip'] = anonymize_text(log['source_ip'])
return json.dumps(log)
Підхід 2: Анонімізація на стороні клієнта Анонімізуйте в коді застосунку перед записом журналу:
logger.info("Запит оброблено", extra={
"user_email": anonymize(user.email),
"source_ip": anonymize(request.ip),
"endpoint": endpoint
})
Що зберігати в журналах після анонімізації
| Поле | До | Після |
|---|---|---|
| user_email | customer@example.com | [EMAIL_1] |
| source_ip | 203.0.113.45 | [IP_1] |
| endpoint | /api/v2/documents | /api/v2/documents |
| status | 200 | 200 |
| duration_ms | 145 | 145 |
Джерела: