Budování GDPR bezpečného datového potrubí: Anonymizace PII před dosažením datového skladu
Otagovali jste své sloupce PII v dbt. Vaše zásada dynamického maskování dat je nakonfigurována v Snowflake. Cítíte se v souladu s GDPR.
Vaše nezpracovaná data stále přicházejí do skladu nemasked. Zásada maskování se uplatňuje v čase dotazu — ale nezpracovaná, nemasked data existují ve vaší surové vrstvě, dostupná pro kohokoli s přístupem k surovému schématu. Vaše modely dbt běžely dříve, než byly zavedeny vaše zásady maskování, a historická surová data nebyla nikdy maskována.
Mezera mezi „máme zásady maskování" a „naše data jsou skutečně chráněna" je místem, kde dochází k porušením GDPR.
Jak ELT potrubí vytváří expozici PII
Vzor Extract-Load-Transform (ELT):
- Extrahujte data ze zdrojových systémů (CRM, podpora, formuláře)
- Načtěte nezpracovaná data přímo do skladu (Snowflake, BigQuery, Redshift)
- Transformujte pomocí dbt pro analytické vrstvy
- Aplikujte maskování v čase dotazu prostřednictvím zásad skladu
Problém: Krok 2 vypustí nezpracovanou PII do vašeho skladu před krokem 4. Zákazníci e-mailové adresy, telefonní čísla, jména — všechny v surové vrstvě, čekající na transformaci, do které nemusí nikdy dojít pro historické záznamy.
GDPR expozice v typickém skladu
Typické Snowflake prostředí s tabulkami CRM:
| Tabulka | PII pole | GDPR vystavení |
|---|---|---|
| raw.customers | email, phone, name, address | Plné PII, přístupné jakémukoli analytiku |
| raw.support_tickets | message_body, customer_email | Může obsahovat finanční/zdravotní PII |
| raw.form_submissions | free_text_field | Nekontrolovaný vstup PII |
| staging.customers | e-mail, telefon (stále surové) | dbt staging, ne anonymizovaný |
Zásada maskování platí pro analytics.customers — ne pro raw.customers. Auditor, který zkontroluje záznamy surového přístupu, uvidí přístup k nemasked PII pro každého, kdo spouštěl modely dbt.
Správný přístup: Anonymizace v potrubí, ne v čase dotazu
Anonymizace PII by měla probíhat v kroku transformace — nikoli jako zásada přístupu:
Krok 1: Detekce v API Odesílejte pole volného textu do API anonym.legal před načtením:
# V rámci ETL transformace
import requests
def anonymize_field(text, entities=None):
response = requests.post(
'https://anonym.legal/api/anonymize',
json={
'text': text,
'language': 'en',
'anonymize': True
}
)
return response.json()['anonymized_text']
Krok 2: Nahraďte v potrubí Aplikujte anonymizaci před načtením do skladu:
# dbt pre-hook nebo vlastní skript ETL
raw_df['customer_email'] = raw_df['customer_email'].apply(
lambda x: anonymize_email(x) # → u***@domain.com
)
Krok 3: Ověřte pre-load Spusťte validaci PII detekce na transformovaných datech před načtením:
POST /api/analyze → ověřte 0 entit ve vašich cílových polích
Výsledky GDPR auditu
Organizace implementující anonymizaci na úrovni potrubí hlásí:
| Auditní metrika | Maskování v čase dotazu | Anonymizace potrubí |
|---|---|---|
| PII v surové vrstvě | Ano (přístupné administrátorům) | Ne |
| Záznamy přístupu k PII | Složité (různé role) | Žádné (data nejsou tam) |
| Obhajitelnost auditu | Střední | Vysoká |
| Expozice historických dat | Závisí na politice | Žádná |
Zdroje: GDPR článek 25 — ochrana dat designem · Pokyny EDPB k anonymizaci · Průvodce správou dat dbt