Cisco AMP for Endpoints のログを収集する
このドキュメントでは、Google Cloud Storage を使用して Cisco AMP for Endpoints ログを Google Security Operations に取り込む方法について説明します。パーサーは、未加工の JSON 形式のログを Chronicle UDM に準拠した構造化形式に変換します。ネストされた JSON オブジェクトからフィールドを抽出し、UDM スキーマにマッピングし、イベント カテゴリを特定し、重大度レベルを割り当てます。最終的に、特定の条件が満たされた場合にセキュリティ アラートをフラグ設定して、統合イベント出力を生成します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- Cloud Storage API が有効になっている GCP プロジェクト
- GCS バケットを作成および管理する権限
- GCS バケットの IAM ポリシーを管理する権限
- Cloud Run サービス、Pub/Sub トピック、Cloud Scheduler ジョブを作成する権限
- Cisco AMP for Endpoints コンソールへの特権アクセス
Cisco AMP for Endpoints API 認証情報を収集する
- Cisco AMP for Endpoints コンソールにログインします。
- [アカウント] > [API 認証情報] に移動します。
- [新しい API 認証情報] をクリックして、新しい API キーとクライアント ID を作成します。
- 次の構成の詳細を指定します。
- アプリケーション名: 名前を入力します(例:
Chronicle SecOps Integration)。 - スコープ: 基本的なイベント ポーリングの場合は、[読み取り専用] を選択します。
- アプリケーション名: 名前を入力します(例:
- [作成] をクリックします。
- 次の詳細をコピーして安全な場所に保存します。
- 3API クライアント ID
- API キー
- API ベース URL: リージョンに応じて、次のいずれかを入力します。
- 米国:
https://api.amp.cisco.com - EU:
https://api.eu.amp.cisco.com - APJC:
https://api.apjc.amp.cisco.com
- 米国:
権限を確認する
アカウントに必要な権限があることを確認するには:
- Cisco AMP for Endpoints コンソールにログインします。
- [アカウント] > [API 認証情報] に移動します。
- [API 認証情報] ページが表示され、新しく作成した認証情報が一覧表示されていれば、必要な権限があります。
- このオプションが表示されない場合は、API アクセス権限を付与するよう管理者に依頼してください。
テスト API アクセス
統合に進む前に、認証情報をテストします。
# Replace with your actual credentials AMP_CLIENT_ID="your-client-id" AMP_API_KEY="your-api-key" API_BASE="https://api.amp.cisco.com" # Test API access curl -v -u "${AMP_CLIENT_ID}:${AMP_API_KEY}" "${API_BASE}/v1/events?limit=1"
Google Cloud Storage バケットを作成する
- Google Cloud コンソールに移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前( cisco-amp-logsなど)を入力します。ロケーション タイプ ニーズに基づいて選択します(リージョン、デュアルリージョン、マルチリージョン)。 ロケーション ロケーションを選択します(例: us-central1)。ストレージ クラス Standard(頻繁にアクセスされるログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
Cloud Run functions のサービス アカウントを作成する
Cloud Run 関数には、GCS バケットに書き込み、Pub/Sub によって呼び出される権限を持つサービス アカウントが必要です。
サービス アカウントの作成
- GCP Console で、[IAM と管理>サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成の詳細を指定します。
- サービス アカウント名: 「
cisco-amp-collector-sa」と入力します。 - サービス アカウントの説明: 「
Service account for Cloud Run function to collect Cisco AMP for Endpoints logs」と入力します。
- サービス アカウント名: 「
- [作成して続行] をクリックします。
- [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次のロールを追加します。
- [ロールを選択] をクリックします。
- [ストレージ オブジェクト管理者] を検索して選択します。
- [+ 別のロールを追加] をクリックします。
- [Cloud Run 起動元] を検索して選択します。
- [+ 別のロールを追加] をクリックします。
- [Cloud Functions 起動元] を検索して選択します。
- [続行] をクリックします。
- [完了] をクリックします。
これらのロールは、次の目的で必要です。
- Storage オブジェクト管理者: ログを GCS バケットに書き込み、状態ファイルを管理する
- Cloud Run 起動元: Pub/Sub が関数を呼び出すことを許可する
- Cloud Functions 起動元: 関数の呼び出しを許可する
GCS バケットに対する IAM 権限を付与する
GCS バケットに対する書き込み権限をサービス アカウント(cisco-amp-collector-sa)に付与します。
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
cisco-amp-collector-sa@PROJECT_ID.iam.gserviceaccount.com)を入力します。 - ロールを割り当てる: [Storage オブジェクト管理者] を選択します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
- [保存] をクリックします。
Pub/Sub トピックの作成
Cloud Scheduler がパブリッシュし、Cloud Run functions がサブスクライブする Pub/Sub トピックを作成します。
- GCP Console で、[Pub/Sub> トピック] に移動します。
- [トピックを作成] をクリックします。
- 次の構成の詳細を指定します。
- トピック ID: 「
cisco-amp-events-trigger」と入力します。 - その他の設定はデフォルトのままにします。
- トピック ID: 「
- [作成] をクリックします。
ログを収集する Cloud Run 関数を作成する
Cloud Run 関数は、Cloud Scheduler からの Pub/Sub メッセージによってトリガーされ、Cisco AMP for Endpoints API からログを取得して GCS に書き込みます。
- GCP Console で、[Cloud Run] に移動します。
- [サービスを作成] をクリックします。
- [関数] を選択します(インライン エディタを使用して関数を作成します)。
[構成] セクションで、次の構成の詳細を指定します。
設定 値 サービス名 cisco-amp-events-collectorリージョン GCS バケットと一致するリージョンを選択します(例: us-central1)。ランタイム [Python 3.12] 以降を選択します。 [トリガー(省略可)] セクションで、次の操作を行います。
- [+ トリガーを追加] をクリックします。
- [Cloud Pub/Sub] を選択します。
- [Cloud Pub/Sub トピックを選択してください] で、Pub/Sub トピック(
cisco-amp-events-trigger)を選択します。 - [保存] をクリックします。
[認証] セクションで、次の操作を行います。
- [認証が必要] を選択します。
- [Identity and Access Management(IAM)] を選択します。
- [コンテナ、ネットワーキング、セキュリティ] までスクロールして開きます。
- [セキュリティ] タブに移動します。
- サービス アカウント: サービス アカウントを選択します(
cisco-amp-collector-sa)。
- サービス アカウント: サービス アカウントを選択します(
[コンテナ] タブに移動します。
- [変数とシークレット] をクリックします。
環境変数ごとに [+ 変数を追加] をクリックします。
変数名 値の例 説明 GCS_BUCKETcisco-amp-logsGCS バケット名 GCS_PREFIXcisco-amp-events/ログファイルの接頭辞 STATE_KEYcisco-amp-events/state.json状態ファイルのパス API_BASEhttps://api.amp.cisco.comAPI ベース URL AMP_CLIENT_IDyour-client-idAPI クライアント ID AMP_API_KEYyour-api-keyAPI キー PAGE_SIZE5001 ページあたりのレコード数 MAX_PAGES10取得する最大ページ数
[変数とシークレット] セクションで、[リクエスト] までスクロールします。
- リクエストのタイムアウト:
600秒(10 分)を入力します。
- リクエストのタイムアウト:
[設定] タブに移動します。
- [リソース] セクションで次の操作を行います。
- メモリ: 512 MiB 以上を選択します。
- CPU: [1] を選択します。
- [リソース] セクションで次の操作を行います。
[リビジョン スケーリング] セクションで、次の操作を行います。
- [インスタンスの最小数] に「
0」と入力します。 - インスタンスの最大数:
100と入力します(または、予想される負荷に基づいて調整します)。
- [インスタンスの最小数] に「
[作成] をクリックします。
サービスが作成されるまで待ちます(1 ~ 2 分)。
サービスが作成されると、インライン コードエディタが自動的に開きます。
関数コードを追加する
- [エントリ ポイント] フィールドに「main」と入力します。
インライン コードエディタで、次の 2 つのファイルを作成します。
- 最初のファイル: main.py:
import functions_framework from google.cloud import storage import json import os import urllib3 from datetime import datetime, timezone, timedelta import time import base64 # Initialize HTTP client with timeouts http = urllib3.PoolManager( timeout=urllib3.Timeout(connect=5.0, read=30.0), retries=False, ) # Initialize Storage client storage_client = storage.Client() # Environment variables GCS_BUCKET = os.environ.get('GCS_BUCKET') GCS_PREFIX = os.environ.get('GCS_PREFIX', 'cisco-amp-events/') STATE_KEY = os.environ.get('STATE_KEY', 'cisco-amp-events/state.json') API_BASE = os.environ.get('API_BASE') AMP_CLIENT_ID = os.environ.get('AMP_CLIENT_ID') AMP_API_KEY = os.environ.get('AMP_API_KEY') PAGE_SIZE = int(os.environ.get('PAGE_SIZE', '500')) MAX_PAGES = int(os.environ.get('MAX_PAGES', '10')) def parse_datetime(value: str) -> datetime: """Parse ISO datetime string to datetime object.""" if value.endswith("Z"): value = value[:-1] + "+00:00" return datetime.fromisoformat(value) @functions_framework.cloud_event def main(cloud_event): """ Cloud Run function triggered by Pub/Sub to fetch Cisco AMP events and write to GCS. Args: cloud_event: CloudEvent object containing Pub/Sub message """ if not all([GCS_BUCKET, API_BASE, AMP_CLIENT_ID, AMP_API_KEY]): print('Error: Missing required environment variables') return try: # Get GCS bucket bucket = storage_client.bucket(GCS_BUCKET) # Load state state = load_state(bucket, STATE_KEY) # Determine time window now = datetime.now(timezone.utc) last_time = None if isinstance(state, dict) and state.get("last_event_time"): try: last_time = parse_datetime(state["last_event_time"]) # Overlap by 2 minutes to catch any delayed events last_time = last_time - timedelta(minutes=2) except Exception as e: print(f"Warning: Could not parse last_event_time: {e}") if last_time is None: last_time = now - timedelta(days=1) print(f"Fetching logs from {last_time.isoformat()} to {now.isoformat()}") # Fetch logs records, newest_event_time = fetch_logs( api_base=API_BASE, client_id=AMP_CLIENT_ID, api_key=AMP_API_KEY, start_time=last_time, page_size=PAGE_SIZE, max_pages=MAX_PAGES, ) if not records: print("No new log records found.") save_state(bucket, STATE_KEY, now.isoformat()) return # Write to GCS as NDJSON timestamp = now.strftime('%Y%m%d_%H%M%S') object_key = f"{GCS_PREFIX}cisco_amp_events_{timestamp}.ndjson" blob = bucket.blob(object_key) ndjson = '\n'.join([json.dumps(record, ensure_ascii=False) for record in records]) + '\n' blob.upload_from_string(ndjson, content_type='application/x-ndjson') print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{object_key}") # Update state with newest event time if newest_event_time: save_state(bucket, STATE_KEY, newest_event_time) else: save_state(bucket, STATE_KEY, now.isoformat()) print(f"Successfully processed {len(records)} records") except Exception as e: print(f'Error processing logs: {str(e)}') raise def load_state(bucket, key): """Load state from GCS.""" try: blob = bucket.blob(key) if blob.exists(): state_data = blob.download_as_text() return json.loads(state_data) except Exception as e: print(f"Warning: Could not load state: {e}") return {} def save_state(bucket, key, last_event_time_iso: str): """Save the last event timestamp to GCS state file.""" try: state = {'last_event_time': last_event_time_iso} blob = bucket.blob(key) blob.upload_from_string( json.dumps(state, indent=2), content_type='application/json' ) print(f"Saved state: last_event_time={last_event_time_iso}") except Exception as e: print(f"Warning: Could not save state: {e}") def fetch_logs(api_base: str, client_id: str, api_key: str, start_time: datetime, page_size: int, max_pages: int): """ Fetch logs from Cisco AMP for Endpoints API with pagination and rate limiting. Args: api_base: API base URL client_id: API client ID api_key: API key start_time: Start time for log query page_size: Number of records per page max_pages: Maximum total pages to fetch Returns: Tuple of (records list, newest_event_time ISO string) """ # Clean up base URL base_url = api_base.rstrip('/') endpoint = f"{base_url}/v1/events" # Create Basic Auth header auth_string = f"{client_id}:{api_key}" auth_bytes = auth_string.encode('utf-8') auth_b64 = base64.b64encode(auth_bytes).decode('utf-8') headers = { 'Authorization': f'Basic {auth_b64}', 'Accept': 'application/json', 'User-Agent': 'GoogleSecOps-CiscoAMPCollector/1.0' } records = [] newest_time = None page_num = 0 backoff = 1.0 # Build initial URL with start_date parameter start_date_str = start_time.isoformat() + 'Z' if not start_time.isoformat().endswith('Z') else start_time.isoformat() next_url = f"{endpoint}?limit={page_size}&start_date={start_date_str}" while next_url and page_num < max_pages: page_num += 1 try: response = http.request('GET', next_url, headers=headers) # Handle rate limiting with exponential backoff if response.status == 429: retry_after = int(response.headers.get('Retry-After', str(int(backoff)))) print(f"Rate limited (429). Retrying after {retry_after}s...") time.sleep(retry_after) backoff = min(backoff * 2, 30.0) continue backoff = 1.0 if response.status != 200: print(f"HTTP Error: {response.status}") response_text = response.data.decode('utf-8') print(f"Response body: {response_text[:256]}") return [], None data = json.loads(response.data.decode('utf-8')) # Extract events from response page_results = data.get('data', []) if not page_results: print(f"No more results (empty page)") break print(f"Page {page_num}: Retrieved {len(page_results)} events") records.extend(page_results) # Track newest event time for event in page_results: try: event_time = event.get('date') if event_time: if newest_time is None or parse_datetime(event_time) > parse_datetime(newest_time): newest_time = event_time except Exception as e: print(f"Warning: Could not parse event time: {e}") # Check for next page URL in metadata next_url = data.get('metadata', {}).get('links', {}).get('next') if not next_url: print("No more pages (no next URL)") break except Exception as e: print(f"Error fetching logs: {e}") return [], None print(f"Retrieved {len(records)} total records from {page_num} pages") return records, newest_time- 2 つ目のファイル: requirements.txt:
functions-framework==3.* google-cloud-storage==2.* urllib3>=2.0.0[デプロイ] をクリックして、関数を保存してデプロイします。
デプロイが完了するまで待ちます(2 ~ 3 分)。
Cloud Scheduler ジョブの作成
Cloud Scheduler は、定期的に Pub/Sub トピックにメッセージをパブリッシュし、Cloud Run functions の関数をトリガーします。
- GCP Console で、[Cloud Scheduler] に移動します。
- [ジョブを作成] をクリックします。
次の構成情報を提供してください。
設定 値 名前 cisco-amp-events-collector-hourlyリージョン Cloud Run functions と同じリージョンを選択する 周波数 0 * * * *(1 時間ごとに正時)タイムゾーン タイムゾーンを選択します(UTC を推奨)。 ターゲット タイプ Pub/Sub トピック Pub/Sub トピック( cisco-amp-events-trigger)を選択するメッセージ本文 {}(空の JSON オブジェクト)[作成] をクリックします。
スケジュールの頻度のオプション
ログの量とレイテンシの要件に基づいて頻度を選択します。
頻度 CRON 式 ユースケース 5 分毎 */5 * * * *大容量、低レイテンシ 15 分ごと */15 * * * *検索量が普通 1 時間ごと 0 * * * *標準(推奨) 6 時間ごと 0 */6 * * *少量、バッチ処理 毎日 0 0 * * *履歴データの収集
統合をテストする
- Cloud Scheduler コンソールで、ジョブを見つけます。
- [強制実行] をクリックして、ジョブを手動でトリガーします。
- 数秒待ちます。
- Cloud Run > サービスに移動します。
- 関数名(
cisco-amp-events-collector)をクリックします。 - [Logs] タブをクリックします。
関数が正常に実行されたことを確認します。次の内容を確認します。
Fetching logs from YYYY-MM-DDTHH:MM:SS+00:00 to YYYY-MM-DDTHH:MM:SS+00:00 Page 1: Retrieved X events Wrote X records to gs://cisco-amp-logs/cisco-amp-events/cisco_amp_events_YYYYMMDD_HHMMSS.ndjson Successfully processed X records[Cloud Storage] > [バケット] に移動します。
バケット名をクリックします。
プレフィックス フォルダ(
cisco-amp-events/)に移動します。現在のタイムスタンプで新しい
.ndjsonファイルが作成されたことを確認します。
ログにエラーが表示された場合:
- HTTP 401: 環境変数で API 認証情報を確認する
- HTTP 403: アカウントに必要な権限があることを確認する
- HTTP 429: レート制限 - 関数はバックオフで自動的に再試行されます
- 環境変数が不足している: 必要な変数がすべて設定されていることを確認します
Google SecOps サービス アカウントを取得する
Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。
サービス アカウントのメールアドレスを取得する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Cisco AMP for Endpoints logs)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [Log type] として [Cisco AMP] を選択します。
[サービス アカウントを取得する] をクリックします。一意のサービス アカウント メールアドレスが表示されます(例:)。
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーして、次のステップで使用します。
Google SecOps サービス アカウントに IAM 権限を付与する
Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者ロールが必要です。
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
- ロールを割り当てる: [ストレージ オブジェクト閲覧者] を選択します。
- [保存] をクリックします。
Cisco AMP for Endpoints のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Cisco AMP for Endpoints logs)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [Log type] として [Cisco AMP] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
ストレージ バケットの URL: 接頭辞パスを含む GCS バケット URI を入力します。
gs://cisco-amp-logs/cisco-amp-events/- 次のように置き換えます。
cisco-amp-logs: GCS バケット名。cisco-amp-events/: ログが保存される接頭辞/フォルダパス。
- 次のように置き換えます。
Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません(テストにおすすめ)。
- 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | 論理 |
|---|---|---|
| アクティブ | read_only_udm.principal.asset.active | computer.active から直接マッピングされます |
| connector_guid | read_only_udm.principal.asset.uuid | computer.connector_guid から直接マッピングされます |
| date | read_only_udm.metadata.event_timestamp.seconds | 日付をタイムスタンプに変換した後、直接マッピングされます |
| 検出 | read_only_udm.security_result.threat_name | 検出から直接マッピングされます |
| detection_id | read_only_udm.security_result.detection_fields.value | detection_id から直接マッピングされます |
| disposition | read_only_udm.security_result.description | file.disposition から直接マッピングされます |
| error.error_code | read_only_udm.security_result.detection_fields.value | error.error_code から直接マッピングされます |
| error.description | read_only_udm.security_result.detection_fields.value | error.description から直接マッピングされます |
| event_type | read_only_udm.metadata.product_event_type | event_type から直接マッピングされます |
| event_type_id | read_only_udm.metadata.product_log_id | event_type_id から直接マッピングされます |
| external_ip | read_only_udm.principal.asset.external_ip | computer.external_ip から直接マッピングされます |
| file.file_name | read_only_udm.target.file.names | file.file_name から直接マッピングされます |
| file.file_path | read_only_udm.target.file.full_path | file.file_path から直接マッピングされます |
| file.identity.md5 | read_only_udm.security_result.about.file.md5 | file.identity.md5 から直接マッピングされます |
| file.identity.md5 | read_only_udm.target.file.md5 | file.identity.md5 から直接マッピングされます |
| file.identity.sha1 | read_only_udm.security_result.about.file.sha1 | file.identity.sha1 から直接マッピングされます |
| file.identity.sha1 | read_only_udm.target.file.sha1 | file.identity.sha1 から直接マッピングされます |
| file.identity.sha256 | read_only_udm.security_result.about.file.sha256 | file.identity.sha256 から直接マッピングされます |
| file.identity.sha256 | read_only_udm.target.file.sha256 | file.identity.sha256 から直接マッピングされます |
| file.parent.disposition | read_only_udm.target.resource.attribute.labels.value | file.parent.disposition から直接マッピングされます |
| file.parent.file_name | read_only_udm.target.resource.attribute.labels.value | file.parent.file_name から直接マッピングされます |
| file.parent.identity.md5 | read_only_udm.target.resource.attribute.labels.value | file.parent.identity.md5 から直接マッピングされます |
| file.parent.identity.sha1 | read_only_udm.target.resource.attribute.labels.value | file.parent.identity.sha1 から直接マッピングされます |
| file.parent.identity.sha256 | read_only_udm.target.resource.attribute.labels.value | file.parent.identity.sha256 から直接マッピングされます |
| file.parent.process_id | read_only_udm.security_result.about.process.parent_process.pid | file.parent.process_id から直接マッピングされます |
| file.parent.process_id | read_only_udm.target.process.parent_process.pid | file.parent.process_id から直接マッピングされます |
| hostname | read_only_udm.principal.asset.hostname | computer.hostname から直接マッピングされます |
| hostname | read_only_udm.target.hostname | computer.hostname から直接マッピングされます |
| hostname | read_only_udm.target.asset.hostname | computer.hostname から直接マッピングされます |
| ip | read_only_udm.principal.asset.ip | computer.network_addresses.ip から直接マッピングされます |
| ip | read_only_udm.principal.ip | computer.network_addresses.ip から直接マッピングされます |
| ip | read_only_udm.security_result.about.ip | computer.network_addresses.ip から直接マッピングされます |
| mac | read_only_udm.principal.mac | computer.network_addresses.mac から直接マッピングされます |
| mac | read_only_udm.security_result.about.mac | computer.network_addresses.mac から直接マッピングされます |
| 重要度 | read_only_udm.security_result.severity | 次のロジックに基づいて重大度からマッピングされます。-「Medium」->「MEDIUM」-「High」または「Critical」->「HIGH」-「Low」->「LOW」- それ以外の場合 ->「UNKNOWN_SEVERITY」 |
| timestamp | read_only_udm.metadata.event_timestamp.seconds | タイムスタンプから直接マッピングされます |
| ユーザー | read_only_udm.security_result.about.user.user_display_name | computer.user から直接マッピングされます |
| ユーザー | read_only_udm.target.user.user_display_name | computer.user から直接マッピングされます |
| vulnerabilities.cve | read_only_udm.extensions.vulns.vulnerabilities.cve_id | vulnerabilities.cve から直接マッピングされます |
| vulnerabilities.name | read_only_udm.extensions.vulns.vulnerabilities.name | vulnerabilities.name から直接マッピングされます |
| vulnerabilities.score | read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score | 脆弱性から直接マッピングされ、浮動小数点数に変換されます。 |
| vulnerabilities.url | read_only_udm.extensions.vulns.vulnerabilities.vendor_knowledge_base_article_id | vulnerabilities.url から直接マッピングされます |
| vulnerabilities.version | read_only_udm.extensions.vulns.vulnerabilities.cvss_version | vulnerabilities.version から直接マッピングされます |
| is_alert | event_type が「Threat Detected」、「Exploit Prevention」、「Executed malware」、「Potential Dropper Infection」、「Multiple Infected Files」、「Vulnerable Application Detected」のいずれかの場合、または security_result.severity が「HIGH」の場合は true に設定します。 | |
| is_significant | event_type が「Threat Detected」、「Exploit Prevention」、「Executed malware」、「Potential Dropper Infection」、「Multiple Infected Files」、「Vulnerable Application Detected」のいずれかの場合、または security_result.severity が「HIGH」の場合は true に設定します。 | |
| read_only_udm.metadata.event_type | event_type と security_result.severity の値に基づいて決定されます。- event_type が「Executed malware」、「Threat Detected」、「Potential Dropper Infection」、「Cloud Recall Detection」、「Malicious Activity Detection」、「Exploit Prevention」、「Multiple Infected Files」、「Cloud IOC」、「System Process Protection」、「Vulnerable Application Detected」、「Threat Quarantined」、「Execution Blocked」、「Cloud Recall Quarantine Successful」、「Cloud Recall Restore from Quarantine Failed」、「Cloud Recall Quarantine Attempt Failed」、「Quarantine Failure」のいずれかの場合、イベントタイプは「SCAN_FILE」に設定されます。- security_result.severity が「HIGH」の場合、イベントタイプは「SCAN_FILE」に設定されます。- has_principal と has_target の両方が true の場合、イベントタイプは「SCAN_UNCATEGORIZED」に設定されます。- それ以外の場合、イベントタイプは「GENERIC_EVENT」に設定されます。 | |
| read_only_udm.metadata.log_type | 「CISCO_AMP」に設定 | |
| read_only_udm.metadata.vendor_name | 「CISCO_AMP」に設定 | |
| read_only_udm.security_result.about.file.full_path | file.file_path から直接マッピングされます | |
| read_only_udm.security_result.about.hostname | computer.hostname から直接マッピングされます | |
| read_only_udm.security_result.about.user.user_display_name | computer.user から直接マッピングされます | |
| read_only_udm.security_result.detection_fields.key | detection_id には「検出 ID」、error.error_code には「エラーコード」、error.description には「エラーの説明」、file.parent.disposition には「親の処分」、file.parent.file_name には「親のファイル名」、file.parent.identity.md5 には「親の MD5」、file.parent.identity.sha1 には「親の SHA1」、file.parent.identity.sha256 には「親の SHA256」に設定します。 | |
| read_only_udm.security_result.summary | event_type が「Threat Detected」、「Exploit Prevention」、「Executed malware」、「Potential Dropper Infection」、「Multiple Infected Files」、「Vulnerable Application Detected」のいずれかの場合、または security_result.severity が「HIGH」の場合は、event_type に設定します。 | |
| read_only_udm.target.asset.ip | computer.network_addresses.ip から直接マッピングされます | |
| read_only_udm.target.resource.attribute.labels.key | file.parent.disposition の場合は「親の処分」、file.parent.file_name の場合は「親のファイル名」、file.parent.identity.md5 の場合は「親の MD5」、file.parent.identity.sha1 の場合は「親の SHA1」、file.parent.identity.sha256 の場合は「親の SHA256」に設定します。 | |
| timestamp.seconds | 日付をタイムスタンプに変換した後、直接マッピングされます |
ご不明な点がございましたら、コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。