By · Last updated 2026-06-05

ブログに戻るテクニカル

API ログのJSON内PIIマスキングとGDPR監視可能性

APIサーバーログに含まれるJSON形式のPIIを自動的に検出・マスキングする実装。GDPR監視可能性要件との両立。

June 5, 20266 分で読めます
API logsGDPR complianceJSON anonymizationobservabilitystorage limitation

ログスタックに潜むGDPRリスク

2026年版に更新

多くのチームはデータベースで個人情報を確認します。しかし、ログシステムに同じ厳格さを適用するチームは少数です。

GDPRの第5条第1項(e)は、個人情報の保存期間を「必要な限度」に制限しています。データベースでは、チームが保持ポリシーと削除ジョブを設定します。ログファイルのルールはより単純です:デバッグとセキュリティのために90日間すべてを保持する。

問題は何でしょうか?これらのレコードには個人情報が含まれています。リクエストエントリにはユーザーのメールアドレスが含まれます。エラーキャプチャには生の入力値が含まれます。アクセスエントリにはIPアドレスが含まれます。これらはすべてGDPRの下で個人情報として扱われます。チームは各ケースに対して法的根拠と保持計画が必要です。

ログファイルに記録される情報

標準的なWebアプリのロギングは、さまざまなソースから幅広いPIIを収集します。

アクセスレコード(nginx/Apache):

  • IPアドレス — EDPBのガイダンスに基づく個人情報
  • ユーザーエージェント文字列 — デバイスフィンガープリンティングを可能にする場合あり
  • セッショントークン — 出力に含まれる場合

アプリレコード(構造化JSON):

  • ユーザーIDとメールアドレス
  • 入力エラー — 無効な値が含まれることが多く、実際のユーザー情報である可能性あり
  • ビジネスイベント — 顧客アカウントに紐付いた注文ID
  • 検索クエリ — 氏名や住所が含まれる場合あり

APIゲートウェイレコード:

  • 認証ヘッダー — 一部の設定では部分的に記録される
  • クエリパラメータ — ユーザーID、氏名、メールアドレスが含まれる場合あり
  • リクエストとレスポンスの本文 — デバッグレベルの設定で存在

データベース監査エントリ:

  • email = 'user@example.com' のようなWHERE句を含むSQLクエリ
  • クエリパラメータに含まれる個人情報の生の値

この蓄積は意図的ではありません。デバッグのために設計されたロギング慣行の副作用であり、GDPRコンプライアンスを念頭に置いたものではありません。

IPアドレスに関するEDPBの見解

欧州データ保護委員会(EDPB)は、IPアドレスを個人情報と一貫して判断しています。インターネットサービスプロバイダーはIPアドレスを加入者と結び付けることができます。組織内では、特定のユーザーを識別できます。

影響は直接的です。IPアドレスを含むアクセスレコードは個人情報のレコードです。nginxの出力を12か月保持することは、個人情報を12か月保持することを意味します。これにはArticle 6の下での法的根拠が必要です。また、保持期間が特定の目的に一致している必要があります。

ほとんどのチームはこの分析を省略します。「セキュリティチームが言ったので90日間エントリを保持する」は運用上のルールです。GDPRの第5条第1項(e)の審査ではありません。全体的なプログラムとしてどう位置付けるかは法的コンプライアンスの概要をご覧ください。

コンプライアンスへの道

ほとんどのチームにとって現実的な方法は、保持期間を短縮することではありません。長い期間の運用上・セキュリティ上の理由は実在します。より良いアプローチは、長期保存の前にレコードをマスキングすることです。

段階的なモデルが効果的です。

0〜7日: アクティブなデバッグのための完全な生レコード。7日間はほとんどのチームには十分に短い期間です。

7〜90日: トレンド分析とセキュリティ監視のためのマスキング済みレコード。IPアドレスが置き換えられます。ユーザーのメールアドレスは安定したトークンになります。アカウント番号がマスキングされます。技術的なフィールド(タイムスタンプ、エラーコード、レイテンシ、エンドポイント)はそのまま保持されます。

90日以上(必要な場合): 集計された出力のみ。イベント数、エラー率、レイテンシ範囲。個人レベルのレコードは残りません。

個人情報の保持は7日間で終わります。集計された出力は誰かを特定することなく保持できます。詳細についてはセキュリティとコンプライアンスをご参照ください。

監視のためにJSON構造を保持する

優れたマスキングはJSON構造を維持します。コンテンツのみを置き換えます。これにより、出力はデバッグとアラートに引き続き有用です。

保持される項目:

  • JSONの構造とキー名
  • タイムスタンプと時系列
  • エラーの種類とHTTPステータスコード
  • HTTPメソッド、パス、レイテンシの値
  • ビジネスイベントの種類

置き換えられる項目:

  • メールアドレス → ファイル内でオリジナルごとに安定したトークン(例:user1@example.com
  • IPアドレス → RFC 5737の範囲(192.0.2.x
  • アカウント番号 → ACCT_XXXXX
  • 電話番号 → +XX XXX XXX XXXX
  • エラーテキスト内の氏名 → [PERSON]

安定したトークンはトレースを有用に保ちます。40エントリにわたるuser1@example.comのトレースは、オリジナルと同様に機能します。集計されたメトリクス(エラー率、レイテンシ、スループット)は個人情報を必要としません。仮名化匿名化の定義については用語集をご覧ください。

3つの統合オプション

3つのパターンがほとんどのエンジニアリングチームをカバーします。

オプション1 — パイプラインマスキング: FluentdまたはLogstashが転送前に各行を傍受します。マスキングステップがインラインで実行されます。ElasticまたはDatadogはクリーンなレコードのみを受信します。アプリコードの変更は不要です。

オプション2 — 夜間バッチ処理: 生レコードがローカルストレージに保存されます。夜間ジョブが前日の出力をマスキングし、生バージョンを削除します。マスキング済みレコードは長期ストレージに送られます。生の出力は7日間のみ保持されます。

オプション3 — 共有前マスキング: 生レコードは厳格なアクセス制御のもとで内部に保持されます。ペンテスターや外部委託業者と共有する前に、マスキング処理を実行します。外部の関係者は常にクリーンなバージョンを受け取ります。

GDPRの文書化において、マスキングはArticle 32の下での「技術的措置」です。ツール、設定、保持ポリシーをArticle 30の下での処理活動の記録(RoPA)に記載してください。RoPAに関する一般的な質問についてはFAQをご覧ください。

実際のスタックへの適用例をご覧になりたいですか?具体的な実装の詳細についてはケーススタディをご確認ください。組み込みマスキングパイプラインを含むプランについては料金ページをご参照ください。

出典

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

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.