このページでは、Datadog に送信されるデータのセキュリティについて説明します。クラウドおよびアプリケーションのセキュリティ製品や機能をお探しの場合は、Securityセクションをご覧ください。

Datadog サービスへのデータ送信は、ローカルにインストールされた Agent を使用するか、HTTP API を通じて行うことができます。Datadog の使用に Datadog Agent が必須というわけではありませんが、大多数のお客様が Agent を活用しています。この記事では、ご利用の環境を安全に保つために利用可能な主なセキュリティ機能と特徴について説明します。

Agent の分布

Agent の公式リポジトリおよびバイナリパッケージには署名が施されています。以下の公開鍵のいずれかと照合して、分布チャネルを確認してください。

Debian および Ubuntu では、datadog-agent パッケージは datadog-signing-keys パッケージとソフト依存関係にあり、これにより上記のキーが APT によって信頼されます。パッケージを更新し続けることで、最新の署名キーがシステムに確実に存在するようにします。

Windows MSI

Windows で Datadog Agent インストーラーファイルの署名を検証するには、Get-AuthenticodeSignature の出力をFormatList (fl) にパイプし、以下を確認します。

  • ステータスが有効であること
  • 証明書が Datadog, Inc によって署名されていること
  • 発行者が DigiCert であること

たとえば、ddagent-cli-7.49.1.msi という名前の .msi ファイルを検証するには、次のようにします。

Get-AuthenticodeSignature ddagent-cli-7.49.1.msi | fl

コマンドの出力が A certificate chain could not be built to a trusted root authority である場合、マシンで DigiCert ルート CA の更新が必要な可能性があります。

情報セキュリティ

Datadog Agent は、デフォルトで TLS 暗号化された TCP コネクションを介して Datadog にデータを送信します。バージョン 6 以降、Agent は Datadog への接続時に最小 TLS バージョンを強制するように構成できます。PCI 要件を満たすためなどに強力な暗号化の使用が必要な場合は、Agent v6/7 を使用し、Agent の構成ファイルで min_tls_version: 'tlsv1.2' 設定、または Agent 6.39.0/7.39.0 未満の場合は force_tls_12: true を設定します。

ネットワークとプロキシ

Datadog は SaaS 製品であるため、監視データを送信するには、ネットワークからパブリックインターネットへのアウトバウンドコネクションを確立する必要があります。トラフィックは、デフォルトで常に Agent から Datadog への TLS 暗号化 TCP コネクションによって開始されます。Datadog から Agent へのセッションが開始されることはありません。必要な Datadog ドメインとポートをリストに追加するためのファイアウォールの設定に関する詳細については、Agent のネットワークページを参照してください。さらに、パブリックインターネットへの直接接続がないホストや、アウトバウンドトラフィックが制限されているホストを監視する場合は、プロキシから監視データを送信することを検討してください。

Agent ログの難読化

Datadog Agent は、必要に応じて Agent のトラブルシューティングをサポートするためにローカルログを生成します。安全上の予防措置として、これらのローカルログは、認証情報 (API キー、パスワード、トークンのキーワードなど) を示す可能性のある特定のキーワードやパターンについてフィルタリングされ、ディスクに書き込まれる前に難読化されます。

ローカル HTTPS サーバー

Agent v6/7 は、実行中の Agent と Agent ツール (datadog-agent コマンドなど) 間の通信を容易にするために、ローカル HTTPS API を公開しています。API サーバーにはローカルネットワークインターフェース (localhost/127.0.0.1) からのみアクセスでき、認証は Agent を実行しているユーザーのみが読み取り可能なトークンを通じて強制されます。ローカル HTTPS API への通信は、localhost での盗聴を防ぐために転送時に暗号化されます。

Agent GUI

Agent v6/7 にはデフォルトでグラフィカルユーザーインターフェース (GUI) がバンドルされており、デフォルトの Web ブラウザで起動します。GUI は、Agent の構成ファイルを開く機能を含め、正しいユーザー権限を持つユーザーが起動した場合にのみ起動します。GUI は、ローカルネットワークインターフェース (localhost/127.0.0.1) からのみアクセス可能です。最後に、GUI サーバーとのすべての通信の認証や、クロスサイトリクエストフォージェリ (CSRF) 攻撃からの保護に使用されるトークンを GUI が生成および保存するため、ユーザーの Cookie を有効にする必要があります。必要に応じて、GUI を完全に無効にすることも可能です。

Agent のセキュリティスキャン

Datadog の Vulnerability Management プログラムには、コアとなるサポートサービスのアクティブスキャンを含め、サポートインフラストラクチャーおよびアプリケーションコンポーネントの定期的な評価が含まれています。Datadog Security チームは、構成やソフトウェアの脆弱性を特定するために定期的にスキャンを実施し、Datadog の Vulnerability Management ポリシーに従って検出結果の修正を追跡します。

特に Container Agent に関しては、Datadog は一般提供 (GA) リリースとリリース候補 (RC) リリースの両方に対して、定期的に脆弱性の静的解析を実施しています。Datadog Container Agent は Docker Agent で言及されているパブリックレジストリで見つけることができ、さらに Datadog Agent のソースコードはオープンソースです。これにより、お客様は独自のニーズを満たすペースで、好みのツールを使用して脆弱性スキャンを実行できるようになります。これは、Datadog Agent の潜在的な脆弱性を監視したいお客様に必要な可視性を提供します。

Datadog のセキュリティに関するバグを発見したと思われる場合は、問題を報告を参照してください。 特定の CVE のステータスをチェックするには、Public Artifact Vulnerabilities ページをご覧ください。詳細については、通常のサポートプロセスを通じて Datadog サポートにお問い合わせください。Datadog のウェブサイトからサポートチケットを送信する際は、Product type フィールドを Vulnerability Inquiry on Datadog Product に設定してください。

非特権ユーザーとしての実行

デフォルトでは、Agent は Linux 上では dd-agent ユーザーとして、Windows 上では ddagentuser アカウントとして実行されます。例外は以下のとおりです。

  • system-probe は、Linux 上では root として、Windows 上では LOCAL_SYSTEM として実行されます。
  • process-agent は、Windows 上では LOCAL_SYSTEM として実行されます。
  • security-agent は、Linux 上では root として実行されます。

シークレット管理

Agent の構成ファイルにシークレットをプレーンテキストで保存することを避けたい場合は、シークレット管理パッケージを活用できます。このパッケージを使用すると、Agent はユーザーが提供した実行可能ファイルを呼び出してシークレットの取得や復号を処理し、その後 Agent がメモリ内に読み込むことができます。実行可能ファイルは、お好みの鍵管理サービス、認証方法、継続的インテグレーションワークフローに合わせて設計できます。

詳細については、シークレット管理のドキュメントをご覧ください。

テレメトリ収集

政府機関以外のサイト上の Agent は、Datadog Agent に関する環境情報、パフォーマンス情報、機能の使用状況情報を収集します。Agent が政府機関のサイトを検出した場合、または Datadog Agent FIPS Proxy が使用されている場合、Agent はこのテレメトリ収集を自動的に無効にします。そのような検出が不可能な場合 (プロキシが使用されている場合など)、Agent のテレメトリは送信されますが、Datadog のインテークで直ちに破棄されます。

このデータが最初に送信されることを防ぐため、以下の例に示すように、Agent 構成ファイルの agent_telemetry 設定を更新して Agent のテレメトリを明示的に無効にすることを Datadog は推奨しています。

agent_telemetry:
  enabled: false
DD_AGENT_TELEMETRY_ENABLED=false

Datadog は、Datadog Agent に関する環境情報、パフォーマンス情報、および機能の使用状況情報を収集する場合があります。これには、Datadog Agent のサポートおよびさらなる改善を目的とした、難読化されたスタックトレースを含む Datadog Agent の診断ログやクラッシュダンプが含まれる場合があります。

以下の例に示すように、Agent 構成ファイルで agent_telemetry 設定を更新することで、このテレメトリ収集を無効にできます。

agent_telemetry:
  enabled: false
DD_AGENT_TELEMETRY_ENABLED=false

テレメトリコンテンツ:

最新のテレメトリコンテンツを表示するには、次のコマンドを実行します。

agent diagnose show-metadata agent-telemetry
メタデータ (ソース)
マシン ID
マシン名
OS
OS バージョン
Agent バージョン
メトリクス (ソース)説明
チェック
checks.execution_timeチェックの実行時間 (ミリ秒)
pymem.inusePython インタープリターによって割り当てられたバイト数
ログとメトリクス
dogstatsd.udp_packets_bytesDogStatsD UDP パケットのバイト数
dogstatsd.uds_packets_bytesDogStatsD UDS パケットのバイト数
dogstatsd_client.bytes_sentDogStatsD クライアントによって送信された合計バイト数
dogstatsd_client.bytes_droppedDogStatsD クライアントによって破棄された合計バイト数
dogstatsd_client.bytes_dropped_queueDogStatsD クライアントの送信キューがいっぱいであるために破棄された合計バイト数
dogstatsd_client.bytes_dropped_writerDogStatsD クライアントライターが送信できないために破棄された合計バイト数
logs.auto_multi_line_aggregator_flushAgent によって集約された複数行ログの数
logs.auto_multi_line_default_total_lines自動複数行検出のデフォルトに依存するソースに対して、検出アグリゲーターによって処理されたログ行の合計数
logs.auto_multi_line_default_would_combine自動複数行検出がデフォルトで有効になっていた場合に結合される行数
logs.auto_multi_line_default_would_truncate自動複数行検出がデフォルトで有効になっていた場合に切り捨てられるグループ内の行数
logs.bytes_missedAgent が消費する前に失われたバイトの合計数 (例: ログローテーション後など)
logs.bytes_sentエンコード前に送信されたバイトの合計数 (該当する場合)
logs.decodedデコードされたログの合計数
logs.dropped破棄されたログの合計数
logs.encoded_bytes_sentエンコード後に送信された合計バイト数 (該当する場合)
logs.http_connectivity_checkHTTP 接続チェックの回数、ステータスでタグ付け (成功または失敗)
logs.http_connectivity_failureHTTP 接続チェックの失敗回数、根本原因でタグ付け (dns、tls、timeout、connection、http_status、other)
logs.http_connectivity_retry_attemptHTTP 接続の再試行回数、ステータスでタグ付け (成功または失敗)
logs.restart_attemptAgent の再起動試行回数、ステータスおよびターゲットトランスポートでタグ付け
logs.sender_latencyHTTP 送信者のレイテンシー (ミリ秒)
logs.truncatedAgent によって切り捨てられたログの合計数
logs_destination.destination_workersログ送信先ごとのアクティブな HTTP コネクションの最大数
point.dropped破棄されたメトリクスの合計数
point.sent送信されたメトリクスの合計数
transactions.input_count受信トランザクション数
transactions.input_bytes受信トランザクションのペイロードサイズ (バイト単位)
transactions.success成功したトランザクション数
transactions.success_bytes成功したトランザクションのペイロードサイズ (バイト単位)
transactions.requeuedトランザクションの再キュー数
transactions.retriesトランザクションの再試行数
データベース
oracle.activity_samples_countクエリアクティビティの測定で取得した行数 (収集されたアクティビティサンプル数)
oracle.activity_latencyクエリアクティビティの取得時間 (ミリ秒単位)
oracle.statement_metricsデータベースメトリクスの取得時間 (ミリ秒単位)
oracle.statement_plan_errors実行計画の取得におけるエラー数
postgres.collect_activity_snapshot_msアクティビティスナップショットの取得時間 (ミリ秒単位)
postgres.collect_relations_autodiscovery_msAutodiscovery リレーションの収集時間 (ミリ秒単位)
postgres.collect_statement_samples_msステートメントサンプルの取得時間 (ミリ秒単位)
postgres.collect_statement_samples_countステートメントサンプル収集のために取得した合計行数
postgres.collect_stat_autodiscovery_msAutodiscovery 統計の収集時間 (ミリ秒単位)
postgres.get_new_pg_stat_activity_mspg_stat_activity の取得時間 (ミリ秒単位)
postgres.get_new_pg_stat_activity_count収集するために取得された合計行数 pg_stat_activity
postgres.get_active_connections_msアクティブな接続の取得時間 (ミリ秒単位)
postgres.get_active_connections_countアクティブな接続を取得するために取得した合計行数
postgres.schema_tables_elapsed_msPostgres スキーマ内のテーブル収集時間
postgres.schema_tables_countPostgres スキーマ内のテーブル総数
API
api_server.request_duration_secondsCLI コマンド実行パフォーマンス (実行された場合)
イベント
agent_bsodAgent 関連のブルースクリーン (BSOD) データであり、BugCheck コード、関連する 4 つの引数、およびシンボル化されていないクラッシュ時のコールスタックを含む
Service Discovery
service_discovery.discovered_servicesAgent の Service Discovery 機能によって検出されたサービス数
Autodiscovery
autodiscovery.discovery_queue_depth現在、Agent の integration discovery キューにあるサービス数
autodiscovery.discovery_results結果 (成功または失敗) 別にタグ付けされた、Agent の integration discovery 試行回数
GPU Monitoring
gpu.device_totalシステム内の GPU 総数
APM
trace.enabledtrace-agent プロセスが実行中かどうか。
trace.workingtrace-agent プロセスがトレースを受信および送信しているかどうか。
Synthetic Monitoring
synthetics_agent.checks_received受信したテストの数
synthetics_agent.checks_processed実行されたテストの数
synthetics_agent.error_test_configテスト構成エラーの数
synthetics_agent.traceroute_errortraceroute エラーの数
synthetics_agent.evp_send_result_failure結果送信時のエラー数
Cluster Agent
admission_webhooks.mutation_attemptsAdmission Webhook のミューテーション試行回数
admission_webhooks.library_injection_attemptsライブラリインジェクションの試行回数
admission_webhooks.library_injection_errorsライブラリインジェクションのエラー数
admission_webhooks.patcher_errorsAdmission Webhook patcher のエラー数
admission_webhooks.rc_provider_configsリモート構成プロバイダー設定の数
admission_webhooks.rc_provider_configs_invalid無効なリモート構成プロバイダー設定の数
admission_webhooks.image_resolution_attemptsイメージ解決の試行回数
autodiscovery.errorsAutodiscovery エラーの数
autodiscovery.watched_resourcesAutodiscovery で監視されているリソースの数
cluster_checks.configs_dispatchedディスパッチされたクラスターチェック構成の数
cluster_checks.configs_danglingダングリング状態のクラスターチェック構成の数
cluster_checks.configs_infoディスパッチされたクラスターチェックの名前
cluster_checks.unscheduled_checkスケジュールされていないクラスターチェックの数
instrumentation_controller.resourcesコントローラーによって追跡されている DatadogInstrumentation リソースの数
instrumentation_controller.reconciliationsセクションとステータスでタグ付けされた、DatadogInstrumentation セクションの調整試行回数
language_detection_patcher.patchesLanguage Detection Patcher による patches の数
tagger.stored_entitiesTagger に保存されているエンティティの数
workloadmeta.stored_entitiesWorkloadMeta に保存されているエンティティの数
workloadmeta.pull_errorsWorkloadMeta のプルエラー数
appsec_injector.watched_changesAppSec injector が監視対象リソースに対して検出した変更の数
appsec_injector.sidecar_mutationsAppSec injector の sidecar admission の結果 (ポッドの変更および削除) の数
agent_performance.containers_restartsCluster Agent および Cluster Checks Runner ポッドのコンテナの再起動回数
agent_performance.containers_terminated理由別にタグ付けされた、Cluster Agent および Cluster Checks Runner ポッドのコンテナの終了回数
agent_performance.memory_usageCluster Agent および Cluster Checks Runner ポッドのコンテナのランタイムメモリ使用量の合計 (バイト単位)
agent_performance.memory_limitCluster Agent および Cluster Checks Runner ポッドのコンテナのランタイムメモリ制限の合計 (バイト単位)
agent_performance.cpu_usageCluster Agent および Cluster Checks Runner ポッドのコンテナのランタイム CPU 使用量の合計 (CPU コア単位)
eBPF
ebpf.core_load_successeBPF CO-RE プログラムの読み込み成功回数
ebpf.core_load_erroreBPF CO-RE プログラムの読み込みエラー回数
ebpf.core_remoteconfig_successリモート構成から BTF (BPF Type Format) データを正常にダウンロードした回数
ebpf.core_remoteconfig_errorリモート構成からの BTF データのダウンロード中に発生したエラーの数

該当するメトリクスのみが送信されます。たとえば、DBM が有効になっていない場合、データベース関連のメトリクスは一切送信されません。

参考資料