anonym.legal
Назад к блогуТехнические

Создание безопасного для GDPR канала данных...

Теги столбцов dbt не соответствуют требованиям GDPR. Сырые данные клиентов попадают в ваш дата-склад Snowflake без маскировки до применения политик...

April 19, 20268 мин чтения
data pipelinedbtSnowflakedata warehouseELT anonymizationGDPR engineering

Создание безопасного для GDPR канала данных: анонимизация PII до поступления в ваш дата-склад

Вы пометили свои столбцы PII в dbt. Ваша политика динамической маскировки данных настроена в Snowflake. Вы чувствуете себя соответствующим требованиям GDPR.

Ваши сырые данные все равно попадают в склад без маскировки. Политика маскировки применяется во время запроса — но сырые, немаскированные данные существуют в вашем сыром слое, доступные любому с доступом к сырой схеме. Ваши модели dbt выполнялись до того, как ваши политики маскировки были установлены, и исторические сырые данные никогда не были замаскированы.

Разрыв между "у нас есть политики маскировки" и "наши данные действительно защищены" — это место, где происходят нарушения GDPR.

Как каналы ELT создают уязвимость PII

Шаблон Extract-Load-Transform (ELT) — доминирующий в современной инженерии данных — сначала загружает сырые данные в склад, а затем преобразует их:

  1. Извлечение: Данные из исходной системы (Salesforce CRM, Stripe payments, Intercom support) извлекаются со всеми полями
  2. Загрузка: Сырые данные загружаются в сырой схеме склада — Snowflake, BigQuery, Redshift — включая все поля PII
  3. Преобразование: Модели dbt выполняются для очистки, объединения и агрегации данных для аналитического использования

Сырой слой содержит немаскированные, полные персональные данные: имена клиентов, адреса электронной почты, номера телефонов, платежную информацию, содержание тикетов поддержки. Любой с доступом к сырой схеме — а в многих организациях это широкий круг инженеров данных и аналитиков — может запрашивать их напрямую.

Динамическая маскировка на основе тегов в Snowflake помогает во время запроса для правильно настроенных моделей на downstream. Но она не маскирует сырые данные ретроактивно. Она не защищает от прямых запросов к сырой схеме. Она требует, чтобы каждая модель на downstream и панель управления были правильно помечены — это бремя обслуживания, которое растет с усложнением схемы.

Подход к анонимизации на уровне канала

Анонимизация PII на уровне канала — до того как данные попадут в склад — устраняет уязвимость сырого слоя:

Подход ETL (анонимизация до загрузки):

  1. Извлечение данных из исходных систем
  2. Направление через этап анонимизации
  3. Загрузка анонимизированных данных в склад

Склад никогда не получает сырые PII. Сырая схема содержит анонимизированные данные. Модели на downstream, панели управления и прямые запросы все работают с анонимизированными данными.

Это требует либо:

  • Анонимизация, интегрированная в этап извлечения (на уровне API)
  • Анонимизация как этап канала между извлечением и загрузкой

Вариант реализации — интеграция API: Для систем с исходящими вебхуками или потоковыми экспортами, направьте данные через API anonym.legal перед тем, как они попадут в склад. Тикеты поддержки клиентов, покидающие Intercom → API анонимизации → склад. Записи платежей Stripe → API анонимизации → склад.

POST /api/anonymize
{
  "text": "Клиент Джон Смит (john@example.com) сообщил...",
  "entities": ["PERSON", "EMAIL_ADDRESS", "PHONE_NUMBER"],
  "method": "replace"
}

Вариант реализации — Пакетная предобработка: Для данных, загружаемых пакетами (ежедневные/еженедельные экспорты из исходных систем), выполните экспортированные файлы CSV/JSON через пакетную обработку перед загрузкой в склад.

Структура DAG Airflow:

extract_task >> anonymize_batch_task >> load_to_warehouse_task

Задача anonymize_batch_task загружает извлеченные файлы в пакетную обработку и получает анонимизированные версии. Задача загрузки загружает анонимизированные файлы.

Теги столбцов dbt: что они делают и чего не делают

dbt поддерживает маркировку столбцов PII:

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

Это позволяет:

  • Документирование местоположений PII
  • Запуск политик маскировки на downstream (требует настройки на уровне склада)
  • Отслеживание происхождения (инструменты, такие как secoda, могут отслеживать помеченные столбцы через модели на downstream)

Это не позволяет:

  • Маскировка сырых данных в сырой схеме
  • Защита от прямых запросов к сырым таблицам
  • Автоматическая анонимизация во время загрузки
  • Ретроактивная маскировка исторических данных

tags столбцов dbt являются инструментом документации и управления. Они полезны для понимания, где существует PII в вашей модели данных. Они не реализуют "соответствующие технические меры", которые требует статья 32 GDPR для защиты данных.

Пробел в динамической маскировке данных Snowflake

Динамическая маскировка данных Snowflake применяет политики маскировки к столбцам, скрывая данные от пользователей без привилегий на снятие маски во время запроса. Это мощный контроль для производственных случаев использования.

Ограничения:

  • Маскировка применяется к столбцам, на которых она настроена — любой столбец, добавленный после первоначальной настройки, требует явного применения политики
  • Эволюция схемы (новые столбцы, переименованные столбцы) может создать немаскированные столбцы PII, пока политики не будут обновлены
  • Пользователи с ролью SYSADMIN или ACCOUNTADMIN обычно могут обойти маскировку
  • Процессы импорта сырых данных часто выполняются с повышенными привилегиями, которые обходят маскировку
  • Исторические данные, загруженные до реализации политик, хранятся немаскированными (политики применяются во время чтения, а не во время хранения)

Для истинной защиты маскировка во время запроса недостаточна. Данные должны быть анонимизированы до хранения.

Документация по соблюдению для аналитических каналов

Принцип подотчетности GDPR требует демонстрации соблюдения, а не просто утверждения этого. Для команд по инженерии данных это означает:

Записи о процессинговой деятельности (ROPA): Документируйте, что данные клиентов анонимизируются перед загрузкой в аналитический склад. Этап анонимизации в вашем канале является процессинговой деятельностью в соответствии с GDPR.

Документация по техническим мерам защиты: Конфигурация анонимизации (какие типы сущностей, какой метод), используемая в вашем канале. Метаданные обработки из пакетных запусков предоставляют это автоматически.

Происхождение данных: Инструменты, такие как Secoda или встроенное происхождение dbt, могут показать, что данные из исходной системы проходят через этап анонимизации перед достижением аналитических моделей. Это происхождение является вашим аудиторским следом по соблюдению.

Документация по субподрядчикам: Служба анонимизации является субподрядчиком. Их DPA и политика конфиденциальности должны быть задокументированы в вашем реестре поставщиков.

Практическое руководство по реализации

Для канала на основе dbt с Snowflake:

Шаг 1: Аудит уязвимости сырого слоя Определите, какие таблицы в вашей сырой схеме содержат персональные данные. Запросите ваши теги столбцов dbt или ваш каталог данных для таблиц с тегами PII.

Шаг 2: Определите объем анонимизации Для каждой сырой таблицы: какие столбцы содержат PII? Какие должны быть анонимизированы, а какие сохранены? (Содержание тикета поддержки клиента: анонимизировать. Идентификатор заказа: псевдонимизировать с последовательной заменой для разрешения сущностей. Временная метка: сохранить для анализа временных рядов.)

Шаг 3: Выберите подход к реализации Небольшая команда, данные, загружаемые пакетами: пакетная обработка файлов перед загрузкой Ресурсы по инженерии данных: интеграция API в канале Airflow/Prefect

Шаг 4: Тестирование и валидация Запустите анонимизацию на выборке сырых данных перед производственной реализацией. Убедитесь, что модели dbt на downstream все еще функционируют правильно с анонимизированным вводом. Некоторые модели могут использовать адреса электронной почты для объединения — эти значения должны использовать последовательные заменяющие значения (псевдонимизация сохраняет ключи объединения, редактирование их нарушает).

Шаг 5: Обработка исторических данных Существующие сырые данные (загруженные до реализации анонимизации) требуют ретроактивной обработки. Экспортируйте, анонимизируйте, перезагрузите. Это одноразовая операция для каждой исторической таблицы.

Заключение

Маскировка на основе тегов является инструментом управления, а не средством безопасности. Она говорит вам, где находится ваша PII; она не предотвращает доступ к вашей PII пользователям с доступом к сырой схеме. Для истинного соблюдения требований GDPR в каналах данных PII должна быть анонимизирована до того, как она попадет в склад — что делает сырой слой таким же безопасным, как и производственный слой.

Это более сложная реализация, чем маркировка столбцов, но именно это и требует "соответствующие технические меры".

Источники:

Готовы защитить ваши данные?

Начните анонимизацию PII с 285+ типов сущностей на 48 языках.