By · Last updated 2026-05-29

Powrót do blogaTechniczne

Pipeline zgodny z RODO: anonimizuj przed zapisem

Tagi kolumn w dbt to nie jest zgodność z RODO. Surowe dane klientów trafiają do hurtowni Snowflake bez maskowania, zanim polityki oparte na tagach zaczną obowiązywać.

May 29, 20268 min czytania
data pipelinedbtSnowflakedata warehouseELT anonymizationGDPR engineering

Pipeline zgodny z RODO: anonimizuj PII przed zapisem do hurtowni

Zaktualizowano dla roku 2026

Oznaczyłeś kolumny PII w dbt. Skonfigurowałeś dynamiczne maskowanie w Snowflake. Czujesz się zgodny z RODO.

Twoje dane źródłowe nadal trafiają do hurtowni bez maskowania. Maskowanie działa w czasie zapytań. Niemaskowane dane siedzą w schemacie surowym. Każdy z dostępem do tego schematu może je odczytać. Twoje modele dbt uruchomiły się zanim istniały polityki maskowania. Stare załadowane tabele nigdy nie zostały zamaskowane.

Przepaść między „mamy polityki maskowania” a „nasz pipeline jest bezpieczny” to właśnie miejsce, gdzie dochodzi do naruszeń RODO.

Jak anonym.legal wspiera zgodność z RODO, opisuje nasz przegląd zgodności.

Jak pipelines ELT narażają PII na ryzyko

Wzorzec Extract-Load-Transform (ELT) jest dziś normą. Najpierw ładuje dane źródłowe do hurtowni. Transformacje następują później. Kroki wyglądają tak:

  1. Ekstrakcja: Systemy źródłowe eksportują wszystkie pola. Salesforce CRM, płatności Stripe, wsparcie Intercom — wszystko wychodzi.
  2. Ładowanie: Dane źródłowe lądują w schemacie ingestion hurtowni. Snowflake, BigQuery, Redshift działają tak samo. Każde pole PII jest uwzględnione.
  3. Transformacja: Modele dbt czyszczą i łączą dane na potrzeby analityki.

Warstwa ingestion zawiera pełne dane osobowe. Imiona i nazwiska, adresy e-mail, numery telefonów, dane płatnicze, treść zgłoszeń obsługi. W wielu zespołach inżynierowie i analitycy mają dostęp do schematu surowego. Mogą w każdej chwili odpytywać te tabele.

Maskowanie oparte na tagach w Snowflake pomaga w czasie zapytań — ale wyłącznie dla modeli downstream skonfigurowanych poprawnie. Nie maskuje starych załadowanych tabel. Nie blokuje bezpośrednich zapytań na schemacie. Każdy model i dashboard musi być otagowany. To obciążenie rośnie wraz ze schematem.

Anonimizuj przed załadowaniem

Anonimizacja PII na poziomie pipeline'a eliminuje ryzyko warstwy surowej. Zrób to zanim dane trafią do hurtowni.

Podejście ETL (anonimizacja przed załadowaniem):

  1. Ekstrahuj z systemów źródłowych
  2. Przepuść przez krok anonimizacji
  3. Załaduj czysty wynik do hurtowni

Hurtownia nigdy nie otrzymuje niemaskowanych PII. Schemat ingestion zawiera tylko czyste dane. Modele downstream, dashboardy i bezpośrednie zapytania działają na czystym wyniku.

Masz dwie główne ścieżki.

Opcja 1 — Integracja przez API:

Dla systemów z webhookami lub strumieniowym eksportem: przepuszczaj wpisy przez API anonym.legal przed hurtownią. Zgłoszenia obsługi wychodzące z Intercom przechodzą przez API. Eksporty Stripe robią to samo.

POST /api/anonymize
{
  "text": "Klient Jan Kowalski (jan@example.pl) zgłosił...",
  "entities": ["PERSON", "EMAIL_ADDRESS", "PHONE_NUMBER"],
  "method": "replace"
}

Opcja 2 — Preprocessowanie wsadowe:

Dla dziennych lub tygodniowych eksportów plików CSV/JSON: uruchom pliki przez przetwarzanie wsadowe przed załadowaniem.

Struktura Airflow DAG:

extract_task >> anonymize_batch_task >> load_to_warehouse_task

Zadanie anonimizacji przesyła pliki i zwraca czyste wersje. Zadanie ładowania zajmuje się resztą.

Szczegóły dotyczące podprocesorów i przepływu danych znajdziesz na naszej stronie praktyk bezpieczeństwa.

Co robią, a czego nie robią tagi kolumn w dbt

dbt pozwala tagować kolumny PII:

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

Tagi umożliwiają:

  • Dokumentowanie, gdzie mieszkają PII
  • Wyzwalanie polityk maskowania downstream (wymaga konfiguracji na poziomie hurtowni)
  • Śledzenie lineage za pomocą narzędzi takich jak Secoda

Tagi nie:

  • Maskują załadowanych tabel w schemacie surowym
  • Blokują bezpośrednich zapytań na tabelach
  • Anonimizują danych w momencie ładowania
  • Retroaktywnie maskują starych danych

Tagi kolumn dbt to narzędzie zarządcze. Pokazują, gdzie są PII. Nie stosują „odpowiednich środków technicznych” wymaganych przez art. 32 RODO.

Luka w maskowaniu Snowflake

Dynamiczne maskowanie Snowflake ukrywa zawartość kolumn przed użytkownikami w czasie zapytania. To mocna kontrola dla środowisk produkcyjnych. Ma jednak wyraźne ograniczenia.

Kluczowe ograniczenia:

  • Każda nowa kolumna wymaga jawnej polityki
  • Zmiany schematu mogą pozostawiać nowe kolumny niemaskowane do czasu aktualizacji polityk
  • Role SYSADMIN i ACCOUNTADMIN mogą omijać maskowanie
  • Zadania importu często uruchamiają się z wysokimi uprawnieniami pomijającymi maskowanie
  • Stare dane załadowane przed wdrożeniem polityk są przechowywane w postaci jawnej — polityki działają w czasie odczytu, nie zapisu

Maskowanie w czasie zapytań nie wystarczy. Dane muszą być czyste przed zapisem.

Dokumentacja zgodności

Zasada rozliczalności RODO wymaga dowodów. Słowa nie wystarczą. Dla zespołów inżynierskich oznacza to pisemne rejestry.

Rejestr czynności przetwarzania (RoPA): Udokumentuj, że dane klientów są anonimizowane przed załadowaniem do hurtowni analitycznej. Krok anonimizacji stanowi czynność przetwarzania w rozumieniu RODO.

Notatki o środkach technicznych: Zapisz, jakie typy encji obsługuje Twój pipeline. Odnotuj zastosowaną metodę anonimizacji. Logi uruchomień wsadowych dostarczają tych informacji automatycznie.

Lineage danych: Secoda lub wbudowany lineage dbt może pokazać, że tabele źródłowe przechodzą przez krok anonimizacji zanim trafią do modeli analitycznych. To Twoja ścieżka audytu.

Rejestr dostawców: Usługa anonimizacji jest podprocesorem. Jej DPA i polityka prywatności muszą znajdować się w rejestrze dostawców.

Kroki implementacji

Dla pipeline'u z dbt i Snowflake:

Krok 1: Audyt warstwy surowej

Zidentyfikuj tabele zawierające dane osobowe. Odpytaj tagi kolumn dbt lub swój katalog w poszukiwaniu tabel otagowanych jako PII.

Krok 2: Ustal zakres anonimizacji

Dla każdej tabeli źródłowej zdecyduj, które kolumny zawierają PII. Następnie określ, które wymagają anonimizacji, a które pseudonimizacji. Treść zgłoszenia: anonimizuj. Identyfikator zamówienia: pseudonimizuj, by zachować klucze złączeń. Znacznik czasowy: pozostaw bez zmian do analizy szeregów czasowych.

Krok 3: Wybierz ścieżkę implementacji

Mały zespół z eksportami wsadowymi: użyj wsadowego przetwarzania plików przed załadowaniem. Dostępny zespół inżynierski: zbuduj integrację API w Airflow lub Prefect.

Krok 4: Przetestuj i waliduj

Uruchom anonimizację na próbce przed wdrożeniem na produkcję. Sprawdź, czy modele dbt nadal działają. Niektóre modele łączą na adresie e-mail. Te wymagają spójnych wartości zastępczych. Pseudonimizacja zachowuje klucze złączeń. Redakcja je niszczy.

Krok 5: Obsłuż stare tabele surowe

Dane załadowane przed wdrożeniem anonimizacji wymagają retroaktywnego przetworzenia. Eksportuj, anonimizuj, ładuj ponownie. To jednorazowe zadanie per tabela.

Podsumowanie

Maskowanie oparte na tagach pokazuje, gdzie są PII. Nie powstrzymuje użytkowników z dostępem do schematu od ich odczytu. Dla realnej zgodności z RODO dane muszą być czyste zanim trafią do hurtowni. To sprawia, że warstwa ingestion jest tak samo bezpieczna jak warstwa produkcyjna.

To trudniejsze niż tagowanie kolumn. Ale właśnie to oznaczają „odpowiednie środki techniczne”.

Ź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.