D3 Banking のログを収集する

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

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

このドキュメントでは、Google Cloud Storage V2 を使用して D3 Banking ログを Google Security Operations に取り込む方法について説明します。

D3 Banking(現在は NCR Voyix Digital Banking)は、オンライン バンキング オペレーション、ユーザー セッション、管理アクションの監査ログとトランザクション ログを生成するクラウド ホスト型のデジタル バンキング プラットフォームです。NCR Voyix Digital Banking REST API を使用すると、監査ログとイベントデータにプログラムでアクセスできます。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Cloud Storage API が有効になっている GCP プロジェクト
  • GCS バケットを作成および管理する権限
  • GCS バケットの IAM ポリシーを管理する権限
  • Cloud Run サービス、Pub/Sub トピック、Cloud Scheduler ジョブを作成する権限
  • 管理者ロールによる D3 Banking(NCR Voyix)プラットフォームへの特権アクセス
  • NCR Voyix Digital Banking API の OAuth2 認証情報(クライアント ID とクライアント シークレット)

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

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

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

D3 Banking API 認証情報を収集する

OAuth2 認証情報を取得する

  1. D3 Banking(NCR Voyix)管理ポータルにログインします。
  2. [管理] > [API 管理](または [設定] > [統合])に移動します。
  3. [アプリケーションを登録] または [API クライアントを作成] をクリックします。
  4. アプリケーションの名前を入力します(例: Google Security Operations Integration)。
  5. 次の認証情報をメモします。
    • クライアント ID: OAuth2 クライアント ID
    • クライアント シークレット: OAuth2 クライアント シークレット
  6. テナントの API ベース URL(https://api.d3banking.com/v1 やテナント固有の URL など)をメモします。

API アクセスを確認する

  • 統合に進む前に、認証情報をテストします。

    # Replace with your actual credentials
    CLIENT_ID="your-client-id"
    CLIENT_SECRET="your-client-secret"
    D3_BASE="https://api.d3banking.com/v1"
    
    # Obtain access token
    TOKEN=$(curl -s -X POST "${D3_BASE}/oauth/token" \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -d "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}" \
        | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
    
    # Test audit log access
    curl -s -H "Authorization: Bearer ${TOKEN}" \
        "${D3_BASE}/audit-logs?limit=1" | head -c 500
    

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

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

サービス アカウントを作成する

  1. GCP コンソールで、[IAM と管理>サービス アカウント] に移動します。
  2. [サービス アカウントを作成] をクリックします。
  3. 次の構成情報を指定します。
    • サービス アカウント名: 「d3-banking-logs-collector-sa」と入力します。
    • サービス アカウントの説明: Service account for Cloud Run function to collect D3 Banking 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 バケットに対する書き込み権限をサービス アカウントに付与します。

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

Pub/Sub トピックの作成

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

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

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

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

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

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

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

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

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

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

    1. [変数とシークレット] をクリックします。
    2. 環境変数ごとに [+ 変数を追加] をクリックします。
    変数名 値の例 説明
    GCS_BUCKET d3-banking-audit-logs GCS バケット名
    GCS_PREFIX d3banking ログファイルの接頭辞
    STATE_KEY d3banking/state.json 状態ファイルのパス
    D3_API_BASE https://api.d3banking.com/v1 D3 Banking API のベース URL
    D3_CLIENT_ID your-client-id OAuth2 クライアント ID
    D3_CLIENT_SECRET your-client-secret OAuth2 クライアント シークレット
    MAX_RECORDS 5000 実行あたりの最大レコード数
    PAGE_SIZE 1000 1 ページあたりのレコード数
    LOOKBACK_HOURS 24 初期ルックバック期間
  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', 'd3banking')
      STATE_KEY = os.environ.get('STATE_KEY', 'd3banking/state.json')
      D3_API_BASE = os.environ.get('D3_API_BASE', 'https://api.d3banking.com/v1')
      D3_CLIENT_ID = os.environ.get('D3_CLIENT_ID')
      D3_CLIENT_SECRET = os.environ.get('D3_CLIENT_SECRET')
      MAX_RECORDS = int(os.environ.get('MAX_RECORDS', '5000'))
      PAGE_SIZE = int(os.environ.get('PAGE_SIZE', '1000'))
      LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24'))
      
      def to_unix_millis(dt: datetime) -> int:
        """Convert datetime to Unix epoch milliseconds."""
        if dt.tzinfo is None:
          dt = dt.replace(tzinfo=timezone.utc)
        dt = dt.astimezone(timezone.utc)
        return int(dt.timestamp() * 1000)
      
      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)
      
      def get_access_token():
        """
        Obtain an OAuth2 access token using client credentials.
        """
        api_base = D3_API_BASE.rstrip('/')
        token_url = f"{api_base}/oauth/token"
      
        headers = {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Accept': 'application/json'
        }
      
        body = f"grant_type=client_credentials&client_id={D3_CLIENT_ID}&client_secret={D3_CLIENT_SECRET}"
      
        backoff = 1.0
        for attempt in range(3):
          response = http.request('POST', token_url, body=body, headers=headers)
      
          if response.status == 429:
            retry_after = int(response.headers.get('Retry-After', str(int(backoff))))
            print(f"Rate limited (429) on token request. Retrying after {retry_after}s...")
            time.sleep(retry_after)
            backoff = min(backoff * 2, 30.0)
            continue
      
          if response.status != 200:
            raise RuntimeError(f"Failed to get access token: {response.status} - {response.data.decode('utf-8')}")
      
          data = json.loads(response.data.decode('utf-8'))
          return data['access_token']
      
        raise RuntimeError("Failed to get access token after 3 retries")
      
      @functions_framework.cloud_event
      def main(cloud_event):
        """
        Cloud Run function triggered by Pub/Sub to fetch D3 Banking
        audit logs and write to GCS.
      
        Args:
          cloud_event: CloudEvent object containing Pub/Sub message
        """
      
        if not all([GCS_BUCKET, D3_CLIENT_ID, D3_CLIENT_SECRET]):
          print('Error: Missing required environment variables')
          return
      
        try:
          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(hours=LOOKBACK_HOURS)
      
          print(f"Fetching logs from {last_time.isoformat()} to {now.isoformat()}")
      
          # Get access token
          token = get_access_token()
      
          # Fetch audit logs
          records, newest_event_time = fetch_logs(
            token=token,
            start_time=last_time,
            end_time=now,
            page_size=PAGE_SIZE,
            max_records=MAX_RECORDS,
          )
      
          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}/logs_{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(token: str, start_time: datetime, end_time: datetime, page_size: int, max_records: int):
        """
        Fetch audit logs from NCR Voyix Digital Banking REST API
        with pagination and rate limiting.
      
        Args:
          token: OAuth2 access token
          start_time: Start time for log query
          end_time: End time for log query
          page_size: Number of records per page
          max_records: Maximum total records to fetch
      
        Returns:
          Tuple of (records list, newest_event_time ISO string)
        """
        api_base = D3_API_BASE.rstrip('/')
        endpoint = f"{api_base}/audit-logs"
      
        headers = {
          'Authorization': f'Bearer {token}',
          'Accept': 'application/json',
          'User-Agent': 'GoogleSecOps-D3BankingCollector/1.0'
        }
      
        records = []
        newest_time = None
        page_num = 0
        backoff = 1.0
        offset = 0
      
        while True:
          page_num += 1
      
          if len(records) >= max_records:
            print(f"Reached max_records limit ({max_records})")
            break
      
          # Build query parameters
          params = {
            'startDate': start_time.strftime('%Y-%m-%dT%H:%M:%SZ'),
            'endDate': end_time.strftime('%Y-%m-%dT%H:%M:%SZ'),
            'limit': min(page_size, max_records - len(records)),
            'offset': offset
          }
      
          query_string = '&'.join(f"{k}={v}" for k, v in params.items())
          url = f"{endpoint}?{query_string}"
      
          try:
            response = http.request(
              'GET',
              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}")
              return [], None
      
            data = json.loads(response.data.decode('utf-8'))
      
            page_results = data.get('auditLogs', data.get('events', 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_ts = event.get('timestamp') or event.get('created') or event.get('eventDate')
                if event_ts:
                  if isinstance(event_ts, (int, float)):
                    event_dt = datetime.fromtimestamp(event_ts / 1000, tz=timezone.utc)
                    event_time = event_dt.isoformat()
                  else:
                    event_time = str(event_ts)
                  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 more results
            offset += len(page_results)
            if len(page_results) < page_size:
              print("No more pages (partial page received)")
              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
      
  3. [デプロイ] をクリックして、関数を保存してデプロイします。

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

Cloud Scheduler ジョブを作成する

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

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

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

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

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

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

統合をテストする

  1. Cloud Scheduler コンソールで、ジョブを見つけます。
  2. [強制実行] をクリックして、ジョブを手動でトリガーします。
  3. 数秒待ちます。
  4. Cloud Run > [サービス] に移動します。
  5. d3-banking-logs-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://d3-banking-audit-logs/d3banking/logs_YYYYMMDD_HHMMSS.ndjson
    Successfully processed X records
    
  8. [Cloud Storage] > [バケット] に移動します。

  9. バケット名(d3-banking-audit-logs)をクリックします。

  10. d3banking/ フォルダに移動します。

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

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

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

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

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

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. このメールアドレスをコピーします。

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

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

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

      gs://d3-banking-audit-logs/d3banking/
      
      • 次のように置き換えます。
        • d3-banking-audit-logs: GCS バケット名。
        • d3banking: ログが保存されるオプションの接頭辞/フォルダパス(ルートの場合は空のままにします)。
    • 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 マッピング ロジック
USER_DEVICE_TOKEN_label additional.fields 統合済み
actingProfileType_label additional.fields 統合済み
companyId_label additional.fields 統合済み
component_label additional.fields 統合済み
deleted_label additional.fields 統合済み
enrolledInBiometricAuth_label additional.fields 統合済み
errors_label additional.fields 統合済み
eventClass_label additional.fields 統合済み
issue_label additional.fields 統合済み
q_status_label additional.fields 統合済み
settingsSecQuest_label additional.fields 統合済み
shadowAssistUserId_label additional.fields 統合済み
shadowAssistUsername_label additional.fields 統合済み
source_label additional.fields 統合済み
status_label additional.fields 統合済み
topic_label additional.fields 統合済み
mechanism extensions.auth.mechanism 統合済み
LOGIN_SESSION_TYPE extensions.auth.type 直接マッピングされます。
defined.message metadata.description 直接マッピングされます。
@timestamp metadata.event_timestamp ISO8601 として解析済み
event_type metadata.event_type 直接マッピングされます。
auditId metadata.product_event_type 直接マッピングされます。
messageId metadata.product_event_type 直接マッピングされます。
@version metadata.product_version 直接マッピングされます。
http network.http 名前変更済み/マッピング済み
sessionId network.session_id 直接マッピングされます。
clientIp principal.ip 統合済み
userClass principal.user.group_identifiers 統合済み
username principal.user.user_display_name 直接マッピングされます。
userId principal.user.userid 直接マッピングされます。
sec_result security_result 統合済み
application target.application 直接マッピングされます。
deviceUuid target.asset_id 直接マッピングされます。
subcomponent target.file.names 統合済み
producerHostname target.hostname 直接マッピングされます。
producerIp target.ip 統合済み
fullAddress target.location.name 直接マッピングされます。
resource target.resource 名前変更済み/マッピング済み
userId target.user.userid 直接マッピングされます。
なし extensions.auth.type 定数: AUTHTYPE_UNSPECIFIED
なし metadata.event_type 定数: GENERIC_EVENT
なし metadata.product_name 定数: D3_BANKING
なし metadata.vendor_name 定数: D3_BANKING

変更ログ

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

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