By · Last updated 2026-05-29

Torna al BlogTecnico

Pipeline GDPR: anonimizza prima di archiviare

I tag sulle colonne dbt non equivalgono alla conformità GDPR. I dati grezzi dei clienti entrano nel data warehouse Snowflake non mascherati, prima che le policy basate sui tag vengano applicate.

May 29, 20268 min di lettura
data pipelinedbtSnowflakedata warehouseELT anonymizationGDPR engineering

Pipeline sicura per il GDPR: anonimizza i dati personali prima dell'archiviazione

Aggiornato al 2026

Hai taggato le tue colonne PII in dbt. Hai impostato il mascheramento dinamico in Snowflake. Ti senti conforme al GDPR.

I tuoi dati sorgente arrivano comunque nel warehouse non mascherati. Il mascheramento avviene al momento della query. I dati non mascherati si trovano nel tuo schema raw. Chiunque abbia accesso allo schema raw può leggerli. I tuoi modelli dbt sono stati eseguiti prima che le policy di mascheramento esistessero. Le tabelle caricate precedentemente non sono mai state mascherate.

Il divario tra "abbiamo policy di mascheramento" e "la nostra pipeline è sicura" è dove avvengono le violazioni del GDPR.

Consulta la nostra panoramica sulla conformità per come anonym.legal supporta il GDPR.

Come le pipeline ELT espongono i dati personali

Il pattern Extract-Load-Transform (ELT) è ora la norma. Carica i dati sorgente nel warehouse prima. Le trasformazioni vengono dopo. I passaggi sono questi:

  1. Extract: I sistemi sorgente esportano tutti i campi. Salesforce CRM, Stripe pagamenti, Intercom supporto — tutto esce.
  2. Load: I dati sorgente arrivano nello schema di ingestione del warehouse. Snowflake, BigQuery, Redshift funzionano tutti allo stesso modo. Ogni campo PII è incluso.
  3. Transform: I modelli dbt puliscono e uniscono i dati per l'analisi.

Il layer di ingestione contiene informazioni personali complete. Nomi, indirizzi email, numeri di telefono, dettagli di pagamento, testo dei ticket di supporto. In molti team, ingegneri e analisti hanno accesso allo schema raw. Possono interrogare queste tabelle in qualsiasi momento.

Il mascheramento basato su tag in Snowflake aiuta al momento della query. Ma solo per i modelli downstream correttamente configurati. Non maschera le vecchie tabelle caricate. Non blocca le query dirette sugli schemi. Ogni modello e dashboard deve essere taggato. Questo onere cresce con lo schema.

Anonimizza prima del caricamento

Anonimizzare i dati personali a livello di pipeline elimina il rischio nel layer raw. Fallo prima che i dati arrivino nel warehouse.

Approccio ETL (anonimizzazione pre-caricamento):

  1. Estrai dai sistemi sorgente
  2. Passa attraverso una fase di anonimizzazione
  3. Carica l'output pulito nel warehouse

Il warehouse non riceve mai dati personali non mascherati. Lo schema di ingestione contiene solo contenuto pulito. I modelli downstream, i dashboard e le query dirette lavorano tutti con output puliti.

Hai due percorsi principali.

Opzione 1 — Integrazione API:

Per i sistemi con webhook o esportazioni in streaming, instrada le voci attraverso l'API di anonym.legal prima del warehouse. I ticket che escono da Intercom passano prima per l'API. Le esportazioni Stripe lo stesso.

POST /api/anonymize
{
  "text": "Il cliente Mario Rossi (mrossi@example.it) ha segnalato...",
  "entities": ["PERSON", "EMAIL_ADDRESS", "PHONE_NUMBER"],
  "method": "replace"
}

Opzione 2 — Pre-elaborazione batch:

Per le esportazioni giornaliere o settimanali di file CSV/JSON, esegui i file tramite elaborazione batch prima del caricamento.

Struttura del DAG Airflow:

extract_task >> anonymize_batch_task >> load_to_warehouse_task

Il task di anonimizzazione carica i file e restituisce versioni pulite. Il task di caricamento gestisce il resto.

Consulta la nostra pagina sulle pratiche di sicurezza per i dettagli sui sub-responsabili del trattamento e sui flussi di dati.

Cosa fanno e non fanno i tag sulle colonne dbt

dbt ti permette di taggare le colonne PII:

models:
  - name: stg_customers
    columns:
      - name: email
        tags: ['pii', 'email']
      - name: full_name
        tags: ['pii', 'personal_data']

I tag ti permettono di:

  • Documentare dove si trovano i dati personali
  • Attivare policy di mascheramento downstream (richiede configurazione a livello di warehouse)
  • Tracciare la lineage con strumenti come Secoda

I tag non:

  • Mascherano le tabelle caricate nello schema raw
  • Bloccano le query dirette sulle tabelle
  • Anonimizzano i dati al momento del caricamento
  • Mascherano retroattivamente i vecchi dati

I tag sulle colonne dbt sono uno strumento di governance. Mostrano dove si trovano i dati personali. Non applicano le "misure tecniche adeguate" richieste dall'Articolo 32 del GDPR.

Il limite del mascheramento in Snowflake

Il mascheramento dinamico di Snowflake nasconde il contenuto delle colonne agli utenti al momento della query. È un controllo efficace per l'uso in produzione. Ma ha limiti chiari.

Limiti principali:

  • Ogni nuova colonna necessita di una policy esplicita
  • Le modifiche allo schema possono lasciare nuove colonne non mascherate fino all'aggiornamento delle policy
  • I ruoli SYSADMIN e ACCOUNTADMIN possono bypassare il mascheramento
  • I job di importazione spesso vengono eseguiti con privilegi elevati che saltano il mascheramento
  • I vecchi dati caricati prima dell'impostazione delle policy sono archiviati in chiaro — le policy vengono applicate al momento della lettura, non della scrittura

Il mascheramento al momento della query non è sufficiente. I dati devono essere puliti prima di essere archiviati.

Documentazione di conformità

Il principio di responsabilità del GDPR richiede prove. Le parole non bastano. Per i team di ingegneria questo significa registrazioni scritte.

Registro delle attività di trattamento (RoPA): Documenta che le informazioni sui clienti vengono anonimizzate prima del caricamento nel data warehouse per l'analisi. La fase di anonimizzazione è un'attività di trattamento ai sensi del GDPR.

Note sulle misure tecniche: Scrivi quali tipi di entità la tua pipeline prende di mira. Annota il metodo di anonimizzazione utilizzato. I log delle esecuzioni batch te lo forniscono gratuitamente.

Lineage dei dati: Secoda o la lineage integrata di dbt possono mostrare che le tabelle sorgente passano attraverso una fase di anonimizzazione prima di raggiungere i modelli analitici. Questa è la tua traccia di audit.

Registro dei fornitori: Il servizio di anonimizzazione è un sub-responsabile del trattamento. Il loro DPA e la loro informativa sulla privacy devono essere nel tuo registro dei fornitori.

Passaggi di implementazione

Per una pipeline con dbt e Snowflake:

Passaggio 1: Verifica il tuo layer raw

Individua quali tabelle contengono informazioni personali. Interroga i tag delle colonne dbt o il tuo catalogo per le tabelle taggate come PII.

Passaggio 2: Definisci l'ambito dell'anonimizzazione

Per ogni tabella sorgente, decidi quali colonne contengono dati personali. Poi decidi quali necessitano di anonimizzazione e quali di pseudonimizzazione. Corpo del ticket di supporto: anonimizza. Order ID: pseudonimizza per mantenere intatte le chiavi di join. Timestamp: mantieni invariato per l'analisi delle serie temporali.

Passaggio 3: Scegli un percorso di implementazione

Team piccolo con esportazioni batch: usa l'elaborazione batch di file prima del caricamento. Team di ingegneria disponibile: costruisci l'integrazione API in Airflow o Prefect.

Passaggio 4: Testa e valida

Esegui l'anonimizzazione su un campione prima di andare in produzione. Verifica che i modelli dbt funzionino ancora. Alcuni modelli fanno join sull'email. Questi necessitano di valori di sostituzione coerenti. La pseudonimizzazione mantiene le chiavi di join. La redazione le rompe.

Passaggio 5: Gestisci le vecchie tabelle raw

Il contenuto caricato prima che l'anonimizzazione fosse in vigore necessita di elaborazione retroattiva. Esporta, anonimizza, ricarica. Questo è un compito una tantum per tabella.

Conclusione

Il mascheramento basato su tag ti mostra dove si trovano i dati personali. Non impedisce agli utenti con accesso allo schema di leggerli. Per una reale conformità al GDPR, i dati personali devono essere puliti prima di raggiungere il warehouse. Questo rende il layer di ingestione sicuro quanto il layer di produzione.

È più difficile del tagging delle colonne. Ma è ciò che significano concretamente le "misure tecniche adeguate".

Fonti

Pronto a proteggere i tuoi dati?

Inizia ad anonimizzare i PII con oltre 285 tipi di entità in 48 lingue.

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.