ブログに戻るテクニカル

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

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

March 6, 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言語で273のエンティティタイプを使用してPIIを匿名化し始めましょう。