データセキュリティ

概要

Datadog トレーシングライブラリは、インスツルメンテーションされたアプリケーションからデータを収集します。そのデータはトレースとして Datadog に送信され、個人を特定できる情報 (PII) のような機密データが含まれている可能性があります。機密データをトレースとして Datadog に取り込む場合は、機密データスキャナーを使って取り込み時に修復を追加することができます。また、トレースが Datadog に送信される前に、Datadog Agent またはトレーシングライブラリを構成して、機密データを収集時に修復することもできます。

ここで説明する構成がコンプライアンス要件をカバーしない場合は、Datadog サポートチームにお問い合わせください。

トレースデータに含まれる個人情報

Datadog の APM トレーシングライブラリは、アプリケーションに関する関連する観測可能性データを収集します。これらのライブラリは、トレースデータに含まれる何百もの一意の属性を収集するため、このページでは、従業員やエンドユーザーの個人情報を含む可能性のある属性を中心に、データのカテゴリーについて説明します。

以下の表は、トレーシングライブラリによって提供される自動インスツルメンテーションによって収集される個人データのカテゴリーについて、一般的な例を挙げて説明しています。

カテゴリー説明
名前社内ユーザー (従業員) またはエンドユーザーの氏名。
メール社内ユーザー (従業員) またはエンドユーザーのメールアドレス。
クライアント IP受信リクエストに関連するエンドユーザーの IP アドレス、または送信リクエストの外部 IP アドレス。
データベースステートメント実行されたデータベースステートメントで使用されるリテラル、リテラル列、バインド変数。
地理的位置情報個人または世帯を特定するために使用できる経度と緯度の座標。
URI パラメーターURI パスまたは URI クエリの変数部分のパラメーター値。
URI ユーザー情報ユーザー名を含むことができる URI のユーザー情報サブコンポーネント。

以下の表は、データカテゴリーが収集されるかどうか、およびデフォルトで難読化されるかどうかに関する、各言語トレーシングライブラリのデフォルトの動作について説明しています。

カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
URI パラメーター
URI ユーザー情報

注: データベースステートメントはデフォルトでは収集されないため、有効にする必要があります。

カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
URI パラメーター
URI ユーザー情報

注: URI パラメーターはデフォルトでは収集されないため、有効にする必要があります。

カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
URI パラメーター
URI ユーザー情報

注: 名前とメールアドレスはデフォルトでは収集されないため、有効にする必要があります。

カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
URI パラメーター
URI ユーザー情報

注: クライアント IP、地理的位置、および URI パラメーターはデフォルトでは収集されないため、有効にする必要があります。

カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
URI パラメーター
URI ユーザー情報

注: クライアント IP はデフォルトでは収集されないため、有効にする必要があります。

カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
URI パラメーター
URI ユーザー情報

注: クライアント IP はデフォルトでは収集されないため、有効にする必要があります。データベースステートメントは、Datadog Agent によって難読化されます。

カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
クライアント URI パス
クライアント URI クエリ文字列
サーバー URI パス
サーバー URI クエリ文字列
HTTP 本文
HTTP クッキー
HTTP ヘッダー
カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
クライアント URI パス
クライアント URI クエリ文字列
サーバー URI パス
サーバー URI クエリ文字列
HTTP 本文
HTTP クッキー
HTTP ヘッダー
カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
クライアント URI パス
クライアント URI クエリ文字列
サーバー URI パス
サーバー URI クエリ文字列
HTTP 本文
HTTP クッキー
HTTP ヘッダー
カテゴリー収集難読化
名前
メール
クライアント IP
データベースステートメント
地理的位置情報
クライアント URI パス
クライアント URI クエリ文字列
サーバー URI パス
サーバー URI クエリ文字列
HTTP 本文
HTTP クッキー
HTTP ヘッダー

Datadog Application Security Management (ASM) を使用している場合、トレーシングライブラリは HTTP リクエストデータを収集し、セキュリティトレースの性質を理解するのに役立ちます。Datadog ASM は特定のデータを自動的に削除し、独自の検出ルールを構成することができます。これらのデフォルトと構成オプションの詳細については、 Datadog ASM データプライバシーのドキュメントを参照してください。

Agent

リソース名

Datadog のスパンには、機密データを含む可能性のあるリソース名属性が含まれています。Datadog Agent は、いくつかの既知のケースに対してリソース名の難読化を実装しています。

  • SQL numeric literals and bind variables are obfuscated (SQL の数値リテラルとバインド変数は難読化されます): 例えば、以下のクエリ SELECT data FROM table WHERE key=123 LIMIT 10 は、クエリスパンのリソース名を設定する前に、SELECT data FROM table WHERE key = ? LIMIT ? に難読化されます。
  • SQL literal strings are identified using standard ANSI SQL quotes (SQL リテラル文字列は、標準的な ANSI SQL 引用符**を使用して識別されます): これは、文字列はシングルクォート (') で囲まなければならないことを意味します。SQL の種類によっては、オプションで文字列のダブルクォート(")をサポートしていますが、ほとんどの場合、ダブルクォートされたものは識別子として扱われます。Datadog の難読化ツールは、これらを文字列ではなく識別子として扱い、難読化を行いません。
  • Redis queries are quantized by selecting only command tokens (Redis のクエリはコマンドトークンのみを選択して量子化されます): 例えば、以下のクエリ MULTI\nSET k1 v1\nSET k2 v2MULTI SET SET に量子化されます。

トレースの難読化

Datadog Agent は、リソース名に含まれない機密トレースデータも難読化します。難読化ルールは、環境変数または datadog.yaml コンフィギュレーションファイルを使用して構成できます。

以下のメタデータを難読化できます。

  • MongoDB クエリ
  • ElasticSearch リクエスト本文
  • Redis コマンド
  • MemCached コマンド
  • HTTP URL
  • スタックトレース

注: 難読化はシステムのパフォーマンスに影響を与えたり、機密情報ではない重要な情報を隠したりする可能性があります。セットアップにどのような難読化が必要かを検討し、適切に構成をカスタマイズしてください。

注: 複数のタイプのサービスに、同時に自動スクラビングを使用することができます。datadog.yaml ファイルの obfuscation セクションでそれぞれを構成します。

mongodb 型のスパン内の MongoDB クエリはデフォルトで難読化されます。

apm_config:
  enabled: true

  ## (...)

  obfuscation:
    mongodb:
      ## "mongodb" 型のスパンに対する難読化ルールを構成します。デフォルトでは有効になっています。
      enabled: true
      keep_values:
        - document_id
        - template_id
      obfuscate_sql_values:
        - val1

これは環境変数 DD_APM_OBFUSCATION_MONGODB_ENABLED=false で無効にすることもできます。

  • keep_values または環境変数 DD_APM_OBFUSCATION_MONGODB_KEEP_VALUES - Datadog Agent のトレース難読化から除外するキーのセットを定義します。設定しない場合は、すべてのキーが難読化されます。
  • obfuscate_sql_values または環境変数 DD_APM_OBFUSCATION_MONGODB_OBFUSCATE_SQL_VALUES - Datadog Agent のトレース難読化に含めるキーのセットを定義します。設定しない場合は、すべてのキーが難読化されます。

elasticsearch 型のスパン内の ElasticSearch リクエスト本文はデフォルトで難読化されます。

apm_config:
  enabled: true

  ## (...)

  obfuscation:
    elasticsearch:
      ## "elasticsearch" 型のスパンに対する難読化ルールを構成します。デフォルトでは有効になっています。
      enabled: true
      keep_values:
        - client_id
        - product_id
      obfuscate_sql_values:
        - val1

これは環境変数 DD_APM_OBFUSCATION_ELASTICSEARCH_ENABLED=false で無効にすることもできます。

  • keep_values または環境変数 DD_APM_OBFUSCATION_ELASTICSEARCH_KEEP_VALUES - Datadog Agent のトレース難読化から除外するキーのセットを定義します。設定しない場合は、すべてのキーが難読化されます。
  • obfuscate_sql_values または環境変数 DD_APM_OBFUSCATION_ELASTICSEARCH_OBFUSCATE_SQL_VALUES - Datadog Agent のトレース難読化に含めるキーのセットを定義します。設定しない場合は、すべてのキーが難読化されます。

redis 型のスパン内の Redis コマンドはデフォルトで難読化されます。

apm_config:
  enabled: true

  ## (...)

  obfuscation:
    ## "redis" 型のスパンに対する難読化ルールを構成します。デフォルトでは有効になっています。
    redis:
      enabled: true
      remove_all_args: true

これは環境変数 DD_APM_OBFUSCATION_REDIS_ENABLED=false で無効にすることもできます。

  • remove_all_args または環境変数 DD_APM_OBFUSCATION_REDIS_REMOVE_ALL_ARGS - true の場合、redis コマンドのすべての引数を単一の “?” に置き換えます。デフォルトでは無効です。

memcached 型のスパン内の MemCached コマンドはデフォルトで難読化されます。

apm_config:
  enabled: true

  ## (...)

  obfuscation:
    memcached:
      ## "memcached" 型のスパンに対する難読化ルールを構成します。デフォルトでは有効になっています。
      enabled: true

これは環境変数 DD_APM_OBFUSCATION_MEMCACHED_ENABLED=false で無効にすることもできます。

http または web 型のスパン内の HTTP URL はデフォルトでは難読化されません。

注: URL の Userinfo 内のパスワードは Datadog によって収集されません。

apm_config:
  enabled: true

  ## (...)

  obfuscation:
    http:
      ## URL 内のクエリ文字列の難読化を有効にします。デフォルトでは無効になっています。
      remove_query_string: true
      remove_paths_with_digits: true
  • remove_query_string または環境変数 DD_APM_OBFUSCATION_HTTP_REMOVE_QUERY_STRING: true の場合、URL (http.url) 内のクエリ文字列を難読化します。
  • remove_paths_with_digits または環境変数 DD_APM_OBFUSCATION_HTTP_REMOVE_PATHS_WITH_DIGITS: この値が true の場合、URL (http.url) のパスセグメントで数字のみを含むものは “?” に置き換えられます。

デフォルトでは無効になっています。

remove_stack_traces パラメーターを true に設定すると、スタックトレースが削除され、? で置換されます。

apm_config:
  enabled: true

  ## (...)

  obfuscation:
    ## スタックトレースを削除し、"?" に置き換えることを有効にします。デフォルトでは無効になっています。
    remove_stack_traces: true # default false

This can also be enabled with the environment variable DD_APM_OBFUSCATION_REMOVE_STACK_TRACES=true.

タグの置換

スパンのタグから機密データをスクラブするには、datadog.yaml コンフィギュレーションファイルreplace_tags 設定、または DD_APM_REPLACE_TAGS 環境変数を使用します。設定または環境変数の値は、タグ内で機密データの置換方法を指定するパラメーターグループの一覧です。パラメーターは以下のとおりです。

  • name: 置換するタグのキー。すべてのタグを照合するには、* を使用します。リソースを照合するには、resource.name を使用します。
  • pattern: 照合対象の正規表現パターン。
  • repl: 置換文字列。

例:

apm_config:
  replace_tags:
    # タグ "http.url" 内で、文字列 `token/` で始まるすべての文字を "?" で置換します
    - name: "http.url"
      pattern: "token/(.*)"
      repl: "?"
    # リソース名の末尾の "/" 文字を削除します
    - name: "resource.name"
      pattern: "(.*)\/$"
      repl: "$1"
    # 任意のタグに存在する "foo" のすべての出現を "bar" に置換します
    - name: "*"
      pattern: "foo"
      repl: "bar"
    # すべての "error.stack" タグの値を削除します
    - name: "error.stack"
      pattern: "(?s).*"
    # エラーメッセージ内の数字の連続を置換します
    - name: "error.msg"
      pattern: "[0-9]{10}"
      repl: "[REDACTED]"
DD_APM_REPLACE_TAGS=[
      {
        "name": "http.url",
        "pattern": "token/(.*)",
        "repl": "?"
      },
      {
        "name": "resource.name",
        "pattern": "(.*)\/$",
        "repl": "$1"
      },
      {
        "name": "*",
        "pattern": "foo",
        "repl": "bar"
      },
      {
        "name": "error.stack",
        "pattern": "(?s).*"
      },
      {
        "name": "error.msg",
        "pattern": "[0-9]{10}",
        "repl": "[REDACTED]"
      }
]

Set the DD_APM_REPLACE_TAGS environment variable:

  • For Datadog Operator, in override.nodeAgent.env in your datadog-agent.yaml
  • For Helm, in agents.containers.traceAgent.env in your datadog-values.yaml
  • For manual configuration, in the trace-agent container section of your manifest
- name: DD_APM_REPLACE_TAGS
  value: '[
            {
              "name": "http.url",
              "pattern": "token/(.*)",
              "repl": "?"
            },
            {
              "name": "resource.name",
              "pattern": "(.*)\/$",
              "repl": "$1"
            },
            {
              "name": "*",
              "pattern": "foo",
              "repl": "bar"
            },
            {
              "name": "error.stack",
              "pattern": "(?s).*"
            },
            {
              "name": "error.msg",
              "pattern": "[0-9]{10}",
              "repl": "[REDACTED]"
            }
          ]'

Datadog Operator:

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  override:
    nodeAgent:
      env:
        - name: DD_APM_REPLACE_TAGS
          value: '[
                   {
                     "name": "http.url",
                  # (...)
                  ]'

Helm:

agents:
  containers:
    traceAgent:
      env:
        - name: DD_APM_REPLACE_TAGS
          value: '[
                   {
                     "name": "http.url",
                  # (...)
                  ]'
- DD_APM_REPLACE_TAGS=[{"name":"http.url","pattern":"token/(.*)","repl":"?"},{"name":"resource.name","pattern":"(.*)\/$","repl":"$1"},{"name":"*","pattern":"foo","repl":"bar"},{"name":"error.stack","pattern":"(?s).*"},{"name":"error.msg","pattern":"[0-9]{10}","repl":"[REDACTED]"}]

リソースを無視

特定のリソースをトレースしないオプションに関する詳しい概要については、不要なリソースを無視するをご参照ください。

サービスに、ヘルスチェックなどシミュレーショントラフィックが含まれる場合、このようなトレースの収集を除外して、サービスのメトリクスが本番トラフィックと一致するようにすることが望ましい場合があります。

そこで、Agent により Datadog に送信されるトレースから、特定のリソースを除外するように Agent を設定できます。特定のリソースが送信されないようにするには、datadog.yaml ファイルの ignore_resources 設定を使用します。そして、1 つ以上の正規表現のリストを作成し、リソース名に基づき Agent で除外するリソースを指定します。

コンテナ化された環境で実行している場合は、代わりに Datadog Agent を使用してコンテナに DD_APM_IGNORE_RESOURCES を設定します。詳細については、Docker APM Agent 環境変数をご参照ください。

###### @param ignore_resources - 文字列のリスト - オプション
###### リソース名に基づいて特定のトレースを除外するために、正規表現のリストを指定できます。
###### すべてのエントリは二重引用符で囲み、カンマで区切る必要があります。
###### ignore_resources: ["(GET|POST) /healthcheck","API::NotesController#index"]

ライブラリ

HTTP

Datadog は、トレーシングライブラリ全体でスパンタグのセマンティクスを標準化しています。HTTP リクエストからの情報は http. をプレフィックスとするスパンタグとして追加されます。ライブラリには、HTTP スパンで収集される機密データを制御するための以下の構成オプションがあります。

クエリ文字列の編集

http.url タグには、クエリ文字列を含む完全な URL 値が割り当てられます。クエリ文字列は機密データを含む可能性があるため、デフォルトで Datadog はこれをパースし、疑わしい値を削除します。この編集プロセスは構成可能です。編集に使われる正規表現を変更するには、DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP 環境変数に有効な正規表現を設定します。有効な正規表現はプラットフォームに依存します。この正規表現は疑わしいキーと値のペアを見つけると、それを <redacted> に置き換えます。

クエリ文字列を収集したくない場合は、環境変数 DD_HTTP_SERVER_TAG_QUERY_STRINGfalse に設定します。デフォルトは true です。

ヘッダーの収集

To collect trace header tags, set the DD_TRACE_HEADER_TAGS environment variable with a map of case-insensitive header keys to tag names. The library applies matching header values as tags on root spans. The setting also accepts entries without a specified tag name, for example:

DD_TRACE_HEADER_TAGS=CASE-insensitive-Header:my-tag-name,User-ID:userId,My-Header-And-Tag-Name

処理

Some tracing libraries provide an interface for processing spans to manually modify or remove sensitive data collected in traces:

テレメトリーの収集

Datadog は、お客様のトレーシングライブラリに関する環境情報や診断情報を収集して処理することがあります。これには、アプリケーションを実行しているホスト、オペレーティングシステム、プログラミング言語とランタイム、使用する APM インテグレーション、およびアプリケーションの依存関係に関する情報が含まれる場合があります。さらに、Datadog は、診断ログ、難読化されたスタックトレースを含むクラッシュダンプ、および様々なシステムパフォーマンスメトリクスなどの情報を収集する場合があります。

これらの設定のいずれかを使用して、このテレメトリー収集を無効にできます。

apm_config:
  telemetry:
    enabled: false
export DD_INSTRUMENTATION_TELEMETRY_ENABLED=false

APM における PCI DSS 準拠

PCI compliance for APM is only available for Datadog organizations in the US1 site.

To set up a PCI-compliant Datadog org, follow these steps:

To set up PCI compliant Application Performance Monitoring, you must meet the following requirements:

  • Audit Trail must be enabled and remain enabled for PCI DSS compliance. If you haven’t already enabled Audit Trail, it is automatically enabled once the org is configured as PCI-compliant (after following the steps below).
  • Your Datadog organization is in the US1 site.
  • All spans sent to the PCI endpoints using HTTPS only. If you are using the Agent to send spans, you should enforce HTTPS transport.
  • All your spans endpoints need to be changed to the PCI endpoints for spans.
  • You may request access to the PCI Attestation of Compliance and Customer Responsibility Matrix on Datadog’s Trust Center - note that these documents are only applicable once you have finished all the onboarding steps and have been manually configured to be compliant by Datadog support.

To begin onboarding:

  1. Contact Datadog support or your Customer Success Manager to request to being the PCI onboarding process while ensuring the necessary PCI requirements are met.
  2. After Datadog support or Customer Success confirms that the org is PCI DSS compliant, configure the respective configuration file to send spans to the dedicated PCI compliant endpoint:
  • https://trace-pci.agent.datadoghq.com for Agent and non-Agent traffic
  1. For example, add the following lines to the Agent configuration file:
apm_config:
  apm_dd_url: <https://trace-pci.agent.datadoghq.com>
  1. All spans that are sent to the PCI compliant endpoint(s) automatically have a set of Sensitive Data Scanner PCI rules that are applied to scrub any cardholder data. These dedicated PCI rules must be enalbed for PCI DSS compliance and are included with no additional charge.

To finish onboarding and be moved to compliant:

  1. Inform your Datadog support or your Customer Success Manager that you have moved over all your endpoints to the PCI compliant endpoint(s).
  2. Once confirmed by Datadog, your span configuration and Application Performance Monitoring is considered PCI-compliant.

If you have any questions about how your now PCI-compliant Application Performance Monitoring satisfies the applicable requirements under PCI DSS, contact your account manager. See information on setting up PCI-compliant Log Management.

See PCI DSS Compliance for more information. To enable PCI compliance for logs, see PCI DSS compliance for Log Management.

APM の PCI 準拠は、 サイトではご利用いただけません。

その他の参考資料

お役に立つドキュメント、リンクや記事:

PREVIEWING: safchain/fix-custom-agent