Datadog のログを収集する
概要
このパーサーは、Datadog ログからフィールドを抽出し、いくつかのミューテーションと Grok マッチングを実行してデータを構造化し、抽出されたフィールドを UDM にマッピングします。Key-Value ペアや JSON オブジェクトなど、message フィールド内のさまざまなログ形式を処理し、特定のフィールドを UDM 準拠のラベルと追加フィールドに変換します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス。
- Google Cloud IAM への特権アクセス。
- Cloud Storage への特権アクセス。
- Datadog への logs_write_archiveユーザー アクセス。
オプション 1: Cloud Storage 構成による Datadog ログの共有
Google Cloud Platform との Datadog のインテグレーションを構成する
- Datadog と Google Cloud Platform の統合を設定します。詳細については、Datadog Google Cloud 統合の設定をご覧ください。
Google Cloud Storage バケットの作成
- Google Cloud コンソールにログインします。
- [Cloud Storage バケット] のページに移動します。 
- [作成] をクリックします。 
- [バケットの作成] ページでユーザーのバケット情報を入力します。以下のステップでは、操作を完了した後に [続行] をクリックして、次のステップに進みます。 - [始める] セクションで、次の操作を行います。 - バケット名の要件を満たす一意の名前を入力します(例: datadog-data)。
- 階層名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] セクションを開き、[このバケットで階層的な名前空間を有効にする] を選択します。 
- バケットラベルを追加するには、展開矢印をクリックして [ラベル] セクションを開きます。 
- [ラベルを追加] をクリックし、ラベルのキーと値を指定します。 
 
- [データの保存場所の選択] セクションで、次の操作を行います。 - ロケーション タイプを選択してください。
- ロケーション タイプのプルダウン メニューを使用して、バケット内のオブジェクト データが永続的に保存されるロケーションを選択します。- ロケーション タイプとしてデュアルリージョンを選択した場合は、関連するチェックボックスを使用してターボ レプリケーションを有効にすることもできます。
 
- クロスバケット レプリケーションを設定するには、[クロスバケット レプリケーションを設定する] セクションを開きます。
 
- [データのストレージ クラスを選択する] セクションで、バケットのデフォルトのストレージ クラスを選択します。あるいは、Autoclass を選択して、バケットデータのストレージ クラスを自動的に管理します。 
- [オブジェクトへのアクセスを制御する方法を選択する] セクションで、[なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトの [アクセス制御モデル] を選択します。 
- [オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。 - [データ保護] で、バケットに設定するオプションを選択します。
- オブジェクト データの暗号化方法を選択するには、[データ暗号化] というラベルの付いた展開矢印をクリックし、データの暗号化方法を選択します。
 
 
- [作成] をクリックします。 
Google Cloud サービス アカウントを作成する
- [IAM と管理] > [サービス アカウント] に移動します。
- 新しいサービス アカウントを作成します。
- わかりやすい名前を付けます(datadog-user など)。
- 前の手順で作成した Cloud Storage バケットに対する ストレージ オブジェクト管理者のロールをサービス アカウントに付与します。
- サービス アカウントの SSH キーを作成します。
- サービス アカウント用の JSON キーファイルをダウンロードします。このファイルは安全に保管してください。
Cloud Storage にログを送信するように Datadog を構成する
- 特権アカウントを使用して Datadog にログインします。
- [Logs] > [Log Forwarding] に移動します。
- [+ Create New Archive] をクリックします。
- [Google Cloud Storage] を選択します。
- 必要なパラメータを入力し、[Save] をクリックします。
オプション 2: Webhook 構成による Datadog ログの共有
フィードを設定する
フィードを構成する手順は次のとおりです。
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [Feed name] フィールドに、フィードの名前を入力します(例: Datadog Logs)。
- [Source type] として [Webhook] を選択します。
- [ログタイプ] として [Datadog] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- Split delimiter: ログ行を区切るために使用される区切り文字(\nなど)。
 
- Split delimiter: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[Submit] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- 秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、その場合以前の秘密鍵は無効になります。
- [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。 このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。
- [完了] をクリックします。
Webhook フィード用の API キーを作成する
- Google Cloud コンソール > [認証情報] に移動します。 
- [認証情報を作成] をクリックして [API キー] を選択します。 
- API キーのアクセスを Chronicle API に制限します。 
エンドポイント URL を指定する
- クライアント アプリケーション内で、Webhook フィードで提供される HTTPS エンドポイント URL を指定します。
- 次の形式でカスタム ヘッダーの一部として API キーと秘密鍵を指定して、認証を有効にします。 - X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET- 推奨事項: API キーは URL 内で指定するのではなくヘッダーとして指定してください。 
- Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーと秘密鍵を指定できます。 - ENDPOINT_URL?key=API_KEY&secret=SECRET- 以下を置き換えます。 - ENDPOINT_URL: フィード エンドポイントの URL。
- API_KEY: Google SecOps に対する認証に使用する API キー。
- SECRET: フィードの認証用に生成した秘密鍵。
 
Webhook にログを送信するように Datadog を構成する
- 特権アカウントを使用して Datadog にログインします。
- [Logs] > [Log Forwarding] に移動します。
- [Custom Destinations] を選択します。
- [+ Create a New Destination] をクリックします。
- 次の入力パラメータの値を指定します。
- 宛先の種類を選択: [HTTP] を選択します。
- 宛先に名前を付ける: Webhook のわかりやすい名前を指定します(例: Google SecOps Webhook)。
- 宛先を構成する: ENDPOINT_URL の後に API_KEY と SECRET を入力します。
- 認証設定を構成する: 次のような一般的なヘッダーを追加します。これにより、HTTP リクエストが不正な形式にならず、Datadog が Webhook の作成を完了できます。- ヘッダー名: Accept
- ヘッダー値: application/json
 
- ヘッダー名: 
- [Save] をクリックします。
 
参照リンク
UDM マッピング テーブル
| ログフィールド | UDM マッピング | 論理 | 
|---|---|---|
| _id | read_only_udm.metadata.product_log_id | _idフィールドから直接マッピングされます。 | 
| alert | read_only_udm.security_result.about.resource.attribute.labels | alertフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| attributes.@timestamp | read_only_udm.metadata.event_timestamp | イベントのタイムスタンプは attributes.@timestampフィールドから抽出され、秒とナノ秒に変換されます。 | 
| attributes.@version | read_only_udm.metadata.product_version | attributes.@versionフィールドから直接マッピングされます。 | 
| attributes.level_value | read_only_udm.security_result.about.resource.attribute.labels | attributes.level_valueフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| attributes.logger_name | read_only_udm.principal.application | attributes.logger_nameフィールドから直接マッピングされます。 | 
| attributes._trace.baggage._sli_service | read_only_udm.additional.fields | attributes._trace.baggage._sli_serviceフィールドから直接マッピングされ、追加フィールドとして追加されます。 | 
| attributes._trace.baggage.device_id | read_only_udm.principal.asset.asset_id | attributes._trace.baggage.device_idフィールドから直接マッピングされ、「Device Id:」という接頭辞が付いています。 | 
| attributes._trace.origin.operation | read_only_udm.metadata.product_event_type | attributes._trace.origin.operationフィールドから直接マッピングされます。 | 
| caller | read_only_udm.security_result.about.resource.attribute.labels | callerフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| component | read_only_udm.security_result.about.resource.attribute.labels | componentフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| context.AlertName | read_only_udm.security_result.threat_name | context.AlertNameフィールドから直接マッピングされます。 | 
| context.BusArch | read_only_udm.security_result.about.resource.attribute.labels | context.BusArchフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| context.CANDBVersion | read_only_udm.security_result.about.resource.attribute.labels | context.CANDBVersionフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| context.esn | read_only_udm.security_result.about.resource.attribute.labels | context.esnフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| context.ftcpVersion | read_only_udm.security_result.about.resource.attribute.labels | context.ftcpVersionフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| context.ingestMessageId | read_only_udm.security_result.about.resource.attribute.labels | context.ingestMessageIdフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| context.redactedVin | read_only_udm.security_result.about.resource.attribute.labels | context.redactedVinフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| context.vehicleId | read_only_udm.security_result.about.resource.attribute.labels | context.vehicleIdフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| date | read_only_udm.metadata.collected_timestamp | 収集されたタイムスタンプは dateフィールド(パーサーでdate1に名前変更)から抽出され、秒とナノ秒に変換されます。 | 
| host | read_only_udm.principal.hostname | hostフィールドから直接マッピングされます。 | 
| message | read_only_udm.security_result.about.resource.attribute.labels | message フィールドが解析され、その一部が summary フィールドと json_data フィールドの入力に使用されます。残りの部分は Key-Value ペアとして処理され、security_result オブジェクト内のラベルとして追加されます。 | 
| msg | read_only_udm.security_result.about.resource.attribute.labels | msgフィールドから抽出され、security_resultオブジェクト内のラベルとして追加されます。 | 
| service | read_only_udm.metadata.product_name | serviceフィールドから直接マッピングされます。 | 
| status | read_only_udm.security_result.severity | 重大度は statusフィールドに基づいて決定されます。「INFO」、「DEBUG」、「debug」、「info」は「LOW」にマッピングされ、「WARN」は「MEDIUM」にマッピングされます。その他の値は、提供されたコード スニペットでは明示的にマッピングされていません。 | 
| tags | read_only_udm.additional.fields | tags配列の各タグは Key-Value ペアに解析され、追加のフィールドとして追加されます。 | 
| なし | read_only_udm.metadata.event_type | hostフィールドが存在する場合は「STATUS_UPDATE」に設定し、それ以外の場合は「GENERIC_EVENT」に設定します。 | 
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。