DomainTools Iris Investigate の結果を収集する

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

このドキュメントでは、Google Cloud Storage を使用して DomainTools Iris Investigate の結果を Google Security Operations に取り込む方法について説明します。パーサーは、DomainTools の Iris API からの未加工の JSON データを、Google SecOps の Unified Data Model(UDM)に準拠した構造化形式に変換します。ドメインの詳細、連絡先情報、セキュリティ リスク、SSL 証明書、その他の関連属性に関する情報を抽出し、対応する UDM フィールドにマッピングして、一貫した分析と脅威インテリジェンスを実現します。

始める前に

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

  • Google SecOps インスタンス
  • DomainTools エンタープライズ アカウントへの特権アクセス(Iris Investigate への API アクセス)
  • Cloud Storage API が有効になっている GCP プロジェクト
  • GCS バケットを作成および管理する権限
  • GCS バケットの IAM ポリシーを管理する権限
  • Cloud Run サービス、Pub/Sub トピック、Cloud Scheduler ジョブを作成する権限

DomainTools API キーとエンドポイントを取得する

  1. DomainTools API ダッシュボードにログインします(API キーをリセットできるのは API 所有者アカウントのみです)。
  2. [My Account] セクションの [Account Summary] タブにある [View API Dashboard] リンクを選択します。
  3. [API Username] セクションに移動して、ユーザー名を取得します。
  4. 同じタブで、[API キー] を見つけます。
  5. キーをコピーして安全な場所に保存します。新しいキーが必要な場合は、[API キーをリセット] を選択します。

  6. Iris Investigate エンドポイント(https://api.domaintools.com/v1/iris-investigate/)をメモします。

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

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

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

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

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

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

  1. GCP Console で、[IAM と管理>サービス アカウント] に移動します。
  2. [サービス アカウントを作成] をクリックします。
  3. 次の構成の詳細を指定します。
    • サービス アカウント名: 「domaintools-iris-collector-sa」と入力します。
    • サービス アカウントの説明: 「Service account for Cloud Run function to collect DomainTools Iris Investigate 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. バケット名をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成の詳細を指定します。
    • プリンシパルを追加: サービス アカウントのメールアドレス(例: domaintools-iris-collector-sa@PROJECT_ID.iam.gserviceaccount.com)を入力します。
    • ロールを割り当てる: [Storage オブジェクト管理者] を選択します。
  6. [保存] をクリックします。

Pub/Sub トピックの作成

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

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

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

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

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

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

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

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

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

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

    1. [変数とシークレット] をクリックします。
    2. 環境変数ごとに [+ 変数を追加] をクリックします。
    変数名 値の例 説明
    GCS_BUCKET domaintools-iris データが保存される GCS バケットの名前。
    GCS_PREFIX domaintools/iris/ オブジェクトの省略可能な GCS 接頭辞(サブフォルダ)。
    STATE_KEY domaintools/iris/state.json 状態/チェックポイント ファイルのキー(省略可)。
    DT_API_KEY DT-XXXXXXXXXXXXXXXXXXXX DomainTools API キー。
    USE_MODE HASH 使用するモード(HASHDOMAINSQUERY のいずれか 1 つ)を選択します。
    SEARCH_HASHES hash1;hash2;hash3 USE_MODE=HASH の場合は必須。Iris UI からの保存済み検索ハッシュのセミコロン区切りリスト。
    DOMAINS example.com;domaintools.com USE_MODE=DOMAINS の場合は必須。セミコロンで区切られたドメインのリスト。
    QUERY_LIST ip=1.1.1.1;ip=8.8.8.8;domain=example.org USE_MODE=QUERY の場合は必須。セミコロンで区切られたクエリ文字列のリスト(k=v&k2=v2)。
    PAGE_SIZE 500 1 ページあたりの行数(デフォルトは 500)。
    MAX_PAGES 20 リクエストあたりの最大ページ数。
  10. [変数とシークレット] セクションで、[リクエスト] まで下にスクロールします。

    • リクエスト タイムアウト: 900 秒(15 分)を入力します。
  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 urllib.parse
    from urllib.request import Request, urlopen
    from urllib.error import HTTPError
    import time
    from datetime import datetime, timezone
    
    # Initialize Storage client
    storage_client = storage.Client()
    
    # Environment variables
    GCS_BUCKET = os.environ.get("GCS_BUCKET", "").strip()
    GCS_PREFIX = os.environ.get("GCS_PREFIX", "domaintools/iris/").strip()
    STATE_KEY = os.environ.get("STATE_KEY", "domaintools/iris/state.json").strip()
    DT_API_KEY = os.environ.get("DT_API_KEY", "").strip()
    USE_MODE = os.environ.get("USE_MODE", "HASH").strip().upper()
    SEARCH_HASHES = [h.strip() for h in os.environ.get("SEARCH_HASHES", "").split(";") if h.strip()]
    DOMAINS = [d.strip() for d in os.environ.get("DOMAINS", "").split(";") if d.strip()]
    QUERY_LIST = [q.strip() for q in os.environ.get("QUERY_LIST", "").split(";") if q.strip()]
    PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "500"))
    MAX_PAGES = int(os.environ.get("MAX_PAGES", "20"))
    USE_NEXT = os.environ.get("USE_NEXT", "true").lower() == "true"
    HTTP_TIMEOUT = int(os.environ.get("HTTP_TIMEOUT", "60"))
    RETRIES = int(os.environ.get("HTTP_RETRIES", "2"))
    
    BASE_URL = "https://api.domaintools.com/v1/iris-investigate/"
    HDRS = {
        "X-Api-Key": DT_API_KEY,
        "Accept": "application/json",
    }
    
    def _http_post(url: str, body: dict) -> dict:
        """Make HTTP POST request with form-encoded body."""
        req = Request(url, method="POST")
        for k, v in HDRS.items():
            req.add_header(k, v)
        req.add_header("Content-Type", "application/x-www-form-urlencoded")
    
        encoded_body = urllib.parse.urlencode(body, doseq=True).encode('utf-8')
    
        attempt = 0
        while True:
            try:
                with urlopen(req, data=encoded_body, timeout=HTTP_TIMEOUT) as r:
                    return json.loads(r.read().decode("utf-8"))
            except HTTPError as e:
                if e.code in (429, 500, 502, 503, 504) and attempt < RETRIES:
                    delay = int(e.headers.get("Retry-After", "2"))
                    time.sleep(max(1, delay))
                    attempt += 1
                    continue
                raise
    
    def _write_page(bucket, obj: dict, label: str, page: int) -> str:
        ts = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime())
        key = f"{GCS_PREFIX.rstrip('/')}/{ts}-{label}-p{page:05d}.json"
        blob = bucket.blob(key)
        blob.upload_from_string(
            json.dumps(obj, separators=(",", ":")),
            content_type="application/json"
        )
        return key
    
    def _first_page_params() -> dict:
        params = {"page_size": str(PAGE_SIZE)}
        if USE_NEXT:
            params["next"] = "true"
        return params
    
    def _paginate(bucket, label: str, params: dict) -> tuple:
        pages = 0
        total = 0
    
        while pages < MAX_PAGES:
            data = _http_post(BASE_URL, params)
            _write_page(bucket, data, label, pages)
            resp = data.get("response") or {}
            results = resp.get("results") or []
            total += len(results)
            pages += 1
    
            next_url = resp.get("next") if isinstance(resp, dict) else None
            if next_url:
                parsed = urllib.parse.urlparse(next_url)
                params = dict(urllib.parse.parse_qsl(parsed.query))
                continue
    
            if resp.get("has_more_results") and resp.get("position"):
                base = _first_page_params()
                base.pop("next", None)
                base["position"] = resp["position"]
                params = base
                continue
            break
        return pages, total
    
    def run_hashes(bucket, hashes: list) -> dict:
        agg_pages = agg_results = 0
        for h in hashes:
            params = _first_page_params()
            params["search_hash"] = h
            p, r = _paginate(bucket, f"hash-{h}", params)
            agg_pages += p
            agg_results += r
        return {"pages": agg_pages, "results": agg_results}
    
    def run_domains(bucket, domains: list) -> dict:
        agg_pages = agg_results = 0
        for d in domains:
            params = _first_page_params()
            params["domain"] = d
            p, r = _paginate(bucket, f"domain-{d}", params)
            agg_pages += p
            agg_results += r
        return {"pages": agg_pages, "results": agg_results}
    
    def run_queries(bucket, queries: list) -> dict:
        agg_pages = agg_results = 0
        for q in queries:
            base = _first_page_params()
            for k, v in urllib.parse.parse_qsl(q, keep_blank_values=True):
                base.setdefault(k, v)
            p, r = _paginate(bucket, f"query-{q.replace('=', '-')}", base)
            agg_pages += p
            agg_results += r
        return {"pages": agg_pages, "results": agg_results}
    
    @functions_framework.cloud_event
    def main(cloud_event):
        """
        Cloud Run function triggered by Pub/Sub to fetch DomainTools Iris Investigate results and write to GCS.
    
        Args:
            cloud_event: CloudEvent object containing Pub/Sub message
        """
    
        if not GCS_BUCKET:
            print("Error: GCS_BUCKET environment variable not set")
            return
    
        try:
            bucket = storage_client.bucket(GCS_BUCKET)
    
            if USE_MODE == "HASH" and SEARCH_HASHES:
                res = run_hashes(bucket, SEARCH_HASHES)
            elif USE_MODE == "DOMAINS" and DOMAINS:
                res = run_domains(bucket, DOMAINS)
            elif USE_MODE == "QUERY" and QUERY_LIST:
                res = run_queries(bucket, QUERY_LIST)
            else:
                raise ValueError(
                    "Invalid USE_MODE or missing parameters. Set USE_MODE to HASH | DOMAINS | QUERY "
                    "and provide SEARCH_HASHES | DOMAINS | QUERY_LIST accordingly."
                )
    
            print(f"Successfully processed: {json.dumps({'ok': True, 'mode': USE_MODE, **res})}")
    
        except Exception as e:
            print(f"Error processing DomainTools Iris data: {str(e)}")
            raise
    
    • 2 つ目のファイル: requirements.txt:
    functions-framework==3.*
    google-cloud-storage==2.*
    
  3. [デプロイ] をクリックして、関数を保存してデプロイします。

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

Cloud Scheduler ジョブの作成

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

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

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

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

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

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

統合をテストする

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

    Successfully processed: {"ok": true, "mode": "HASH", "pages": X, "results": Y}
    
  8. [Cloud Storage] > [バケット] に移動します。

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

  10. プレフィックス フォルダ(domaintools/iris/)に移動します。

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

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

  • HTTP 401: 環境変数で DomainTools API の認証情報を確認する
  • HTTP 403: アカウントに Iris Investigate API に必要な権限があることを確認する
  • HTTP 429: レート制限 - 関数はバックオフで自動的に再試行されます
  • 環境変数が不足している: 必要な変数がすべて設定されていることを確認します
  • 無効な USE_MODE: USE_MODE が HASH、DOMAINS、QUERY のいずれかに設定され、対応するパラメータが指定されていることを確認します。

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

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

サービス アカウントのメールアドレスを取得する

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

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

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

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

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

DomainTools Iris Investigate の結果を取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: DomainTools Iris Investigate)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [ログタイプ] として [DomainTools Threat Intelligence] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。

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

      gs://domaintools-iris/domaintools/iris/
      
      • 次のように置き換えます。

        • domaintools-iris: GCS バケット名。
        • domaintools/iris/: ログが保存されるオプションの接頭辞/フォルダパス(ルートの場合は空のままにします)。
      • 例:

        • ルートバケット: gs://domaintools-iris/
        • 接頭辞あり: gs://domaintools-iris/domaintools/iris/
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
      • 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。

    • ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。

    • アセットの Namespace: domaintools.threat_intel

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

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

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

UDM マッピング テーブル

ログフィールド UDM マッピング 論理
アクティブ principal.domain.status 未加工ログのアクティブ フィールドから直接マッピングされます。
additional_whois_email.[].value about.labels.additional_whois_email additional_whois_email 配列から抽出され、about オブジェクトのラベルとして追加されます。
adsense.value about.labels.adsense adsense.value から抽出され、about オブジェクトのラベルとして追加されます。
admin_contact.city.value principal.domain.admin.office_address.city 未加工ログの admin_contact.city.value フィールドから直接マッピングされます。
admin_contact.country.value principal.domain.admin.office_address.country_or_region 未加工ログの admin_contact.country.value フィールドから直接マッピングされます。
admin_contact.email.[].value principal.domain.admin.email_addresses admin_contact.email 配列から抽出され、email_addresses フィールドに追加されました。
admin_contact.fax.value principal.domain.admin.attribute.labels.fax admin_contact.fax.value から抽出され、admin 属性のキー「fax」のラベルとして追加されます。
admin_contact.name.value principal.domain.admin.user_display_name 未加工ログの admin_contact.name.value フィールドから直接マッピングされます。
admin_contact.org.value principal.domain.admin.company_name 未加工ログの admin_contact.org.value フィールドから直接マッピングされます。
admin_contact.phone.value principal.domain.admin.phone_numbers 未加工ログの admin_contact.phone.value フィールドから直接マッピングされます。
admin_contact.postal.value principal.domain.admin.attribute.labels.postal admin_contact.postal.value から抽出され、admin 属性のキー「postal」のラベルとして追加されます。
admin_contact.state.value principal.domain.admin.office_address.state 未加工ログの admin_contact.state.value フィールドから直接マッピングされます。
admin_contact.street.value principal.domain.admin.office_address.name 未加工ログの admin_contact.street.value フィールドから直接マッピングされます。
alexa about.labels.alexa 未加工ログの alexa フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
baidu_codes.[].value about.labels.baidu_codes baidu_codes 配列から抽出され、about オブジェクトのラベルとして追加されます。
billing_contact.city.value principal.domain.billing.office_address.city 未加工ログの billing_contact.city.value フィールドから直接マッピングされます。
billing_contact.country.value principal.domain.billing.office_address.country_or_region 未加工ログの billing_contact.country.value フィールドから直接マッピングされます。
billing_contact.email.[].value principal.domain.billing.email_addresses billing_contact.email 配列から抽出され、email_addresses フィールドに追加されました。
billing_contact.fax.value principal.domain.billing.attribute.labels.fax billing_contact.fax.value から抽出され、請求先属性のキー「fax」のラベルとして追加されます。
billing_contact.name.value principal.domain.billing.user_display_name 未加工ログの billing_contact.name.value フィールドから直接マッピングされます。
billing_contact.org.value principal.domain.billing.company_name 未加工ログの billing_contact.org.value フィールドから直接マッピングされます。
billing_contact.phone.value principal.domain.billing.phone_numbers 未加工ログの billing_contact.phone.value フィールドから直接マッピングされます。
billing_contact.postal.value principal.domain.billing.attribute.labels.postal billing_contact.postal.value から抽出され、請求先属性のキー「postal」のラベルとして追加されます。
billing_contact.state.value principal.domain.billing.office_address.state 未加工ログの billing_contact.state.value フィールドから直接マッピングされます。
billing_contact.street.value principal.domain.billing.office_address.name 未加工ログの billing_contact.street.value フィールドから直接マッピングされます。
create_date.value principal.domain.creation_time 未加工ログの create_date.value フィールドからタイムスタンプ形式に変換されます。
data_updated_timestamp principal.domain.audit_update_time 未加工ログの data_updated_timestamp フィールドからタイムスタンプ形式に変換されます。
ドメイン principal.hostname 未加工ログのドメイン フィールドから直接マッピングされます。
domain_risk.components.[].evidence security_result.detection_fields.evidence domain_risk.components.[].evidence 配列から抽出され、security_result オブジェクトのキー「evidence」を持つ検出フィールドとして追加されます。
domain_risk.components.[].name security_result.category_details 未加工ログの domain_risk.components.[].name フィールドから直接マッピングされます。
domain_risk.components.[].risk_score security_result.risk_score 未加工ログの domain_risk.components.[].risk_score フィールドから直接マッピングされます。
domain_risk.components.[].threats security_result.threat_name domain_risk.components.[].threats 配列の最初の要素は security_result.threat_name にマッピングされます。
domain_risk.components.[].threats security_result.detection_fields.threats domain_risk.components.[].threats 配列の残りの要素は、security_result オブジェクトのキー「threats」を持つ検出フィールドとして追加されます。
domain_risk.risk_score security_result.risk_score 未加工ログの domain_risk.risk_score フィールドから直接マッピングされます。
email_domain.[].value about.labels.email_domain email_domain 配列から抽出され、about オブジェクトのラベルとして追加されます。
expiration_date.value principal.domain.expiration_time 未加工ログの expiration_date.value フィールドからタイムスタンプ形式に変換されます。
fb_codes.[].value about.labels.fb_codes fb_codes 配列から抽出され、about オブジェクトのラベルとして追加されます。
first_seen.value principal.domain.first_seen_time 未加工ログの first_seen.value フィールドからタイムスタンプ形式に変換されます。
ga4.[].value about.labels.ga4 ga4 配列から抽出され、about オブジェクトのラベルとして追加されます。
google_analytics.value about.labels.google_analytics google_analytics.value から抽出され、about オブジェクトのラベルとして追加されます。
gtm_codes.[].value about.labels.gtm_codes gtm_codes 配列から抽出され、about オブジェクトのラベルとして追加されます。
hotjar_codes.[].value about.labels.hotjar_codes hotjar_codes 配列から抽出され、about オブジェクトのラベルとして追加されます。
ip.[].address.value principal.ip ip 配列の最初の要素は principal.ip にマッピングされます。
ip.[].address.value about.labels.ip_address ip 配列の残りの要素は、about オブジェクトのキー「ip_address」のラベルとして追加されます。
ip.[].asn.[].value network.asn 最初の ip.asn 配列の最初の要素は network.asn にマッピングされます。
ip.[].asn.[].value about.labels.asn ip.asn 配列の残りの要素は、about オブジェクトのキー「asn」のラベルとして追加されます。
ip.[].country_code.value principal.location.country_or_region ip 配列の最初の要素の country_code.value は、principal.location.country_or_region にマッピングされます。
ip.[].country_code.value about.location.country_or_region ip 配列の残りの要素の country_code.value は、about.location.country_or_region にマッピングされます。
ip.[].isp.value principal.labels.isp ip 配列の最初の要素の isp.value は、principal.labels.isp にマッピングされます。
ip.[].isp.value about.labels.isp ip 配列の残りの要素の isp.value は about.labels.isp にマッピングされます。
matomo_codes.[].value about.labels.matomo_codes matomo_codes 配列から抽出され、about オブジェクトのラベルとして追加されます。
monitor_domain about.labels.monitor_domain 未加工ログの monitor_domain フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
monitoring_domain_list_name about.labels.monitoring_domain_list_name 未加工ログの monitoring_domain_list_name フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
mx.[].domain.value about.domain.name 未加工ログの mx.[].domain.value フィールドから直接マッピングされます。
mx.[].host.value about.hostname 未加工ログの mx.[].host.value フィールドから直接マッピングされます。
mx.[].ip.[].value about.ip mx.[].ip 配列から抽出され、ip フィールドに追加されます。
mx.[].priority about.security_result.priority_details 未加工ログの mx.[].priority フィールドから直接マッピングされます。
name_server.[].domain.value about.labels.name_server_domain name_server.[].domain.value から抽出され、about オブジェクトのキー「name_server_domain」のラベルとして追加されます。
name_server.[].host.value principal.domain.name_server name_server.[].host.value から抽出され、name_server フィールドに追加されました。
name_server.[].host.value about.domain.name_server name_server.[].host.value から抽出され、name_server フィールドに追加されました。
name_server.[].ip.[].value about.labels.ip name_server.[].ip 配列から抽出され、about オブジェクトのキー「ip」のラベルとして追加されます。
popularity_rank about.labels.popularity_rank 未加工ログの popularity_rank フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
redirect.value about.labels.redirect redirect.value から抽出され、about オブジェクトのラベルとして追加されます。
redirect_domain.value about.labels.redirect_domain redirect_domain.value から抽出され、about オブジェクトのラベルとして追加されます。
registrant_contact.city.value principal.domain.registrant.office_address.city 未加工ログの registrant_contact.city.value フィールドから直接マッピングされます。
registrant_contact.country.value principal.domain.registrant.office_address.country_or_region 未加工ログの registrant_contact.country.value フィールドから直接マッピングされます。
registrant_contact.email.[].value principal.domain.registrant.email_addresses registrant_contact.email 配列から抽出され、email_addresses フィールドに追加されました。
registrant_contact.fax.value principal.domain.registrant.attribute.labels.fax registrant_contact.fax.value から抽出され、登録者属性のキー「fax」のラベルとして追加されます。
registrant_contact.name.value principal.domain.registrant.user_display_name 未加工ログの registrant_contact.name.value フィールドから直接マッピングされます。
registrant_contact.org.value principal.domain.registrant.company_name 未加工ログの registrant_contact.org.value フィールドから直接マッピングされます。
registrant_contact.phone.value principal.domain.registrant.phone_numbers 未加工ログの registrant_contact.phone.value フィールドから直接マッピングされます。
registrant_contact.postal.value principal.domain.registrant.attribute.labels.postal registrant_contact.postal.value から抽出され、登録者属性のキー「postal」のラベルとして追加されます。
registrant_contact.state.value principal.domain.registrant.office_address.state 未加工ログの registrant_contact.state.value フィールドから直接マッピングされます。
registrant_contact.street.value principal.domain.registrant.office_address.name 未加工ログの registrant_contact.street.value フィールドから直接マッピングされます。
registrant_name.value about.labels.registrant_name registrant_name.value から抽出され、about オブジェクトのラベルとして追加されます。
registrant_org.value about.labels.registrant_org registrant_org.value から抽出され、about オブジェクトのラベルとして追加されます。
registrar.value principal.domain.registrar 未加工ログの registrar.value フィールドから直接マッピングされます。
registrar_status about.labels.registrar_status registrar_status 配列から抽出され、about オブジェクトのラベルとして追加されます。
server_type network.tls.client.server_name 未加工ログの server_type フィールドから直接マッピングされます。
soa_email.[].value principal.user.email_addresses soa_email 配列から抽出され、email_addresses フィールドに追加されます。
spf_info about.labels.spf_info 未加工ログの spf_info フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
ssl_email.[].value about.labels.ssl_email ssl_email 配列から抽出され、about オブジェクトのラベルとして追加されます。
ssl_info.[].alt_names.[].value about.labels.alt_names ssl_info.[].alt_names 配列から抽出され、about オブジェクトのラベルとして追加されます。
ssl_info.[].common_name.value about.labels.common_name ssl_info.[].common_name.value から抽出され、about オブジェクトのラベルとして追加されます。
ssl_info.[].duration.value about.labels.duration ssl_info.[].duration.value から抽出され、about オブジェクトのラベルとして追加されます。
ssl_info.[].email.[].value about.labels.ssl_info_email ssl_info.[].email 配列から抽出され、about オブジェクトのキー「ssl_info_email」のラベルとして追加されます。
ssl_info.[].hash.value network.tls.server.certificate.sha1 ssl_info 配列の最初の要素の hash.value は、network.tls.server.certificate.sha1 にマッピングされます。
ssl_info.[].hash.value about.labels.hash ssl_info 配列の残りの要素の hash.value は about.labels.hash にマッピングされます。
ssl_info.[].issuer_common_name.value network.tls.server.certificate.issuer ssl_info 配列の最初の要素の issuer_common_name.value は network.tls.server.certificate.issuer にマッピングされます。
ssl_info.[].issuer_common_name.value about.labels.issuer_common_name ssl_info 配列内の残りの要素の issuer_common_name.value は、about.labels.issuer_common_name にマッピングされます。
ssl_info.[].not_after.value network.tls.server.certificate.not_after ssl_info 配列の最初の要素の not_after.value がタイムスタンプ形式に変換され、network.tls.server.certificate.not_after にマッピングされます。
ssl_info.[].not_after.value about.labels.not_after ssl_info 配列の残りの要素の not_after.value は、about.labels.not_after にマッピングされます。
ssl_info.[].not_before.value network.tls.server.certificate.not_before ssl_info 配列の最初の要素の not_before.value がタイムスタンプ形式に変換され、network.tls.server.certificate.not_before にマッピングされます。
ssl_info.[].not_before.value about.labels.not_before ssl_info 配列の残りの要素の not_before.value は、about.labels.not_before にマッピングされます。
ssl_info.[].organization.value network.organization_name ssl_info 配列の最初の要素の organization.value は、network.organization_name にマッピングされます。
ssl_info.[].organization.value about.labels.organization ssl_info 配列の残りの要素の organization.value は about.labels.organization にマッピングされます。
ssl_info.[].subject.value about.labels.subject ssl_info.[].subject.value から抽出され、about オブジェクトのラベルとして追加されます。
statcounter_project_codes.[].value about.labels.statcounter_project_codes statcounter_project_codes 配列から抽出され、about オブジェクトのラベルとして追加されます。
statcounter_security_codes.[].value about.labels.statcounter_security_codes statcounter_security_codes 配列から抽出され、about オブジェクトのラベルとして追加されました。
tags.[].label about.file.tags tags.[].label から抽出され、tags フィールドに追加されました。
tags.[].scope security_result.detection_fields.scope tags.[].scope から抽出され、security_result オブジェクトのキー「scope」を持つ検出フィールドとして追加されます。
tags.[].tagged_at security_result.detection_fields.tagged_at tags.[].tagged_at から抽出され、security_result オブジェクトのキー「tagged_at」を持つ検出フィールドとして追加されます。
technical_contact.city.value principal.domain.tech.office_address.city 未加工ログの technical_contact.city.value フィールドから直接マッピングされます。
technical_contact.country.value principal.domain.tech.office_address.country_or_region 未加工ログの technical_contact.country.value フィールドから直接マッピングされます。
technical_contact.email.[].value principal.domain.tech.email_addresses technical_contact.email 配列から抽出され、email_addresses フィールドに追加されました。
technical_contact.fax.value principal.domain.tech.attribute.labels.fax technical_contact.fax.value から抽出され、技術属性のキー「fax」のラベルとして追加されます。
technical_contact.name.value principal.domain.tech.user_display_name 未加工ログの technical_contact.name.value フィールドから直接マッピングされます。
technical_contact.org.value principal.domain.tech.company_name 未加工ログの technical_contact.org.value フィールドから直接マッピングされます。
technical_contact.phone.value principal.domain.tech.phone_numbers 未加工ログの technical_contact.phone.value フィールドから直接マッピングされます。
technical_contact.postal.value principal.domain.tech.attribute.labels.postal technical_contact.postal.value から抽出され、tech 属性のキー「postal」のラベルとして追加されます。
technical_contact.state.value principal.domain.tech.office_address.state 未加工ログの technical_contact.state.value フィールドから直接マッピングされます。
technical_contact.street.value principal.domain.tech.office_address.name 未加工ログの technical_contact.street.value フィールドから直接マッピングされます。
tld about.labels.tld 未加工ログの tld フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
timestamp about.labels.timestamp 未加工ログのタイムスタンプ フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
website_response principal.network.http.response_code 未加工ログの website_response フィールドから直接マッピングされます。
website_title about.labels.website_title 未加工ログの website_title フィールドから直接マッピングされ、about オブジェクトのラベルとして追加されます。
whois_url principal.domain.whois_server 未加工ログの whois_url フィールドから直接マッピングされます。
yandex_codes.[].value about.labels.yandex_codes yandex_codes 配列から抽出され、about オブジェクトのラベルとして追加されます。
edr.client.hostname ドメイン フィールドの値に設定します。
edr.client.ip_addresses ip 配列の最初の要素の値(具体的には ip.[0].address.value)に設定します。
edr.raw_event_name principal.hostname が存在する場合は「STATUS_UPDATE」に設定し、それ以外の場合は「GENERIC_EVENT」に設定します。
metadata.event_timestamp 未加工ログの最上位の create_time フィールドからコピーされます。
metadata.event_type principal.hostname が存在する場合は「STATUS_UPDATE」に設定し、それ以外の場合は「GENERIC_EVENT」に設定します。
metadata.log_type 「DOMAINTOOLS_THREATINTEL」に設定します。
metadata.product_name 「DOMAINTOOLS」に設定します。
metadata.vendor_name 「DOMAINTOOLS」に設定します。

ご不明な点がございましたら、コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。