By · Last updated 2026-06-05

Powrót do blogaTechniczne

Anonimizacja logów JSON zgodna z RODO: jak zachować możliwość debugowania

Logi aplikacji po cichu gromadzą adresy e-mail użytkowników, adresy IP i numery kont. Jak bezpiecznie udostępniać logi zewnętrznym firmom, wykonawcom i platformom obserwowalności.

June 5, 20267 min czytania
JSON logsGDPR complianceDevOps privacylog anonymizationdata minimization

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.pluser1@example.com (ta sama wartość w całym pliku)
  • 82.123.45.67192.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:

  1. Skrypt rotacji uruchamia się co noc
  2. Krok usuwania uruchamia się przed archiwizacją lub wysyłką do dowolnej platformy logów
  3. Oczyszczone pliki trafiają do systemów zewnętrznych
  4. Oryginalne pliki pozostają wewnętrzne z pełnym przechowywaniem

Skrypt przed udostępnieniem:

  1. Inżynier musi podzielić się próbką z wykonawcą
  2. Uruchamia skrypt: input=raw-logs/ output=clean-logs/
  3. Udostępnia folder clean-logs/
  4. Nie jest potrzebny ręczny przegląd PII

Podejście sidecar:

  1. Sidecar usuwa strumień wyjściowy przed przekazaniem
  2. Usuwanie w czasie rzeczywistym zachowuje użyteczność do analizy logów
  3. 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.

Źródła

Gotowy, aby chronić swoje dane?

Rozpocznij anonimizację PII z 285+ typami podmiotów w 48 językach.

About this page

We update this page when our platform or the law changes.

Read our founder note for how we work.

Each change shows up in the timestamp at the top.

Related reading

We follow these rules

  • GDPR (EU 2016/679).
  • ISO/IEC 27001:2022.
  • NIS2 (EU 2022/2555).
  • HIPAA safe harbor under 45 CFR § 164.514(b)(2).

Our promise

We do not sell your data.

We do not train models on your text.

We store your files in Germany.

You can delete your account at any time.

You own your work.

Where we run

Our servers live in Falkenstein, Germany.

We use Hetzner. They hold ISO 27001 certification.

All data stays in the EU.

Backups run every day.

Need help?

Email support@anonym.legal.

We reply within one business day.

How we test

We run a full check suite on every release.

Each surface gets its own sweep script and report.

Human reviewers spot-check the output each week.

We track recall and precision on a labelled set.

Bad runs block the deploy.

What we never do

  • We never sell your information to third parties.
  • We never train models on what you upload.
  • We never keep your work after you delete it.
  • We never share keys with any outside firm.
  • We never run ads inside the product.

Plans in plain words

We sell credits, not seats.

One credit covers one short job.

Long jobs use a few credits each.

You can top up at any time.

Unused credits roll over each month.

Read the plans page for current rates.

Who built this

A small team of engineers and lawyers built this.

We ship from Europe and work in the open.

Our founder note spells out why we started.

Where to start

How the parts fit

A browser add-on cleans text inside Chrome.

A Word plug-in handles drafts in Office.

A small desktop tool works on whole folders.

An agent protocol link feeds large models safely.

All four share one core engine and one rule set.

Words from our team

We started this work after a lunch about cookies.

One friend kept getting odd ads on her phone.

We asked why a court file leaked through a draft.

We sketched the first build on a napkin that week.

By month three we had a tiny demo for a friend.

She used it on her first case the next day.

Common questions we hear

Can the tool read scanned PDFs? Yes, with OCR.

Does it work on long files? Yes, in small chunks.

Can I roll my own rule set? Yes, save it as a preset.

Does it run offline? The desktop build runs offline.

Do you keep my files? No, the cloud build wipes after each run.

Will it learn from my work? No, we never train on inputs.

A short tour of the workflow

Upload a file or paste a snippet of prose.

Pick the entities you want gone from the draft.

Choose a method: replace, mask, hash, encrypt, or redact.

Press run and watch the side panel show each hit.

Skim the result and tweak any rule that misfired.

Save the cleaned file or send it to a teammate.