anonym.legal
Takaisin BlogiinTekninen

GDPR sovelluksesi lokitiedoissa: Miksi jokainen JSON-lokitiedosto on mahdollinen vaatimustenmukaisuusrikkomus

Sovelluksen lokitiedot sisältävät asiakastietoja, kuten sähköpostiosoitteita, IP-osoitteita ja tilinumeroita, joita GDPR:n artikla 5(1)(e) vaatii hallittavaksi. Tässä on, miltä lokien anonymisointi näyttää käytännössä.

March 7, 20266 min lukuaika
API logsGDPR complianceJSON anonymizationobservabilitystorage limitation

Hiljainen GDPR-rikkomus observabiliteettikohdassasi

Useimmat insinööriryhmät tietävät käsittelevänsä henkilötietoja sovellustietokannassaan. Vain harvat ovat auditoineet lokinhallintajärjestelmänsä samalla tarkkuudella.

GDPR:n artikla 5(1)(e) vaatii, että henkilötietoja säilytetään "ei pidempään kuin on tarpeen henkilötietojen käsittelyn tarkoitusten vuoksi" — säilyttämisen rajoittamisen periaate. Sovellustietokannoissa organisaatioilla on säilytyskäytännöt, poistotehtävät ja tietojen minimointiprosessit.

Sovelluksen lokien osalta tyypillinen käytäntö on paljon yksinkertaisempi: säilytä kaikki 90 päivää (tai 6 kuukautta, tai 1 vuosi) operatiivisista ja turvallisuussyistä. Säilytysaika määräytyy virheenkorjaus- ja auditointitarpeiden mukaan, ei henkilötietojen analyysin mukaan.

Ongelma: nämä lokit sisältävät henkilötietoja. Jokainen pyyntöloki, joka sisältää käyttäjän sähköpostiosoitteen, jokainen virheloki, joka tallentaa validointisyötteen, jokainen pääsyloki, joka tallentaa IP-osoitteen — nämä ovat GDPR:n artiklan 4(1) mukaisia henkilötietoja. Organisaatiolla on GDPR:n oikeudellinen peruste, johon vastata jokaiselle säilytysaikaperiodille.

Mitä oikeasti päätyy sovelluksen lokitietoihin

Yleisten verkkosovelluksen lokimuotojen tutkimus paljastaa PII:n laajuuden, joka kertyy:

Pääsylogit (nginx/Apache):

  • IP-osoitteet (suoraa GDPR:n henkilötietoa EDPB:n ohjeiden mukaan)
  • Käyttäjä-agentti merkkijonot (voivat myötävaikuttaa sormenjälkien ottamiseen)
  • Istuntotunnukset (jos kirjattu)

Sovelluksen lokit (rakenteellinen JSON):

  • Käyttäjätunnisteet (sähköpostiosoitteet, käyttäjä-ID:t, jotka on liitetty profiileihin)
  • Syötteen validointivirheet (usein sisältävät virheellisen syötteen — joka voi olla käyttäjän oikeaa tietoa)
  • Liiketoimintatapahtumalokit (tilaus-ID:t, jotka on liitetty asiakastileihin, tukipyyntöviitteet)
  • Hakukyselyt (voivat sisältää henkilökohtaisia nimiä, osoitteita)

API-väylän lokit:

  • Valtuutuspäätökset (osittain kirjattu joissakin kokoonpanoissa)
  • Kyselyparametrit (voivat sisältää käyttäjä-ID:t, nimet, sähköpostit)
  • Pyyntö/vastaus -runko (debug-lokitusasetuksissa)

Tietokannan kyselylokit (hitaita kyselylokit, auditointilokit):

  • SQL-kyselyt, jotka sisältävät WHERE-lausekkeita, joissa sähköposti = 'user@example.com'
  • Kirjaimelliset henkilötietojen arvot kyselyparametreissa

Kertymä ei ole tahallinen. Se on seurausta vakiintuneista lokituskäytännöistä, jotka on suunniteltu virheenkorjausta varten, ei GDPR-vaatimustenmukaisuutta silmällä pitäen.

EDPB:n kanta IP-osoitteista lokeissa

Euroopan tietosuojaneuvosto on johdonmukaisesti todennut, että IP-osoitteet ovat henkilötietoja GDPR:n mukaan — ne ovat "tunnistettavissa", koska internetpalveluntarjoajat voivat liittää ne tilaajiin, ja organisaatiokonteksteissa ne voivat tunnistaa tietyt käyttäjät.

Tällä on suora vaikutus lokien säilyttämiseen: pääsylogit, jotka sisältävät IP-osoitteita, ovat henkilötietolokeja. Nginx-pääsylogien säilyttäminen 12 kuukautta tarkoittaa henkilötietojen säilyttämistä 12 kuukautta. 12 kuukauden säilytys vaatii laillisen perusteen artiklan 6 mukaan, ja säilyttämisen rajoittamisen periaate vaatii, että säilytysaika on tarpeen tiettyä tarkoitusta varten.

Useimmat organisaatiot eivät ole nimenomaisesti analysoineet lokien säilytysaikojaan tämän viitekehyksen mukaan. "Säilytämme lokeja 90 päivää, koska näin turvallisuustiimi sanoo" on lausunto operatiivisesta käytännöstä, ei GDPR:n artiklan 5(1)(e) analyysi.

Anonymisointipolku vaatimustenmukaisuuteen

Käytännön polku lokien GDPR-vaatimustenmukaisuuteen useimmille insinööriryhmille ei ole lokien säilyttämisen vähentäminen (mikä on operatiivisesti turvallista), vaan lokien anonymisoiminen ennen pitkäaikaista säilyttämistä.

Kerrosmalli:

0-7 päivää: Täydet raakadatallokit säilytetään aktiivista virheenkorjausta varten. Operatiivinen peruste on selkeä; säilytysaika on tarpeeksi lyhyt, jotta useimmille organisaatioille ei aiheudu säilyttämisen rajoittamisen ongelmia.

7-90 päivää: Anonymisoidut lokit säilytetään trendianalyysiä ja turvallisuuden seurantaa varten. IP-osoitteet korvataan anonymisoiduilla IP-osoitteilla; käyttäjien sähköpostit korvataan johdonmukaisilla tunnisteilla; tilinumerot peitetään. Tekninen metadata (aikaleimat, virhekoodit, viiveet, päätepisteet) säilytetään operatiivista analyysia varten.

90+ päivää (tarvittaessa): Vain aggregoitu lokitieto (tapahtumamäärät, virheprosentit, viivejakaumat) — ei yksilötason tietoja.

Tämä malli säilyttää operatiivisen hyödyn jokaisella säilytyskerroksella samalla kun se täyttää säilyttämisen rajoittamisen periaatteen: henkilötietojen säilytysaika on 7 päivää; aggregoitu operatiivinen data säilytetään pidempään ilman henkilötietojen paljastumista.

Rakenteen säilyttäminen observabiliteettikäyttötapauksille

Keskeinen tekninen vaatimus lokien anonymisoinnille, joka säilyttää observabiliteetin hyödyn, on rakenteellinen säilyttäminen sisällön korvaamisen kanssa:

Säilytetty:

  • JSON-rakenne ja avaimet
  • Aikaleimat ja aikajaksot
  • Virhetyypit ja koodit
  • HTTP-menetelmät, polut, tilakoodit
  • Viivearvot ja suorituskykymittarit
  • Liiketoimintatapahtumatyypit (tilaus tehty, maksu vastaanotettu)

Korvattu:

  • Sähköpostiosoitteet → user1@example.com (johdonmukainen tunniste alkuperäisen sähköpostin mukaan lokitiedostossa)
  • IP-osoitteet → RFC 5737 -dokumentaation osoitteet (192.0.2.x, 198.51.100.x)
  • Tilinumerot → ACCT_XXXXX
  • Puhelinnumerot → +XX XXX XXX XXXX
  • Nimet virhekonteksteista → [PERSON]

Johdonmukaisella tunnisteiden korvaamisella operatiivinen analyysi säilyy: pyyntölokin jäljitys, joka seuraa user1@example.com 40 lokimerkinnän läpi, toimii identtisesti virheenkorjauksen kannalta kuin alkuperäinen sähköposti — koska tunniste on johdonmukainen koko lokitiedostossa.

Aggregoidut mittarit eivät vaikuta: virheprosentit per päätepiste, viiveprosenttiluokat, läpimenoaikojen laskelmat — mikään näistä ei vaadi tietoa käyttäjän todellisesta sähköpostiosoitteesta, joka laukaisi pyynnön.

Käytännön integrointi insinööriryhmille

Django- tai Node.js-sovellusryhmälle lokien anonymisoinnin integrointi näyttää tältä:

Vaihtoehto 1: Lokiputken integrointi

  • Fluentd/Logstash lokisiirtäjä sieppaa lokit
  • Anonymisointivaihe suoritetaan jokaiselle lokiriville ennen edelleenlähetystä
  • Observabiliteettialusta (Elastic/Datadog) vastaanottaa anonymisoituja lokeja
  • Sovelluksen lokituskoodeihin ei vaadita muutoksia

Vaihtoehto 2: Yöaikainen eräanonymisointi

  • Raakadatallokit kirjoitetaan paikalliseen tallennukseen
  • Yöaikainen cron: anonymisoi eiliset lokit, poista raakaversio
  • Anonymisoidut lokit lähetetään pitkäaikaiseen tallennukseen
  • Raakadatallokit säilytetään vain 7 päivää

Vaihtoehto 3: Ennen jakamista anonymisointi

  • Raakadatallokit säilytetään sisäisesti asianmukaisilla käyttöoikeusohjeilla
  • Kun jaetaan ulkoisesti (pen-testajat, urakoitsijat): suorita anonymisointi ennen pääsyn antamista
  • Ulkoiset osapuolet saavat aina anonymisoituja versioita

GDPR-vaatimustenmukaisuuden dokumentointia varten: lokien anonymisointi on "tekninen toimenpide" GDPR:n artiklan 32 mukaan. Anonymisointivaiheen dokumentointi — työkalu, kokoonpano, säilytyskäytäntö — on osa käsittelytoimintojen rekisteriä (RoPA), joka vaaditaan artiklan 30 mukaan.

Lähteet:

Valmiina suojaamaan tietojasi?

Aloita PII-anonymisointi yli 285 entiteettityypillä 48 kielellä.