Cisco Secure Endpoint のログを収集する

パーサーのバージョン: 6.0

以下でサポートされています。

このドキュメントでは、Google Cloud Storage を使用して Cisco Secure Endpoint ログを Google Security Operations に取り込む方法について説明します。Cisco Secure Endpoint(以前の AMP for Endpoints)は、エンドポイント全体で高度な脅威の防止、検出、対応を提供するクラウドベースのエンドポイント セキュリティ ソリューションです。パーサーは、JSON 形式の未加工ログを UDM に準拠した構造化形式に変換し、ネストされた JSON オブジェクトからフィールドを抽出し、UDM スキーマにマッピングし、イベント カテゴリを特定し、重大度レベルを割り当て、統合イベント出力を生成します。また、特定の条件が満たされた場合はセキュリティ アラートにフラグを設定します。

始める前に

次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス
  • Cloud Storage API が有効になっている GCP プロジェクト
  • GCS バケットを作成および管理する権限
  • GCS バケットの IAM ポリシーを管理する権限
  • Cloud Run サービス、Pub/Sub トピック、Cloud Scheduler ジョブを作成する権限
  • 管理者権限を持つ Cisco Secure Endpoint コンソールへの特権アクセス

Cisco Secure Endpoint API の認証情報を収集する

  1. Cisco Secure Endpoint コンソールにログインします。
  2. [アカウント]> [組織の設定] に移動します。
  3. [機能] セクションで、[API 認証情報を構成] をクリックしてクライアント ID と API キーを生成します。
  4. [新しい API 認証情報] をクリックします。
  5. 次の構成情報を指定します。
    • アプリケーション名: 名前を入力します(例: Chronicle SecOps Integration)。
    • スコープ: 基本的なイベント ポーリングの場合は、[読み取り専用] を選択します。
  6. [作成] をクリックします。
  7. 次の詳細情報をコピーして安全な場所に保存します。

    • API クライアント ID
    • API キー
  8. リージョンに基づいて API ベース URL を決定します。

    リージョン API ベース URL
    北アメリカ https://api.amp.cisco.com
    ヨーロッパ https://api.eu.amp.cisco.com
    アジア太平洋、日本、中国 https://api.apjc.amp.cisco.com

権限を確認する

アカウントに必要な権限があることを確認するには:

  1. Cisco Secure Endpoint コンソールにログインします。
  2. [アカウント]> [組織の設定] に移動します。
  3. [機能] セクションに [API 認証情報を構成する] オプションが表示されている場合は、必要な権限があります。
  4. このオプションが表示されない場合は、管理者にお問い合わせのうえ、管理者アクセス権限を付与してもらってください。

テスト 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"
    

成功したレスポンスは、イベント オブジェクトの配列を含む JSON 本文とともに HTTP 200 を返します。

Google Cloud Storage バケットを作成する

  1. Google Cloud コンソールに移動します。
  2. プロジェクトを選択するか、新しいプロジェクトを作成します。
  3. ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
  4. [バケットを作成] をクリックします。
  5. 次の構成情報を提供してください。

    設定 値
    バケットに名前を付ける グローバルに一意の名前(cisco-amp-logs など)を入力します。
    ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。
    ロケーション 場所を選択します(例: us-central1)。
    ストレージ クラス Standard(アクセス頻度の高いログにおすすめ)
    アクセス制御 均一(推奨)
    保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする
  6. [作成] をクリックします。

Cloud Run functions のサービス アカウントを作成する

Cloud Run functions には、GCS バケットへの書き込み権限があり、Pub/Sub によって呼び出されるサービス アカウントが必要です。

サービス アカウントの作成

  1. GCP コンソールで、[IAM と管理>サービス アカウント] に移動します。
  2. [サービス アカウントを作成] をクリックします。
  3. 次の構成情報を指定します。
    • サービス アカウント名: 「cisco-amp-collector-sa」と入力します。
    • サービス アカウントの説明: 「Service account for Cloud Run function to collect Cisco Secure Endpoint logs」と入力します。
  4. [作成して続行] をクリックします。
  5. [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次のロールを追加します。
    1. [ロールを選択] をクリックします。
    2. [ストレージ オブジェクト管理者] を検索して選択します。
    3. [+ 別のロールを追加] をクリックします。
    4. [Cloud Run 起動元] を検索して選択します。
    5. [+ 別のロールを追加] をクリックします。
    6. [Cloud Functions 起動元] を検索して選択します。
  6. [続行] をクリックします。
  7. [完了] をクリックします。

これらのロールは、次の操作に必要です。

  • Storage オブジェクト管理者: ログを GCS バケットに書き込み、状態ファイルを管理する
  • Cloud Run 起動元: Pub/Sub が関数を呼び出すことを許可します。
  • Cloud Functions 起動元: 関数の呼び出しを許可する

GCS バケットに対する IAM 権限を付与する

GCS バケットに対する書き込み権限をサービス アカウント(cisco-amp-collector-sa)に付与します。

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: サービス アカウントのメールアドレス(例: cisco-amp-collector-sa@PROJECT_ID.iam.gserviceaccount.com)を入力します。
    • ロールを割り当てる: [ストレージ オブジェクト管理者] を選択します。
  6. [保存] をクリックします。

Pub/Sub トピックの作成

Cloud Scheduler がパブリッシュし、Cloud Run 関数がサブスクライブする Pub/Sub トピックを作成します。

  1. GCP Console で、[Pub/Sub> トピック] に移動します。
  2. [トピックを作成] をクリックします。
  3. 次の構成情報を指定します。
    • トピック ID: 「cisco-amp-events-trigger」と入力します。
    • その他の設定はデフォルトのままにします。
  4. [作成] をクリックします。

ログを収集する Cloud Run 関数を作成する

Cloud Run 関数は、Cloud Scheduler からの Pub/Sub メッセージによってトリガーされ、Cisco Secure Endpoint API からログを取得して GCS に書き込みます。

  1. GCP Console で、[Cloud Run] に移動します。
  2. [サービスを作成] をクリックします。
  3. [関数] を選択します(インライン エディタを使用して関数を作成します)。
  4. [構成] セクションで、次の構成の詳細を指定します。

    設定 値
    サービス名 cisco-amp-events-collector
    リージョン GCS バケットと一致するリージョンを選択します(例: us-central1)。
    ランタイム [Python 3.12] 以降を選択します。
  5. [トリガー(省略可)] セクションで、次の操作を行います。

    1. [+ トリガーを追加] をクリックします。
    2. [Cloud Pub/Sub] を選択します。
    3. [Cloud Pub/Sub トピックを選択してください] で、Pub/Sub トピック(cisco-amp-events-trigger)を選択します。
    4. [保存] をクリックします。
  6. [認証] セクションで、次の操作を行います。

    1. [認証が必要] を選択します。
    2. Identity and Access Management(IAM)を確認します。
  7. 下にスクロールして、[コンテナ、ネットワーキング、セキュリティ] を開きます。

  8. [セキュリティ] タブに移動します。

    • サービス アカウント: サービス アカウント(cisco-amp-collector-sa)を選択します。
  9. [コンテナ] タブに移動します。

    1. [変数とシークレット] をクリックします。
    2. 環境変数ごとに [+ 変数を追加] をクリックします。
    変数名 値の例 説明
    GCS_BUCKET cisco-amp-logs GCS バケット名
    GCS_PREFIX cisco-amp-events/ ログファイルの接頭辞
    STATE_KEY cisco-amp-events/state.json 状態ファイルのパス
    API_BASE https://api.amp.cisco.com API ベース URL
    AMP_CLIENT_ID your-client-id API クライアント ID
    AMP_API_KEY your-api-key API キー
    PAGE_SIZE 500 1 ページあたりのレコード数
    MAX_PAGES 10 取得する最大ページ数
  10. [変数とシークレット] セクションで、[リクエスト] まで下にスクロールします。

    • リクエストのタイムアウト: 600 秒(10 分)を入力します。
  11. [設定] タブに移動します。

    • [リソース] セクションで次の操作を行います。
      • メモリ: 512 MiB 以上を選択します。
      • CPU: [1] を選択します。
  12. [リビジョン スケーリング] セクションで、次の操作を行います。

    • [インスタンスの最小数] に「0」と入力します。
    • インスタンスの最大数: 100 と入力します(または、想定される負荷に基づいて調整します)。
  13. [作成] をクリックします。

  14. サービスが作成されるまで待ちます(1 ~ 2 分)。

  15. サービスを作成すると、インライン コードエディタが自動的に開きます。

関数コードを追加する

  1. [エントリ ポイント] フィールドに「main」と入力します。
  2. インライン コードエディタで、次の 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 Secure Endpoint 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 Secure Endpoint v1 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',
            'Accept-Encoding': 'gzip',
            '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()
        if not start_date_str.endswith('Z'):
            start_date_str = start_date_str + 'Z' if start_date_str.endswith('+00:00') is False else start_date_str.replace('+00:00', 'Z')
        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
    
    • requirements.txt:
    functions-framework==3.*
    google-cloud-storage==2.*
    urllib3>=2.0.0
    
  3. [デプロイ] をクリックして、関数を保存してデプロイします。

  4. デプロイが完了するまで待ちます(2 ~ 3 分)。

Cloud Scheduler ジョブの作成

Cloud Scheduler は、定期的に Pub/Sub トピックにメッセージをパブリッシュし、Cloud Run functions の関数をトリガーします。

  1. GCP Console で、[Cloud Scheduler] に移動します。
  2. [ジョブを作成] をクリックします。
  3. 次の構成情報を提供してください。

    設定 値
    名前 cisco-amp-events-collector-hourly
    リージョン Cloud Run functions と同じリージョンを選択する
    周波数 0 * * * *(1 時間ごと、毎正時)
    タイムゾーン タイムゾーンを選択(UTC を推奨)
    ターゲット タイプ Pub/Sub
    トピック Pub/Sub トピック(cisco-amp-events-trigger)を選択します。
    メッセージ本文 {}(空の JSON オブジェクト)
  4. [作成] をクリックします。

スケジュールの頻度オプション

ログの量とレイテンシの要件に基づいて頻度を選択します。

頻度 CRON 式 ユースケース
5 分おき */5 * * * * 大容量、低レイテンシ
15 分ごと */15 * * * * 検索量が普通
1 時間ごと 0 * * * * 標準(推奨)
6 時間ごと 0 */6 * * * 少量、バッチ処理
毎日 0 0 * * * 過去のデータの収集

統合をテストする

  1. Cloud Scheduler コンソールで、ジョブを見つけます。
  2. [強制実行] をクリックして、ジョブを手動でトリガーします。
  3. 数秒待ちます。
  4. Cloud Run > [サービス] に移動します。
  5. 関数名(cisco-amp-events-collector)をクリックします。
  6. [ログ] タブをクリックします。
  7. 関数が正常に実行されたことを確認します。以下のものを探します。

    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
    
  8. [Cloud Storage] > [バケット] に移動します。

  9. バケット名をクリックします。

  10. 接頭辞フォルダ(cisco-amp-events/)に移動します。

  11. 現在のタイムスタンプで新しい .ndjson ファイルが作成されたことを確認します。

ログにエラーが表示された場合:

  • HTTP 401: 環境変数で API 認証情報を確認する
  • HTTP 403: アカウントに必要な権限があることを確認する
  • HTTP 429: レート制限 - 関数はバックオフで自動的に再試行されます
  • 環境変数が不足している: 必要な変数がすべて設定されていることを確認します。

Google SecOps サービス アカウントを取得する

Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。

Cisco Secure Endpoint のログを取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Cisco Secure Endpoint logs)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [Log type] として [Cisco AMP] を選択します。
  7. [サービス アカウントを取得する] をクリックします。一意のサービス アカウントのメールアドレスが表示されます(例:)。

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. このメールアドレスをコピーします。次のステップでこれを使用します。

  9. [次へ] をクリックします。

  10. 次の入力パラメータの値を指定します。

    • ストレージ バケットの URL: 接頭辞パスを含む GCS バケット URI を入力します。

      gs://cisco-amp-logs/cisco-amp-events/
      
      • 次のように置き換えます。
        • cisco-amp-logs: GCS バケット名。
        • cisco-amp-events/: ログが保存される接頭辞/フォルダパス。
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
      • 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
    • ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。

    • アセットの名前空間: アセットの名前空間。

    • Ingestion labels: このフィードのイベントに適用されるラベル。

  11. [次へ] をクリックします。

  12. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

Google SecOps サービス アカウントに IAM 権限を付与する

Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者のロールが必要です。

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
    • ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
  6. [保存] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
アクティブ read_only_udm.principal.asset.active 未加工ログの computer.active の値は、principal.asset.active フィールドにマッピングされます。
connector_guid read_only_udm.principal.asset.uuid 未加工ログの computer.connector_guid の値は、principal.asset.uuid フィールドにマッピングされます。
日付 read_only_udm.metadata.event_timestamp.seconds 未加工ログの date の値はタイムスタンプに変換され、metadata.event_timestamp.seconds フィールドにマッピングされます。
検出 read_only_udm.security_result.threat_name 未加工ログの detection の値は、security_result.threat_name フィールドにマッピングされます。
detection_id read_only_udm.security_result.detection_fields.value 未加工ログの detection_id の値は、キー「Detection ID」を持つ security_result.detection_fields にマッピングされます。
error.error_code read_only_udm.security_result.detection_fields.value 未加工ログの error.error_code の値は、キー「Error Code」を持つ security_result.detection_fields にマッピングされます。
error.description read_only_udm.security_result.detection_fields.value 未加工ログの error.description の値は、キー「Error Description」を持つ security_result.detection_fields にマッピングされます。
event_type read_only_udm.metadata.product_event_type 未加工ログの event_type の値は、metadata.product_event_type フィールドにマッピングされます。
event_type_id read_only_udm.metadata.product_log_id 未加工ログの event_type_id の値は、metadata.product_log_id フィールドにマッピングされます。
external_ip read_only_udm.principal.asset.external_ip 未加工ログの computer.external_ip の値は、principal.asset.external_ip フィールドにマッピングされます。
file.disposition read_only_udm.security_result.description 未加工ログの file.disposition の値は、security_result.description フィールドにマッピングされます。
file.file_name read_only_udm.target.file.names 未加工ログの file.file_name の値は、target.file.names フィールドにマッピングされます。
file.file_path read_only_udm.target.file.full_path 未加工ログの file.file_path の値は、target.file.full_path フィールドにマッピングされます。
file.identity.md5 read_only_udm.target.file.md5 未加工ログの file.identity.md5 の値は、target.file.md5 フィールドにマッピングされます。
file.identity.sha1 read_only_udm.target.file.sha1 未加工ログの file.identity.sha1 の値は、target.file.sha1 フィールドにマッピングされます。
file.identity.sha256 read_only_udm.target.file.sha256 未加工ログの file.identity.sha256 の値は、target.file.sha256 フィールドにマッピングされます。
file.parent.disposition read_only_udm.target.resource.attribute.labels.value 未加工ログの file.parent.disposition の値は、キー「Parent Disposition」を持つ target.resource.attribute.labels にマッピングされます。
file.parent.file_name read_only_udm.target.resource.attribute.labels.value 未加工ログの file.parent.file_name の値は、キー「Parent File Name」を持つ target.resource.attribute.labels にマッピングされます。
file.parent.identity.md5 read_only_udm.target.resource.attribute.labels.value 未加工ログの file.parent.identity.md5 の値は、キー「Parent MD5」を持つ target.resource.attribute.labels にマッピングされます。
file.parent.identity.sha1 read_only_udm.target.resource.attribute.labels.value 未加工ログの file.parent.identity.sha1 の値は、キー「Parent SHA1」を持つ target.resource.attribute.labels にマッピングされます。
file.parent.identity.sha256 read_only_udm.target.resource.attribute.labels.value 未加工ログの file.parent.identity.sha256 の値は、キー「Parent SHA256」を持つ target.resource.attribute.labels にマッピングされます。
file.parent.process_id read_only_udm.target.process.parent_process.pid 未加工ログの file.parent.process_id の値は、target.process.parent_process.pid フィールドにマッピングされます。
hostname read_only_udm.principal.asset.hostname 未加工ログの computer.hostname の値は、principal.asset.hostname フィールドにマッピングされます。
ip read_only_udm.principal.ip 未加工ログの computer.network_addresses.ip の値は、principal.ip フィールドにマッピングされます。
mac read_only_udm.principal.mac 未加工ログの computer.network_addresses.mac の値は、principal.mac フィールドにマッピングされます。
重要度 read_only_udm.security_result.severity 未加工ログの severity の値によって値が決まります。「Medium」の場合は、「MEDIUM」に設定します。「High」または「Critical」の場合は、「HIGH」に設定します。「Low」の場合は、「LOW」に設定します。それ以外の場合は、「UNKNOWN_SEVERITY」に設定されます。
timestamp read_only_udm.metadata.event_timestamp.seconds 未加工ログの timestamp の値はタイムスタンプに変換され、metadata.event_timestamp.seconds フィールドにマッピングされます。
ユーザー read_only_udm.target.user.user_display_name 未加工ログの computer.user の値は、target.user.user_display_name フィールドにマッピングされます。
vulnerabilities.cve read_only_udm.extensions.vulns.vulnerabilities.cve_id 未加工ログの vulnerabilities.cve の値は、extensions.vulns.vulnerabilities.cve_id フィールドにマッピングされます。
vulnerabilities.name read_only_udm.extensions.vulns.vulnerabilities.name 未加工ログの vulnerabilities.name の値は、extensions.vulns.vulnerabilities.name フィールドにマッピングされます。
vulnerabilities.score read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score 未加工ログの vulnerabilities.score の値は浮動小数点数に変換され、extensions.vulns.vulnerabilities.cvss_base_score フィールドにマッピングされます。
vulnerabilities.url read_only_udm.extensions.vulns.vulnerabilities.vendor_knowledge_base_article_id 未加工ログの vulnerabilities.url の値は、extensions.vulns.vulnerabilities.vendor_knowledge_base_article_id フィールドにマッピングされます。
vulnerabilities.version read_only_udm.extensions.vulns.vulnerabilities.cvss_version 未加工ログの vulnerabilities.version の値は、extensions.vulns.vulnerabilities.cvss_version フィールドにマッピングされます。
なし read_only_udm.metadata.event_type 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」のいずれかの場合、または 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.summary event_type が「Threat Detected」、「Exploit Prevention」、「Executed malware」、「Potential Dropper Infection」、「Multiple Infected Files」、「Vulnerable Application Detected」のいずれかである場合、または security_result.severity が「HIGH」の場合、event_type の値に設定します。
なし 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 に設定します。
Compressed_sha256 additional.fields 変更履歴からマッピング
analysis_action", "analysis_score", "analysis_status", "verdict_num", and "verdict_from security_result.detection_fields 変更履歴からマッピング
category security_result.category_details 変更履歴からマッピング
file_type target.file.mime_type 変更履歴からマッピング
upload_reason metadata.description 変更履歴からマッピング
active_connections","from","is_slow","instance_id","malwareverdict" and ,"verdict_str additional.fields 変更履歴からマッピング
Time metadata.event_timestamp 変更履歴からマッピング
file_extension arget.resource.attribute.labels 変更履歴からマッピング
filemime target.file.mime_type 変更履歴からマッピング
filename target.file.full_path 変更履歴からマッピング
host principal.hostname 変更履歴からマッピング
length_file principal.resource.attribute.labels 変更履歴からマッピング
uploadreason security_result.description 変更履歴からマッピング
ssl_bytes network.sent_bytes 変更履歴からマッピング
socket_bytes network.received_bytes 変更履歴からマッピング
file.disposition", "error.error_code", and "error.description security_result.description 変更履歴からマッピング
file.parent.disposition", "file.parent.file_name", "file.parent.identity.md5", "file.parent.identity.sha1", and "file.parent.identity.sha256 target.resource.attribute.labels 変更履歴からマッピング

変更ログ

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。