Tilbage til BlogTeknisk

GDPR i Dine Applikationslogs: Hvorfor Hver JSON Logfil Er en Potentiel Overtrædelse af Overholdelse

Applikationslogs indeholder kunders e-mailadresser, IP'er og kontonumre, som GDPR Artikel 5(1)(e) kræver skal håndteres. Her er, hvordan log-anonymisering ser ud i praksis.

March 7, 20266 min læsning
API logsGDPR complianceJSON anonymizationobservabilitystorage limitation

Den Stille GDPR Overtrædelse i Din Observabilitetsstak

De fleste ingeniørteams ved, at de håndterer personlige data i deres applikationsdatabase. Færre har revideret deres logstyringssystem med samme grundighed.

GDPR Artikel 5(1)(e) kræver, at personlige data opbevares "ikke længere end nødvendigt for de formål, hvortil de personlige data behandles" — princippet om opbevaringsbegrænsning. For applikationsdatabaser har organisationer opbevaringspolitikker, slettejob og data-minimeringsprocesser.

For applikationslogs er den typiske politik meget enklere: behold alt i 90 dage (eller 6 måneder, eller 1 år) af operationelle og sikkerhedsmæssige årsager. Opbevaringsperioden styres af behovet for fejlfinding og revision, ikke af analyse af personlige data.

Problemet: disse logs indeholder personlige data. Hver anmodningslog, der inkluderer en brugers e-mailadresse, hver fejl-log, der fanger en valideringsinput, hver adgangslog, der registrerer en IP-adresse — disse er GDPR Artikel 4(1) personlige data. Organisationen har et juridisk grundlag i henhold til GDPR at svare på for hver opbevaringsperiode.

Hvad Der Faktisk Ender i Applikationslogs

En undersøgelse af almindelige webapplikationslogformater afslører bredden af PII, der akkumuleres:

Adgangslogs (nginx/Apache):

  • IP-adresser (direkte GDPR personlige data under EDPB vejledning)
  • User-agent strenge (kan bidrage til fingeraftryk)
  • Session tokens (hvis logget)

Applikationslogs (struktureret JSON):

  • Brugeridentifikatorer (e-mailadresser, bruger-ID'er knyttet til profiler)
  • Inputvalideringsfejl (indeholder ofte den ugyldige input — som kan være en brugers reelle data)
  • Forretningsbegivenhedslogs (ordrenumre knyttet til kundekonti, supportticket-referencer)
  • Søgeforespørgsler (kan indeholde personlige navne, adresser)

API gateway logs:

  • Autorisationsoverskrifter (delvist logget i nogle konfigurationer)
  • Forespørgselsparametre (kan indeholde bruger-ID'er, navne, e-mails)
  • Anmodnings-/responslegemer (i fejlfinding loggingskonfigurationer)

Database forespørgselslogs (langsomme forespørgselslogs, revisionslogs):

  • SQL-forespørgsler inklusive WHERE-klausuler med e-mail = 'user@example.com'
  • Bogstavelige personlige dataværdier i forespørgselsparametre

Akkumuleringen er ikke intentionel. Det er et biprodukt af standard logningspraksis, der blev designet til fejlfinding, ikke designet med GDPR-overholdelse i tankerne.

EDPB's Holdning til IP-Adresser i Logs

Det Europæiske Databeskyttelsesråd har konsekvent fastholdt, at IP-adresser er personlige data under GDPR — de er "identificerbare", fordi internetudbydere kan knytte dem til abonnenter, og i organisatoriske sammenhænge kan de identificere specifikke brugere.

Dette har en direkte implikation for logopbevaring: adgangslogs, der indeholder IP-adresser, er personlige datalogs. At opbevare nginx adgangslogs i 12 måneder er at opbevare personlige data i 12 måneder. Den 12-måneders opbevaring kræver et lovligt grundlag under Artikel 6, og princippet om opbevaringsbegrænsning kræver, at opbevaringsperioden er nødvendig for det specifikke formål.

De fleste organisationer har ikke eksplicit analyseret deres logopbevaringsperioder i forhold til denne ramme. "Vi opbevarer logs i 90 dage, fordi det er, hvad sikkerhedsteamet siger" er en erklæring om operationel praksis, ikke en analyse af GDPR Artikel 5(1)(e).

Anonymiseringsvejen til Overholdelse

Den praktiske vej til log-GDPR-overholdelse for de fleste ingeniørteams er ikke at reducere logopbevaring (som har operationelle sikkerhedsmæssige begrundelser), men at anonymisere logs før langvarig opbevaring.

Den tierede opbevaringsmodel:

0-7 dage: Fuld rå logs opbevaret til aktiv fejlfinding. Operationel begrundelse er klar; opbevaringsperioden er kort nok til at undgå opbevaringsbegrænsningsproblemer for de fleste organisationer.

7-90 dage: Anonymiserede logs opbevaret til trendanalyse og sikkerhedsovervågning. IP-adresser erstattet med anonymiserede IP'er; bruger-e-mails erstattet med konsistente tokens; kontonumre maskeret. Teknisk metadata (tidsstempler, fejlkoder, latenstid, endpoints) bevaret til operationel analyse.

90+ dage (hvis nødvendigt): Kun aggregerede logdata (begivenhedstællinger, fejlprocenter, latenstid fordelinger) — ingen individuelle optegnelser.

Denne model opretholder operationel nytte ved hver opbevaringsniveau, mens den opfylder princippet om opbevaringsbegrænsning: opbevaringsperioden for personlige data er 7 dage; aggregerede operationelle data opbevares længere uden eksponering af personlige data.

Bevarelse af Struktur til Observabilitetsbrugssager

Det vigtigste tekniske krav til log-anonymisering, der bevarer observabilitetsnytte, er strukturel bevarelse med indholdsudskiftning:

Bevaret:

  • JSON-struktur og nøgle-navne
  • Tidsstempler og tidssekvenser
  • Fejlkategorier og koder
  • HTTP-metoder, stier, statuskoder
  • Latenstidsværdier og præstationsmålinger
  • Forretningsbegivenhedstyper (ordre afgivet, betaling modtaget)

Erstattet:

  • E-mailadresser → user1@example.com (konsistent token pr. original e-mail inden for logfilen)
  • IP-adresser → RFC 5737 dokumentationsadresser (192.0.2.x, 198.51.100.x)
  • Kontonumre → ACCT_XXXXX
  • Telefonnummer → +XX XXX XXX XXXX
  • Navne fra fejlkontekster → [PERSON]

Med konsistent tokenudskiftning bevares operationel analyse: en anmodningsspor, der følger user1@example.com gennem 40 logposter fungerer identisk til fejlfinding som den originale e-mail — fordi tokenet er konsistent gennem hele logfilen.

Aggregerede målinger påvirkes ikke: fejlprocenter pr. endpoint, latenstidspercentiler, gennemstrømningsberegninger — ingen af disse kræver at kende den faktiske e-mailadresse på den bruger, der udløste anmodningen.

Praktisk Integration for Ingeniørteams

For et Django- eller Node.js-applikationsteam ser log-anonymiseringsintegration sådan ud:

Mulighed 1: Logpipeline-integration

  • Fluentd/Logstash logshipper fanger logs
  • Anonymiseringstrin kører på hver loglinje før videresendelse
  • Observabilitetsplatform (Elastic/Datadog) modtager anonymiserede logs
  • Ingen ændringer i applikationens logningskode kræves

Mulighed 2: Nattelig batch-anonymisering

  • Rå logs skrevet til lokal opbevaring
  • Nattelig cron: anonymiser gårsdagens logs, slet rå version
  • Anonymiserede logs sendt til langvarig opbevaring
  • Rå logs opbevares kun i 7 dage

Mulighed 3: Foruddelings-anonymisering

  • Rå logs opbevares internt med passende adgangskontroller
  • Når der deles eksternt (pen-testere, kontraktører): kør anonymisering før adgang gives
  • Eksterne parter modtager altid anonymiserede versioner

For dokumentation af GDPR-overholdelse: log-anonymisering er et "teknisk mål" under GDPR Artikel 32. Dokumentation af anonymiseringstrinnet — værktøj, konfiguration, opbevaringspolitik — er en del af Records of Processing Activities (RoPA) krævet under Artikel 30.

Kilder:

Klar til at beskytte dine data?

Begynd at anonymisere PII med 285+ enhedstyper på tværs af 48 sprog.