Elastic Defend のログを収集する
このドキュメントでは、Cloud Run 関数で Google Cloud Storage V2 を使用して Elastic Defend ログを Google Security Operations に取り込む方法について説明します。
Elastic Defend は、Elastic Security 内のエンドポイント検出対応(EDR)ソリューションです。Windows、macOS、Linux オペレーティング システム全体にわたる詳細な可視性により、防御、検出、対応の機能を提供します。プロセスの実行、ファイル アクティビティ、ネットワーク接続、レジストリの変更、ライブラリの読み込みを監視し、エンドポイント レベルで脅威を検出して防止します。データは Elasticsearch に保存され、Elasticsearch Search API を使用して取得できます。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- 次の API が有効になっている Google Cloud プロジェクト。
- Cloud Storage
- Cloud Run functions
- Cloud Scheduler
- Pub/Sub
- IAM
- Elastic Defend がデプロイされている Elasticsearch クラスタへのアクセス権
- Elasticsearch で API キーを作成する権限(
manage_security、manage_api_key、またはmanage_own_api_keyクラスタ権限) - Cloud Run functions から Elasticsearch クラスタへのネットワーク接続
Google Cloud Storage バケットを作成する
- Google Cloud コンソールに移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前( elastic-defend-logsなど)を入力します。ロケーション タイプ ニーズに基づいて選択します(リージョン、デュアルリージョン、マルチリージョン)。 ロケーション ロケーションを選択します(例: us-central1)。ストレージ クラス Standard(アクセス頻度の高いログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
Elastic Defend の認証情報を収集する
Cloud Run 関数が Elastic Defend イベントを取得できるようにするには、logs-endpoint データ ストリームに対する読み取り権限を持つ API キーを作成する必要があります。
Kibana を使用して API キーを作成する
- Kibana にログインします。
- ナビゲーション メニューまたはグローバル検索フィールドで、[Stack Management] > [API Keys] に移動します。
- [API キーを作成] をクリックします。
- [名前] フィールドに「
Google SecOps Cloud Storage Integration」と入力します。 - [有効期限] フィールドで、必要に応じて有効期限を設定します。デフォルトでは、API キーに有効期限はありません。
- [セキュリティ権限を制御する] をクリックします。
- [インデックス] セクションで、[インデックス権限を追加] をクリックします。
- インデックス権限を構成します。
- インデックス: 「
logs-endpoint.*」と入力します。 - 権限: 読み取りを選択
- インデックス: 「
- [クラスタ権限] セクションは空白のままにします(クラスタ権限は必要ありません)。
- [API キーを作成] をクリックします。
API 認証情報を記録する
API キーを作成すると、認証情報がダイアログに表示されます。
Encoded: Base64 でエンコードされた API キー(例:
VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==)Elasticsearch エンドポイント URL も記録する必要があります。
Elastic Cloud の場合: エンドポイントは、Cloud Console のデプロイの Elasticsearch セクション(
https://my-deployment.es.us-central1.gcp.cloud.es.io:443など)に表示されます。セルフマネージド Elasticsearch の場合: Elasticsearch クラスタのホスト名または IP アドレスとポート(
https://elasticsearch.example.com:9200など)を使用します。
デベロッパー ツールを使用して API キーを作成する(別の方法)
また、Kibana Dev Tools を使用して API キーを作成することもできます。
- Kibana にログインします。
- [管理] > [開発ツール] に移動します。
コンソールで、次のコマンドを実行します。
POST /_security/api_key { "name": "Google SecOps Cloud Storage Integration", "role_descriptors": { "chronicle_reader": { "indices": [ { "names": ["logs-endpoint.*"], "privileges": ["read"] } ] } }, "metadata": { "application": "google-chronicle-gcs", "environment": "production" } }レスポンスには API キー認証情報が含まれます。
{ "id": "VuaCfGcBCdbkQm-e5aOx", "name": "Google SecOps Cloud Storage Integration", "api_key": "ui2lp2axTNmsyakw9tvNnw", "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==" }エンコードされた値をコピーして保存します。これは、認証に使用する base64 エンコードされた API キーです。
サービス アカウントの作成
Cloud Run functions 専用のサービス アカウントを作成します。
- Google Cloud コンソールで、[IAM と管理] > [サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成の詳細を指定します。
- サービス アカウント名: 「
elastic-defend-collector」と入力します。 - サービス アカウントの説明:
Service account for Elastic Defend log collection to GCSと入力します。
- サービス アカウント名: 「
- [作成して続行] をクリックします。
- [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次のロールを追加します。
- [ロールを選択] をクリックし、[Storage オブジェクト管理者](
roles/storage.objectAdmin)を選択します。 - [別のロールを追加] をクリックし、[Cloud Run 起動元](
roles/run.invoker)を選択します。
- [ロールを選択] をクリックし、[Storage オブジェクト管理者](
- [続行] をクリックします。
- [完了] をクリックします。
Pub/Sub トピックの作成
Cloud Scheduler から Cloud Run functions の関数をトリガーする Pub/Sub トピックを作成します。
- Google Cloud コンソールで、[Pub/Sub>トピック] に移動します。
- [トピックを作成] をクリックします。
- 次の構成の詳細を指定します。
- トピック ID: 「
elastic-defend-trigger」と入力します。 - デフォルトのサブスクリプションを追加する: チェックをオンのままにする
- トピック ID: 「
- [作成] をクリックします。
Cloud Run 関数を作成
Elasticsearch からイベントを取得して GCS に書き込む Cloud Run functions 関数を作成する。
関数を作成する
- Google Cloud コンソールで、[Cloud Run functions] に移動します。
- [関数を作成] をクリックします。
次の構成情報を提供してください。
設定 値 環境 第 2 世代 関数名 elastic-defend-to-gcsリージョン GCS バケットと同じリージョンを選択します。 トリガーのタイプ Cloud Pub/Sub Cloud Pub/Sub トピック elastic-defend-triggerを選択割り当てられたメモリ 512 MiB(データ量が多い場合は増やす) タイムアウト 540 秒 ランタイム サービス アカウント elastic-defend-collectorを選択[次へ] をクリックします。
環境変数を追加する
[ランタイム、ビルド、接続、セキュリティの設定] セクションで、次の環境変数を追加します。
変数 値 GCS_BUCKETGCS バケットの名前(例: elastic-defend-logs)GCS_PREFIXログファイルの接頭辞( elastic-defendなど)STATE_KEY状態ファイルの名前(例: state.json)ES_HOSTElasticsearch の URL(例: https://my-deployment.es.us-central1.gcp.cloud.es.io:443)ES_API_KEY認証情報の作成ステップでエンコードされた API キー MAX_RECORDS実行あたりのレコードの最大数( 100000など)PAGE_SIZE検索リクエストあたりのレコード数(例: 1000)LOOKBACK_HOURS初回実行時に遡って確認する時間(例: 24)
関数のコードを追加する
- [ランタイム] として [Python 3.11] を選択します。
- [エントリ ポイント] を
mainに設定します。 - [ソースコード] セクションで [インライン エディタ] を選択します。
main.pyの内容を次のコードに置き換えます。import os import json import datetime import base64 import requests from google.cloud import storage GCS_BUCKET = os.environ["GCS_BUCKET"] GCS_PREFIX = os.environ.get("GCS_PREFIX", "elastic-defend") STATE_KEY = os.environ.get("STATE_KEY", "state.json") ES_HOST = os.environ["ES_HOST"] ES_API_KEY = os.environ["ES_API_KEY"] MAX_RECORDS = int(os.environ.get("MAX_RECORDS", "100000")) PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "1000")) LOOKBACK_HOURS = int(os.environ.get("LOOKBACK_HOURS", "24")) INDEX_PATTERN = "logs-endpoint.*" SEARCH_PATH = f"/{INDEX_PATTERN}/_search" def _gcs_client(): return storage.Client() def _load_state(bucket): blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}") if blob.exists(): return json.loads(blob.download_as_text()) return {} def _save_state(bucket, state): blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}") blob.upload_from_string( json.dumps(state), content_type="application/json", ) def _build_query(gte_ts, sort_after=None): body = { "size": PAGE_SIZE, "query": { "range": { "@timestamp": { "gte": gte_ts, "format": "strict_date_optional_time", } } }, "sort": [ {"@timestamp": {"order": "asc"}}, {"_shard_doc": "asc"}, ], } if sort_after: body["search_after"] = sort_after return body def _search(session, body): url = f"{ES_HOST.rstrip('/')}{SEARCH_PATH}" resp = session.post( url, json=body, headers={ "Authorization": f"ApiKey {ES_API_KEY}", "Content-Type": "application/json", }, timeout=120, ) resp.raise_for_status() return resp.json() def _write_ndjson(bucket, records, ts_label): if not records: return now = datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%SZ") blob_name = f"{GCS_PREFIX}/{ts_label}/{now}.ndjson" blob = bucket.blob(blob_name) ndjson = "\n".join(json.dumps(r, separators=(",", ":")) for r in records) blob.upload_from_string(ndjson, content_type="application/x-ndjson") print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{blob_name}") def main(event, context): """Cloud Run function entry point triggered by Pub/Sub.""" client = _gcs_client() bucket = client.bucket(GCS_BUCKET) state = _load_state(bucket) sort_after = state.get("sort_after") if state.get("last_timestamp"): gte_ts = state["last_timestamp"] else: gte_ts = ( datetime.datetime.utcnow() - datetime.timedelta(hours=LOOKBACK_HOURS) ).strftime("%Y-%m-%dT%H:%M:%S.%fZ") session = requests.Session() total = 0 batch = [] last_ts = gte_ts ts_label = datetime.datetime.utcnow().strftime("%Y/%m/%d/%H") while total < MAX_RECORDS: body = _build_query(gte_ts, sort_after) result = _search(session, body) hits = result.get("hits", {}).get("hits", []) if not hits: break for hit in hits: doc = hit.get("_source", {}) doc["_id"] = hit.get("_id") doc["_index"] = hit.get("_index") batch.append(doc) hit_ts = doc.get("@timestamp", last_ts) if hit_ts > last_ts: last_ts = hit_ts sort_after = hits[-1].get("sort") total += len(hits) if len(batch) >= PAGE_SIZE: _write_ndjson(bucket, batch, ts_label) batch = [] if len(hits) < PAGE_SIZE: break if batch: _write_ndjson(bucket, batch, ts_label) new_state = { "last_timestamp": last_ts, "sort_after": sort_after, } _save_state(bucket, new_state) print(f"Done. Fetched {total} records. State: {json.dumps(new_state)}") return f"OK: {total} records"requirements.txtの内容を次のように置き換えます。functions-framework==3.* google-cloud-storage==2.* requests==2.*[デプロイ] をクリックします。
デプロイが正常に完了するまで待ちます。
Cloud Scheduler ジョブの作成
Cloud Scheduler ジョブを作成して、Cloud Run functions の関数を定期的にトリガーする。
- Google Cloud コンソールで、[Cloud Scheduler] に移動します。
- [ジョブを作成] をクリックします。
次の構成情報を提供してください。
設定 値 名前 elastic-defend-schedulerリージョン Cloud Run functions と同じリージョンを選択する 周波数 */5 * * * *(5 分ごと)タイムゾーン タイムゾーンを選択します(例: UTC)[続行] をクリックします。
[実行を構成する] セクションで、次の操作を行います。
- ターゲット タイプ: [Pub/Sub] を選択します。
- Cloud Pub/Sub トピック:
elastic-defend-triggerを選択します。 - メッセージ本文: 「
{"run": true}」と入力します。
[作成] をクリックします。
Google SecOps サービス アカウントを取得してフィードを構成する
Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。
サービス アカウントのメールアドレスを取得する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Elastic Defend Events)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [Elastic Defend] を選択します。
[サービス アカウントを取得する] をクリックします。一意のサービス アカウント メールアドレスが表示されます(例:)。
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーして、次のステップで使用します。
フィードを構成する
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
ストレージ バケットの URL: 接頭辞パスを含む GCS バケット URI を入力します。
gs://elastic-defend-logs/elastic-defend/elastic-defend-logsは、実際の GCS バケット名に置き換えます。Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません(テストにおすすめ)。
- 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます(デフォルトは 180 日)。
アセットの名前空間: アセットの名前空間
Ingestion labels: このフィードのイベントに適用されるラベル
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
Google SecOps サービス アカウントに IAM 権限を付与する
Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者ロールが必要です。
- [Cloud Storage] > [バケット] に移動します。
- バケット名(例:
elastic-defend-logs)をクリックします。 - [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
- ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
[保存] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| _source.agent.id、_source.agent.type、_source.agent.version、_source.host.architecture、_source.event.agent_id_status、_source.event.id、_source.user.id、_source.group.id、_source.data_stream.type、_source.agent.build.original | additional.fields | リストされたフィールドの値を含むラベル オブジェクトと統合されます |
| _source.process.Ext.session_info.logon_type | extensions.auth.auth_details | 値を直接コピー |
| _source.host.os.full | hardware.cpu_platform | 値を直接コピー |
| _source.host.id | hardware.serial_number | 値を直接コピー |
| _source.rule.description | metadata.description | 値を直接コピー |
| _source.@timestamp | metadata.event_timestamp | ISO8601、yyyy-MM-ddTHH:mm:ss.SSSSSSSSSZ、yyyy-MM-ddTHH:mm:ss.SSSSSSZ、yyyy-MM-ddTHH:mm:ss.SSSZ、yyyy-MM-ddTHH:mm:ssZ 形式の日付フィルタを使用して変換 |
| metadata.event_type | index、event.action、has* の条件に基づいて設定 | |
| metadata.log_type | 「ELASTIC_DEFEND」に設定 | |
| metadata.product_event_type | _index ~ events.file の場合は「File Events」、events.library の場合は「Library Events」、events.network の場合は「Network Events」、events.process の場合は「Process Events」、events.registry の場合は「Registry Events」、events.security の場合は「Security Events」、events.api の場合は「API Events」、.alert の場合は「Alerts」に設定します。 | |
| _id | metadata.product_log_id | ["", " ", "null", "N/A"] に含まれていない場合は _id の値 |
| _source.ecs.version | metadata.product_version | 値を直接コピー |
| _source.network.type | network.application_protocol_version | 値を直接コピー |
| _source.network.transport | network.ip_protocol | (?i)tcp と一致する場合は「TCP」、(?i)udp と一致する場合は「UDP」、(?i)icmp と一致する場合は「ICMP」、それ以外の場合は「UNKNOWN_IP_PROTOCOL」に設定します。 |
| _source.destination.as.organization.name | network.organization_name | 値を直接コピー |
| _source.Endpoint.policy.applied.artifacts.global.identifiers | observer.file.names | _source.Endpoint.policy.applied.artifacts.global.identifiers から統合されました |
| _source.Endpoint.policy.applied.artifacts.global.version、_source.Endpoint.policy.applied.artifacts.global.snapshot | observer.resource.attribute.labels | リストされたフィールドの値を含むラベル オブジェクトと統合されます |
| _source.Endpoint.policy.applied.artifacts.user.version | observer.user.attribute.labels | _source.Endpoint.policy.applied.artifacts.user.version の値を含むラベル オブジェクトと統合 |
| _source.host.os.full | principal.asset.hardware.cpu_platform | 値を直接コピー |
| _source.host.id | principal.asset.hardware.serial_number | 値を直接コピー |
| _source.host.name | principal.asset.hostname | 値を直接コピー |
| _source.host.ip | principal.asset.ip | _source.host.ip から統合 |
| _source.host.os.type | principal.asset.platform_software.platform | (?i)windows と一致する場合は「WINDOWS」、(?i)linux と一致する場合は「LINUX」、(?i)mac と一致する場合は「MAC」、(?i)ios と一致する場合は「IOS」、それ以外の場合は「UNKNOWN_PLATFORM」に設定します。 |
| _source.host.os.kernel | principal.asset.platform_software.platform_patch_level | 値を直接コピー |
| _source.event.created | principal.domain.creation_time | ISO8601、yyyy-MM-ddTHH:mm:ss.SSSSSSSSSZ、yyyy-MM-ddTHH:mm:ss.SSSSSSZ、yyyy-MM-ddTHH:mm:ss.SSSZ、yyyy-MM-ddTHH:mm:ssZ 形式の日付フィルタを使用して変換されました |
| _source.user.domain | principal.domain.name | 値を直接コピー |
| _source.process.thread.capabilities.effective | principal.file.capabilities_tags | _source.process.thread.capabilities.effective から統合 |
| _source.process.executable | principal.file.full_path | 値を直接コピー |
| _source.process.hash.md5 | principal.file.md5 | 値を直接コピー |
| _source.file.name | principal.file.names | _source.file.name から統合されました |
| _source.process.hash.sha1 | principal.file.sha1 | 値を直接コピー |
| _source.process.hash.sha256 | principal.file.sha256 | 値を直接コピー |
| _source.host.hostname | principal.hostname | 値を直接コピー |
| _source.host.ip | principal.ip | _source.host.ip から統合 |
| _source.host.mac | principal.mac | - を : に置き換えた後、_source.host.mac から統合されました |
| _source.host.os.Ext.variant | principal.platform_version | 値を直接コピー |
| _source.source.port | principal.port | 文字列に変換してから整数に変換 |
| _source.process.command_line, _source.process.name | principal.process.command_line | _source.process.command_line が空でない場合はその値、空の場合は _source.process.name の値 |
| _source.process.thread.capabilities.permitted | principal.process.file.capabilities_tags | _source.process.thread.capabilities.permitted から統合 |
| _source.process.executable | principal.process.file.full_path | 値を直接コピー |
| _source.process.hash.md5 | principal.process.file.md5 | 値を直接コピー |
| _source.process.hash.sha1 | principal.process.file.sha1 | 値を直接コピー |
| _source.process.hash.sha256 | principal.process.file.sha256 | 値を直接コピー |
| _source.process.parent.executable | principal.process.parent_process.file.full_path | 値を直接コピー |
| _source.process.pid | principal.process.pid | 文字列に変換してコピー |
| _source.process.Ext.api.name | principal.resource.attribute.labels | _source.process.Ext.api.name の値を含むラベル オブジェクトと統合 |
| _source.event.code | principal.resource.product_object_id | 値を直接コピー |
| _source.group.name | principal.user.group_identifiers | _source.group.name から統合 |
| _source.user.name | principal.user.userid | 値を直接コピー |
| _source.user.id | principal.user.windows_sid | 正規表現 ^S-\\d-(\\\\d+-){1,14}\\\\d+$ と一致する場合の _source.user.id の値 |
| _source.file.Ext.malware_signature.primary.signature.hash.sha256 | security_result.about.file.sha256 | 値を直接コピー |
| _source.event.outcome | security_result.action | _source.event.outcome の値を大文字に変換し、[SUCCESS, ALLOW] に含まれる場合は ALLOW、[FAILURE, DENY, SKIPPED, RATE_LIMIT] に含まれる場合は BLOCK、UNKNOWN の場合は UNKNOWN_ACTION に設定します。 |
| _source.event.action | security_result.action_details | 値を直接コピー |
| _source.destination.geo.region_iso_code | security_result.associations | _source.destination.geo.region_iso_code の名前を含むオブジェクトと統合されました |
| _source.kibana.alert.rule.parameters.threat.tactic.id, _source.kibana.alert.rule.parameters.threat.tactic.name | security_result.attack_details.tactics | リストされたフィールドの ID と名前を含むオブジェクトとマージされました |
| _source.kibana.alert.rule.parameters.threat.technique.id, _source.kibana.alert.rule.parameters.threat.technique.name, _source.kibana.alert.rule.parameters.threat.technique.subtechnique.id, _source.kibana.alert.rule.parameters.threat.technique.subtechnique.name | security_result.attack_details.techniques | リストされたフィールドの id、name、subtechnique_id、subtechnique_name を含むオブジェクトと統合 |
| _source.event.category | security_result.category_details | _source.event.category から統合 |
| _source.kibana.alert.rule.description | security_result.description | 値を直接コピー |
| _source.event.kind, _source.file.Ext.malware_signature.all_names, _source.file.Ext.malware_signature.identifier, _source.event.risk_score, _source.threat.tactic.reference, _source.threat.technique.reference, _source.threat.technique.subtechnique.reference | security_result.detection_fields | リストされたフィールドの値を含むラベル オブジェクトと統合されます |
| _source.rule.id、_source.kibana.alert.rule.rule_id | security_result.rule_id | _source.rule.id が空でない場合はその値、それ以外の場合は _source.kibana.alert.rule.rule_id の値 |
| _source.rule.name、_source.kibana.alert.rule.name | security_result.rule_name | _source.rule.name が空でない場合はその値、空の場合は _source.kibana.alert.rule.name の値 |
| _source.rule.ruleset | security_result.rule_set | 値を直接コピー |
| security_result.severity | 「LOW」に設定します。_index が .alert と一致する場合は「HIGH」に設定します。_source.kibana.alert.rule.parameters.severity が (?i)LOW と一致する場合は「LOW」に設定します。 | |
| _source.message | security_result.summary | 値を直接コピー |
| _source.file.Ext.malware_signature.primary.signature.id | security_result.threat_id | 値を直接コピー |
| _source.file.Ext.malware_signature.primary.signature.name | security_result.threat_name | 値を直接コピー |
| _source.source.address, _source.source.ip | src.asset.ip | _source.source.address と _source.source.ip から統合 |
| _source.source.address, _source.source.ip | src_ip | _source.source.address と _source.source.ip から統合 |
| _source.host.name | target.asset.hostname | 値を直接コピー |
| _source.destination.address、_source.destination.ip | target.asset.ip | _source.destination.address と _source.destination.ip から統合 |
| _source.file.path、_source.dll.path、_source.process.executable、_source.Target.process.executable | target.file.full_path | events.file の場合は _source.file.path、events.library の場合は _source.dll.path、events.process または events.api の場合は _source.process.executable、events.api の場合は _source.Target.process.executable の値 |
| _source.dll.hash.md5、_source.process.hash.md5 | target.file.md5 | events.library の場合は _source.dll.hash.md5、.alert の場合は _source.process.hash .md5 の値 |
| _source.dll.name、_source.process.name | target.file.names | events.library の場合は _source.dll.name、.alert の場合は _source.process .name からマージされます |
| _source.dll.hash.sha1、_source.process.hash.sha1 | target.file.sha1 | events.library の場合は _source.dll.hash.sha1、.alert の場合は _source.process.hash .sha1 の値 |
| _source.dll.hash.sha256、_source.process.hash.sha256 | target.file.sha256 | events.library の場合は _source.dll.hash.sha256 の値、.alert の場合は _source.process.hash .sha256 の値 |
| _source.host.name | target.hostname | 値を直接コピー |
| _source.destination.address、_source.destination.ip | target.ip | _source.destination.address と _source.destination.ip から統合 |
| _source.destination.geo.city_name | target.location.city | 値を直接コピー |
| _source.destination.geo.country_name | target.location.country_or_region | 値を直接コピー |
| _source.destination.geo.continent_name | target.location.name | 値を直接コピー |
| _source.destination.geo.location.lat | target.location.region_coordinates.latitude | 文字列に変換してから浮動小数点数に変換 |
| _source.destination.geo.location.lon | target.location.region_coordinates.longitude | 文字列に変換してから浮動小数点数に変換 |
| _source.destination.geo.region_name | target.location.state | 値を直接コピー |
| _source.data_stream.namespace | target.namespace | 値を直接コピー |
| _source.destination.port | target.port | 文字列に変換してから整数に変換 |
| _source.process.command_line | target.process.command_line | 値を直接コピー |
| _source.process.executable | target.process.file.full_path | 値を直接コピー |
| _source.process.hash.md5 | target.process.file.md5 | 値を直接コピー |
| _source.process.hash.sha1 | target.process.file.sha1 | 値を直接コピー |
| _source.process.hash.sha256 | target.process.file.sha256 | 値を直接コピー |
| _source.process.name | target.process.file.names | _source.process.name から統合されました |
| _source.registry.key | target.registry.registry_key | 値を直接コピー |
| _source.registry.path | target.registry.registry_value_data | 値を直接コピー |
| _source.registry.value | target.registry.registry_value_name | 値を直接コピー |
| _source.data_stream.dataset | target.resource.name | 値を直接コピー |
| _source.process.entity_id | target.user.userid | 値を直接コピー |
| metadata.product_name | 「Elastic Defend」に設定 | |
| metadata.vendor_name | 「Elastic」に設定 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。