API Logs i JSON: Maskowanie PII dla obserwabilności GDPR
Systemy obserwabilności takie jak Datadog, ELK Stack i Splunk przechowują logi zawierające potencjalne PII:
- Numery telefonów w parametrach
- SSN w payloadach JSON
- Tokeny dostępu w headers
- IP adresy klientów
Problem
{
"user_id": "john.smith",
"ssn": "123-45-6789",
"email": "john@company.com",
"phone": "555-123-4567",
"timestamp": "2025-03-01T10:00:00Z",
"ip_address": "192.168.1.1"
}
Ten JSON trafia do Datadog, gdzie jest przechowywany przez 30 dni. Wszyscy inżynierowie mający dostęp do Datadog mogą zobaczyć SSN.
Rozwiązania
1. Redaction na poziomie aplikacji:
import json
import re
def redact_pii(obj):
if isinstance(obj, dict):
return {k: redact_field(k, v) for k, v in obj.items()}
return obj
def redact_field(key, value):
if 'ssn' in key.lower():
return re.sub(r'\d', 'X', value)
elif 'email' in key.lower():
return value[:2] + '*' * (len(value) - 4) + value[-2:]
return value
2. Redaction na poziomie obserwabilności (Datadog/Splunk):
- Konfiguracja pipeline'ów redakcji
- Regex rules dla SSN, email, phone
- Policy dla IP masking
3. Szyfrowanie logów:
- Szyfruj logi zanim pójdą do chmury
- Deszyfruj lokalnie dla debugowania
- Klucze przechowuj oddzielnie
RODO wymogi (Art. 32)
RODO Art. 32 wymaga:
- "Pseudonymizacja danych" - zamień SSN na [SSN]
- "Szyfrowanie" - szyfruj logi w transporcie
- "Ability to restore" - możliwość odzyskania logów w razie awarii
Jeśli logi zawierają niezamaskowane PII, naruszasz Art. 32.
Zaključak
API logi wymagają redakcji PII przed wysłaniem do sytemu obserwabilności.