PII ukrywa się w logach aplikacji
Logi aplikacji to jedna z najbardziej pomijanych powierzchni RODO w inżynierii. Nie dlatego, że inżynierowie ignorują prawo. Dlatego, że szczegóły użytkowników trafiają do plików logów przez przypadek.
Jeden log żądania JSON może zawierać cztery pola z danymi osobowymi:
{
"timestamp": "2025-11-14T09:22:13Z",
"level": "ERROR",
"endpoint": "/api/users/profile",
"user_email": "jan.kowalski@firma.pl",
"client_ip": "82.123.45.67",
"user_agent": "Mozilla/5.0",
"error": "ValidationError: phone format",
"input_value": "+48 501 234 567"
}
Ten pojedynczy wpis zawiera adres e-mail, adres IP i numer telefonu. Pomnóżmy to przez miliony dziennych wywołań API. Efektem jest poważna aktywność związana z danymi osobowymi. Wymaga podstawy prawnej, ograniczeń i kontroli.
Udostępnianie logów zewnętrznym stronom zwiększa ryzyko RODO
Zespóły udostępniają pliki logów zewnętrznym stronom przez cały czas:
- Firmy pentestujące otrzymują rekordy do mapowania zachowania aplikacji
- Zewnętrzni konsultanci używają próbek logów do znajdowania wąskich gardeł
- Platformy logów (Elastic, Datadog, Splunk) otrzymują pełne strumienie wyjściowe
- Wykonawcy SRE mają dostęp do rekordów podczas incydentów
- Zespóły programistyczne w innych podmiotach prawnych otrzymują pliki do debugowania
Każde udostępnienie rodzi pytania z art. 28 RODO. Czy odbiorca jest podmiotem przetwarzającym? Czy istnieje Umowa o Przetwarzaniu Danych? Czy mają podstawę prawną do wglądu w szczegóły użytkowników w tych plikach?
Platformy logów to powszechna luka. Wysyłanie danych z prawdziwymi adresami e-mail i IP użytkowników do Elastic Cloud lub Datadog tworzy połączenie przetwarzania. To połączenie wymaga DPA, standardowych klauzul i narzędzia transferu, jeśli platforma działa poza UE. Każde z nich wymaga czasu i przeglądu prawnego.
Prostsza ścieżka: usuń szczegóły użytkowników, zanim pliki opuszczą Twój system. Przeczytaj nasz przegląd zgodności dla pełnych zasad art. 28.
Dlaczego struktura JSON utrudnia wykrywanie
Pliki logów JSON różnią się strukturą. Ogólne skanowanie tekstu nie wystarczy.
Głębokość zagnieżdżenia: Szczegóły użytkownika pojawiają się na dowolnej głębokości. Pole request.headers.x-forwarded-for zawiera adresy IP. Pole response.body.errors[0].field_value może zawierać dane wejściowe użytkownika. Płaski skan tekstu pomija pola zagrze bane w zagnieżdżonych ścieżkach.
Niespojne schematy: Każdy punkt końcowy API produkuje własny kształt wyjściowy. Pliki uwierzytelniania wyglądają inaczej niż pliki płatności. Pliki aktualizacji profilu wyglądają inaczej od obu. Podejście oparte na stałych ścieżkach pomija szczegóły użytkownika, które pojawiają się na nieoczekiwanych ścieżkach w kontekstach błędów.
Wartości techniczne mieszane z PII: Ślady stosu, kody błędów i znaczniki czasowe muszą pozostać nienaruszone. Ogólne usuwanie wyciera potrzebne pola i sprawia, że plik staje się bezużyteczny.
Właściwe podejście to wykrywanie oparte na treści. Znajdź szczegóły użytkownika według tego, czym są — wzorzec e-mail, format IP, nazwana encja — nie gdzie siedzą w strukturze. Obsługuje to zmienne schematy bez konfiguracji dla każdego punktu końcowego.
Spójne zastępowanie zachowuje przydatność logów
Kluczowym wymogiem jest integralność referencyjna. Jeśli jan.kowalski@firma.pl pojawia się w 47 wpisach w łańcuchu żądań, wszystkie 47 muszą mapować na tę samą wartość.
Zasady mapowania:
jan.kowalski@firma.pl→user1@example.com(ta sama wartość w całym pliku)82.123.45.67→192.0.2.1(IP dokumentacyjny RFC 5737 — wyraźnie nierzeczywisty)+48 501 234 567→+48 XXX XXX XXX(maskowany)
Dzięki temu mapowaniu programista może prześledzić user1@example.com przez 47 wpisów, zrekonstruować łańcuch żądań i naprawić błąd — bez zobaczenia żadnych prawdziwych danych użytkownika.
Te pola metadanych pozostają niezmienione:
- Znaczniki czasowe (nie dane użytkownika)
- Kody i typy błędów (nie dane użytkownika)
- Ślady stosu (mogą zawierać techniczne identyfikatory, nie dane użytkownika)
- Metody HTTP, ścieżki, kody statusu (nie dane użytkownika)
- Wartości metryk i dane opóźnień (nie dane użytkownika)
Efektem jest plik, który działa do debugowania. Nie zawiera żadnych prawdziwych danych użytkownika. Zobacz nasz słowniczek dla różnicy między anonimizacją a pseudonimizacją zgodnie z RODO.
Przypadek użycia: udostępnianie logów firmie pentestującej
Firma SaaS przeprowadziła kwartalny przegląd bezpieczeństwa z zewnętrznym zespółem pentestowym. Zakres wymagał 90 dni produkcyjnych wyników API do mapowania przepływów uwierzytelniania i analizy wzorów błędów.
Surowy wolumen: 180 MB plików JSON. Liczba PII: 4200 unikalnych adresów e-mail użytkowników, 1800 unikalnych adresów IP, 340 częściowych numerów kont w kontekstach błędów.
Bez usunięcia najpierw danych użytkowników, udostępnienie tych plików wymagałoby:
- DPA z firmą pentestującą
- Narzędzia transferu z art. 46 RODO (firma działała poza UE)
- Przeglądu powiadomień dla osób, których dane dotyczą
Każde z nich dodaje pracę prawną i czas.
Po zastosowaniu usuwania PII:
- Czas przetwarzania: 25 minut dla 180 MB
- Wynik: 180 MB strukturalnie identycznych plików, wszystkie adresy e-mail i IP zastąpione bezpiecznymi wartościami
- Efekt: zespół pentestowy otrzymał pełny kontekst; zero prawdziwych danych użytkownika do nich dotarło
- Wynik RODO: DPA nie jest wymagane — oczyszczony wynik nie jest danymi użytkownika zgodnie z RODO
Zobacz nasze FAQ w sprawie typowych pytań dotyczących tego, co liczy się jako anonimowe zgodnie z RODO.
Integracja usuwania PII z CI/CD
Dla zespółów, które regularnie udostępniają wyniki, ten krok może działać wewnątrz istniejących potoków.
Rotacja logów:
- Skrypt rotacji uruchamia się co noc
- Krok usuwania uruchamia się przed archiwizacją lub wysyłką do dowolnej platformy logów
- Oczyszczone pliki trafiają do systemów zewnętrznych
- Oryginalne pliki pozostają wewnętrzne z pełnym przechowywaniem
Skrypt przed udostępnieniem:
- Inżynier musi podzielić się próbką z wykonawcą
- Uruchamia skrypt:
input=raw-logs/ output=clean-logs/ - Udostępnia folder
clean-logs/ - Nie jest potrzebny ręczny przegląd PII
Podejście sidecar:
- Sidecar usuwa strumień wyjściowy przed przekazaniem
- Usuwanie w czasie rzeczywistym zachowuje użyteczność do analizy logów
- Platforma otrzymuje zero prawdziwych danych użytkownika
Integracja z polityką przechowywania
Art. 5 ust. 1 lit. e) RODO wymaga ograniczenia przechowywania. Usuwanie PII wpisuje się w każdą politykę przechowywania.
- Surowe wyniki przechowywane przez 7 dni (do bieżącej pracy debugowania)
- Oczyszczone wersje przechowywane przez 90 dni (do analizy trendów i przeglądu incydentów)
- Krok usuwania uruchamia się w dniu 7
To spełnia ograniczenie przechowywania. Eliminuje ryzyko długoterminowego przechowywania surowych wyników.