Datadog Sensitive Data Scanner で APM スパンの機密データをマスキングしてみた

Datadog Sensitive Data Scanner で APM スパンの機密データをマスキングしてみた

Datadog の Sensitive Data Scanner を使って、APM スパンに含まれるクエリ文字列の機密データをマスキングしてみました。
2025.09.01

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

個人情報や API キーなどの機密データがうっかりログやトレースに出力してしまったことはありませんか?
特に APM は便利な反面、気づかないうちに機密データが Datadog に取り込まれてしまうこともあります。
本来、ログやトレースに機密データを含めるべきではありませんが、デバッグやトラブルシューティングの過程で、うっかり出力してしまうこともあります。
Datadog の Sensitive Data Scanner を利用すると、機密データを自動で検出&マスキングできるため、情報漏洩やコンプライアンス違反のリスクを減らすことができます。
今回は、APM スパンに含まれる URL のクエリ文字列に対して、Sensitive Data Scanner を使ってマスキングしてみました。

Sensitive Data Scanner とは

Datadog に取り込まれるアプリケーションログ、APM スパン、RUM イベントなどのテレメトリーデータ内に含まれる、以下のような機密データの検出・分類・マスキングを行う機能です。

  • クレジットカード番号
  • API キーやアクセストークン
  • IP アドレス
  • 個人を特定できる情報(PII) など

Datadog に新たに取り込まれるデータに対してのみ有効です。
すでに取り込まれて保存されているデータに対して、後からマスキングを行うことはできません。

機密データに対するアクション

検出された機密データに対して以下の5つのアクションを設定できます。

  • Redact 
    一致するすべてのデータを、指定したテキストに置き換えます。
    元の値は保持されません。
    設定前:&search=foo
    設定後:[sensitive_data]
    Redact説明用

  • Partially Redact
    一致したデータの一部をマスキング(墨消し)します。
    データの一部を残すことで識別性を保ちつつ保護できます。
    設定前:&search=foo
    設定後:&search=f**
    ParityRedact説明用

  • Hash
    一致したデータを一意のハッシュ値に変換します。
    元の値は保持されません。
    設定前:&search=foo
    設定後:8d824a449db63429
    Hash説明用

  • Mask
    一致する値を指定のテキストで難読化します。(ログのみ対応)
    ※権限があるユーザーは復元可能なため、注意が必要です。
    設定前:&search=foo
    設定後:[Hidden_data]
    マスク(ログ)説明用

  • アクションなし
    データの置き換えは行わず、検出された機密データにタグを付与します。
    主に検知や分類目的で使用され、データの可視性は維持されます。

定義済みルール

Sensitive Data Scanner には、あらかじめ用意された事前定義ルール[1]があり、正規表現を一から書く必要はありません。
代表的なものとして、以下のルールが用意されています。

  • Secrets and credentials
    API キー、アクセストークン、パスワード、クラウドサービスの認証情報など
    例:AWS Access Key、Claude API Key、GitHub Token など

  • Credit cards and banking
    クレジットカード番号や銀行口座情報などの金融データ
    例:Visa、MasterCard、Amex、銀行口座番号など

  • Personal Identifiable Information (PII)
    個人を特定できる情報
    例:氏名、住所、電話番号、パスポート番号など

  • Network and device information
    ネットワークやデバイスに関する技術的な情報
    例:IP アドレス、MAC アドレス、HTTP ヘッダー、クッキーなど

料金

Sensitive Data Scanner はスキャン対象のデータ量(GB)に応じて課金されます。
AP1 サイトでは 1GB あたり $0.38 /月です。
たとえば、1か月間に10 GB のログやスパンデータがスキャンされた場合、
0.38 ドル × 10 GB = 3.80 ドル / 月 の料金が発生します。

最新の料金についてはドキュメント[2]をご参照ください。

やってみた

今回は APM スパンに含まれるクエリ文字列に対して Sensitive Data Scanner のカスタムルールを追加し、機密データをマスキングしてみます。
以下の URL に含まれるクエリパラメータ search=foofoo 部分を機密データとみなし、Datadog の Sensitive Data Scanner を使ってマスキングします。

https://example.com/api/products?page=1&limit=12&search=foo

前提

  • Datadog APM がすでにセットアップされていること

マスキング対象の APM スパン属性

APM スパンには、以下の属性にクエリ文字列が含まれています。

  • Span Attributes
    • @http.url (リクエスト全体の URL)
    • @http.url_details.queryString(クエリパラメータ部分のみ)
      APMスパン

1. Scanning Group 設定

Datadog コンソール Security より Sensitive Data Scanner の Setting を選択します。
Add Group を選択します。
以下のように設定を行い、グループを追加します。

  • Filter for telemetry data to be included in the scanning group
    テレメトリデータのフィルター(例:env:development

  • Define scanning group name:
    任意の名前(例:scanning group for Development Telemetry)

正しく対象データをフィルタできているかは PREVIEW で APM Spans を選択することで確認可能です。
createsccangingroup

2.Scanning Rule 設定(url属性)

作成したグループに対して Add Scanning Rule を選択します。
以下のように設定を行い、ルールを追加します。

  • ルール
    Custom Rule

  • Rule name
    任意の名前(例:URL QueryString Rule)

  • Priority
    任意の重要度

  • Define regex pattern
    ([?&]search=)[^&]*

  • Type or paste event data to test the rule
    https://example.com/api/products?page=1&limit=12&search=foo
    対象 URL を入力し、正規表現がマッチしていることを確認します。

  • How much of the event do you want to scan?
    Entrie Event

  • マスキングアクション
    今回は Redact を選択し[sensitive_data]に置き換えてみます。

  • Add tag(s):
    sensitive_data_category:user.search_query

Scanning Rule 設定(url属性)

設定後、APM スパンを確認してみます。
url 属性のsearch=foo[sensitive_data]に置き換わったことが確認できました。
しかしながら、queryString 属性はマスキングがされておらず、機密データのマスキング処理が不十分です。
queryString 属性は後述の設定を行うことでマスキングが可能です。
Redactパターン1

3.Scanning Rule 設定(queryString属性)

同様に Add Scanning Rule を選択します。
以下のように設定を行い、さらにルールを追加します。

  • ルール
    Custom Rule

  • Rule name
    任意の名前(例:HTTP QueryString Rule)

  • Priority
    任意の重要度

  • Define regex pattern
    .+

  • How much of the event do you want to scan?
    Specific Attributes

  • For finer-grained processing, specify the attribute(s) to include in
    http.url_details.queryString.search

  • マスキングアクション
    今回は Redact を選択し[sensitive_data]に置き換えてみます。

  • Add tag(s):
    sensitive_data_category:user.search_query

Scanning Rule 設定(queryString属性)

設定後、APM スパンを確認してみます。
queryString 属性も[sensitive_data]に置き換わったことが確認できました。
最終系

検知サマリーを確認する

検知した機密データはルールごとにイベントのサマリーを確認することができます。
Datadog コンソール Security より Sensitive Data Scanner の Summary を選択します。
OF EVENTS より件数を確認することが可能です。
サマリー

スキャンデータ量の確認する

Datadog コンソール Security より Sensitive Data Scanner の Settings を選択します。
GROUPS 一覧より該当の GROUP NAME の DATA SCANNED(PAST24H) にカーソルを移動します。
Logs、APM Spans、Events ごとに過去24時間のスキャンデータ量を確認することが可能です。
取り込みデータ量確認

Filter を利用してスキャン対象を絞り込むことでスキャンデータ量を減らすことができるため、コスト削減にもつながります。
特定のサービスを指定したり、ALB ヘルスチェックといった特定のユーザーエージェントや Datadog 向け通信のテレメトリーデータを除外することも可能です。

  • フィルター例
    env:development service:shopping-site -@http.useragent:ELB-HealthChecker/2.0 -@peer.hostname:http-intake.logs.datadoghq.com

フィルター絞り込み

まとめ

Sensitive Data Scanner を使うことで、APM スパンやログに含まれる機密データを自動で検出・マスキングが可能です。
あらかじめ用意された定義済みルールがあるため、正規表現を書かなくても簡単に始められるメリットもあります。
スキャン対象の絞り込みを行うことでセキュリティ対策とコストのバランスも取りやすくなります。
特に金融や医療など、機密データを扱う機会が多い業界では、導入効果の高いのではないでしょうか。

本記事が参考になれば幸いです。

参考

https://docs.datadoghq.com/ja/security/sensitive_data_scanner/setup/telemetry_data/

脚注
  1. https://docs.datadoghq.com/ja/security/sensitive_data_scanner/_rules/library_rules/ ↩︎

  2. https://www.datadoghq.com/ja/pricing/?product=sensitive-data-scanner&site=ap1 ↩︎

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.