By · Last updated 2026-05-29

ブログに戻るテクニカル

GDPRに安全なデータパイプラインの構築:データウェアハウスに到達する前にPIIを匿名化する

dbtのカラムタグはGDPR準拠ではありません。生の顧客データは、タグベースのポリシーが適用される前にマスクされずにSnowflakeウェアハウスに到達します。このガイドでは、データが分析インフラストラクチャに到達する前にパイプライン内でPIIを匿名化する方法を説明します。

May 29, 20268 分で読めます
data pipelinedbtSnowflakedata warehouseELT anonymizationGDPR engineering

GDPRに準拠したパイプライン:保存前にPIIを匿名化する

2026年版に更新

dbtでPII列にタグを付けました。Snowflakeで動的マスキングを設定しました。GDPRに準拠していると感じています。

しかし、ソースデータは今もマスキングなしでウェアハウスに入ります。マスキングはクエリ時に適用されます。マスキングされていないコンテンツがrawスキーマに存在します。rawスキーマにアクセスできる人なら誰でも読めます。dbtモデルはマスキングポリシーが存在する前に実行されました。古く取り込まれたテーブルはマスキングされていません。

「マスキングポリシーがある」と「パイプラインが安全」の間にある差こそが、GDPR违反が起きる場所です。

anonym.legalがGDPR義務をどのようにサポートするかはコンプライアンス概要をご覧ください。

ELTパイプラインがPIIを露出する仕組み

Extract-Load-Transform(ELT)パターンは今や標準です。まずソースデータをウェアハウスに読み込みます。変換は後で行います。ステップは以下の通りです:

  1. 抽出: ソースシステムがすべてのフィールドをエクスポートします。Salesforce CRM、Stripe決済、Intercomサポート — すべて出力されます。
  2. 読み込み: ソースデータがウェアハウスの取り込みスキーマに入ります。Snowflake、BigQuery、Redshiftはすべて同様に動作します。すべてのPIIフィールドが含まれます。
  3. 変換: dbtモデルがデータをクリーニングし、分析用に結合します。

取り込み層には個人情報が完全に含まれます。名前、メールアドレス、電話番号、決済情報、サポートチケットのテキスト。多くのチームでは、エンジニアとアナリストがrawスキーマにアクセスできます。これらのテーブルをいつでも直接クエリできます。

Snowflakeのタグベースのマスキングはクエリ時に役立ちます — ただし適切に設定されたダウンストリームモデルに対してのみです。古い取り込みテーブルをマスキングしません。スキーマへの直接クエリをブロックしません。すべてのモデルとダッシュボードにタグを付ける必要があります。その負担はスキーマが成長するにつれて増えます。

読み込み前に匿名化する

パイプラインレベルでPIIを匿名化すると、取り込み層のリスクが解消されます。コンテンツがウェアハウスに入る前に行ってください。

ETLアプローチ(事前匿名化):

  1. ソースシステムから抽出
  2. 匿名化ステップを通す
  3. クリーンな出力をウェアハウスに読み込む

ウェアハウスはマスキングされていないPIIを受け取りません。取り込みスキーマにはクリーンなコンテンツのみが含まれます。ダウンストリームモデル、ダッシュボード、直接クエリはすべてクリーンな出力で動作します。

主に2つの実装方法があります。

オプション1 — API統合:

Webhookやストリーミングエクスポートがあるシステムでは、まずエントリをanonym.legal APIにルーティングします。Intercomを出るサポートチケットはウェアハウスの前にAPIを通ります。Stripeエクスポートも同様です。

POST /api/anonymize
{
  "text": "顧客の田中太郎(taro@example.com)が報告しました...",
  "entities": ["PERSON", "EMAIL_ADDRESS", "PHONE_NUMBER"],
  "method": "replace"
}

オプション2 — バッチ前処理:

日次または週次のCSV/JSONファイルエクスポートには、読み込み前にバッチ処理でファイルを処理します。

Airflow DAG構造:

extract_task >> anonymize_batch_task >> load_to_warehouse_task

匿名化タスクがファイルをアップロードし、クリーンなバージョンを取得します。読み込みタスクが残りを処理します。

サブプロセッサとデータフローの詳細はセキュリティプラクティスページをご覧ください。

dbtカラムタグが行うことと行わないこと

dbtではPIIカラムにタグを付けられます:

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

タグで可能なこと:

  • PIIの場所の文書化
  • ダウンストリームのマスキングポリシーのトリガー(ウェアハウスレベルの設定が必要)
  • Secodaなどのツールによるリネージ追跡

タグでできないこと

  • rawスキーマの取り込みテーブルのマスキング
  • テーブルへの直接クエリのブロック
  • 読み込み時の自動匿名化
  • 古いデータの遡及的なマスキング

dbtカラムタグはガバナンスツールです。PIIがどこにあるかを示します。GDPRの第32条が要求する「適切な技術的措置」を実施しません。

Snowflake動的マスキングのギャップ

Snowflakeの動的マスキングは、クエリ時にユーザーからカラムのコンテンツを隠します。本番ユースケースには強力なコントロールです。しかし、明確な限界があります。

主な限界:

  • 新しいカラムごとに明示的なポリシーが必要
  • スキーマ変更により、ポリシーを更新するまで新しいカラムがマスキングなしになることがある
  • SYSADMINとACCOUNTADMINロールは通常マスキングをバイパスできる
  • インポートジョブはしばしば高権限で実行され、マスキングをスキップする
  • ポリシー設定前に読み込まれた古いデータはプレーンテキストで保存される — ポリシーは書き込み時ではなく読み取り時に適用される

クエリ時のマスキングだけでは十分ではありません。データは保存前にクリーンである必要があります。

コンプライアンス文書化

GDPRの説明責任原則は証明を要求します。言葉だけでは不十分です。エンジニアリングチームにとって、これは書面による記録を意味します。

処理活動記録(RAT): 顧客情報が分析ウェアハウスに読み込まれる前に匿名化されることを文書化します。匿名化ステップはGDPRの下での処理活動です。

技術的保護措置のメモ: パイプラインが対象とするエンティティタイプを記録します。使用した匿名化方法を記録します。バッチ処理ログが自動的にこれを提供します。

データリネージ: Secodaまたはdbtのビルトインリネージで、ソーステーブルが分析モデルに到達する前に匿名化ステップを経ることを示せます。これが監査証跡になります。

ベンダー登録: 匿名化サービスはサブプロセッサです。彼らのDPAとプライバシーポリシーはベンダー登録に記載する必要があります。

実装ステップ

dbtとSnowflakeのパイプラインの場合:

ステップ1:rawレイヤーを監査する

個人情報を含むテーブルを見つけます。dbtカラムタグまたはカタログでPIIタグが付いたテーブルを検索します。

ステップ2:匿名化の範囲を定義する

各ソーステーブルについて、どのカラムにPIIが含まれるかを決定します。次に、どのカラムを匿名化し、どのカラムを仮名化するかを決めます。サポートチケットの本文:匿名化。注文ID:結合キーを保持するために仮名化。タイムスタンプ:時系列分析のためにそのまま保持。

ステップ3:実装方法を選択する

バッチエクスポートを使う小規模チーム:読み込み前にバッチファイル処理。エンジニアリングチームが利用可能:AirflowまたはPrefectでAPI統合を構築。

ステップ4:テストと検証

本番運用前にサンプルで匿名化を実行します。dbtモデルが引き続き動作することを確認します。一部のモデルはメールで結合します。それらは一貫した置換値が必要です。仮名化は結合キーを保持します。削除はキーを壊します。

ステップ5:古いテーブルを処理する

匿名化が実装される前に読み込まれたコンテンツは遡及的な処理が必要です。エクスポート、匿名化、再読み込み。テーブルごとに一度だけ行う作業です。

まとめ

タグベースのマスキングはPIIがどこにあるかを示します。スキーマにアクセスできるユーザーがそれを読むことを防ぎません。真のGDPRコンプライアンスのためには、PIIがウェアハウスに到達する前にクリーンである必要があります。それにより取り込み層が本番層と同じくらい安全になります。

これはカラムタグ付けより難しいです。しかし、それが「適切な技術的措置」が実際に意味することです。

出典

データを保護する準備はできましたか?

48言語で285以上のエンティティタイプを使用してPIIを匿名化し始めましょう。

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.