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 キーとエンドポイントを取得する
- DomainTools API ダッシュボードにログインします(API キーをリセットできるのは API 所有者アカウントのみです)。
- [My Account] セクションの [Account Summary] タブにある [View API Dashboard] リンクを選択します。
- [API Username] セクションに移動して、ユーザー名を取得します。
- 同じタブで、[API キー] を見つけます。
キーをコピーして安全な場所に保存します。新しいキーが必要な場合は、[API キーをリセット] を選択します。
Iris Investigate エンドポイント(
https://api.domaintools.com/v1/iris-investigate/)をメモします。
Google Cloud Storage バケットを作成する
- Google Cloud Console に移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前( domaintools-irisなど)を入力します。ロケーション タイプ ニーズに基づいて選択します(リージョン、デュアルリージョン、マルチリージョン)。 ロケーション ロケーションを選択します(例: us-central1)。ストレージ クラス Standard(頻繁にアクセスされるログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
Cloud Run functions のサービス アカウントを作成する
Cloud Run 関数には、GCS バケットに書き込み、Pub/Sub によって呼び出される権限を持つサービス アカウントが必要です。
サービス アカウントの作成
- GCP Console で、[IAM と管理>サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成の詳細を指定します。
- サービス アカウント名: 「
domaintools-iris-collector-sa」と入力します。 - サービス アカウントの説明: 「
Service account for Cloud Run function to collect DomainTools Iris Investigate logs」と入力します。
- サービス アカウント名: 「
- [作成して続行] をクリックします。
- [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次のロールを追加します。
- [ロールを選択] をクリックします。
- [ストレージ オブジェクト管理者] を検索して選択します。
- [+ 別のロールを追加] をクリックします。
- [Cloud Run 起動元] を検索して選択します。
- [+ 別のロールを追加] をクリックします。
- [Cloud Functions 起動元] を検索して選択します。
- [続行] をクリックします。
- [完了] をクリックします。
これらのロールは、次の目的で必要です。
- Storage オブジェクト管理者: ログを GCS バケットに書き込み、状態ファイルを管理する
- Cloud Run 起動元: Pub/Sub が関数を呼び出すことを許可する
- Cloud Functions 起動元: 関数の呼び出しを許可する
GCS バケットに対する IAM 権限を付与する
GCS バケットに対する書き込み権限をサービス アカウントに付与します。
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
domaintools-iris-collector-sa@PROJECT_ID.iam.gserviceaccount.com)を入力します。 - ロールを割り当てる: [Storage オブジェクト管理者] を選択します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
- [保存] をクリックします。
Pub/Sub トピックの作成
Cloud Scheduler がパブリッシュし、Cloud Run functions がサブスクライブする Pub/Sub トピックを作成します。
- GCP Console で、[Pub/Sub> トピック] に移動します。
- [トピックを作成] をクリックします。
- 次の構成の詳細を指定します。
- トピック ID: 「
domaintools-iris-trigger」と入力します。 - その他の設定はデフォルトのままにします。
- トピック ID: 「
- [作成] をクリックします。
ログを収集する Cloud Run 関数を作成する
Cloud Run 関数は、Cloud Scheduler からの Pub/Sub メッセージによってトリガーされ、DomainTools Iris Investigate API からログを取得して GCS に書き込みます。
- GCP Console で、[Cloud Run] に移動します。
- [サービスを作成] をクリックします。
- [関数] を選択します(インライン エディタを使用して関数を作成します)。
[構成] セクションで、次の構成の詳細を指定します。
設定 値 サービス名 domaintools-iris-collectorリージョン GCS バケットと一致するリージョンを選択します(例: us-central1)。ランタイム [Python 3.12] 以降を選択します。 [トリガー(省略可)] セクションで、次の操作を行います。
- [+ トリガーを追加] をクリックします。
- [Cloud Pub/Sub] を選択します。
- [Cloud Pub/Sub トピックを選択してください] で、Pub/Sub トピック(
domaintools-iris-trigger)を選択します。 - [保存] をクリックします。
[認証] セクションで、次の操作を行います。
- [認証が必要] を選択します。
- Identity and Access Management(IAM)を確認します。
下にスクロールして、[コンテナ、ネットワーキング、セキュリティ] を開きます。
[セキュリティ] タブに移動します。
- サービス アカウント: サービス アカウントを選択します(
domaintools-iris-collector-sa)。
- サービス アカウント: サービス アカウントを選択します(
[コンテナ] タブに移動します。
- [変数とシークレット] をクリックします。
- 環境変数ごとに [+ 変数を追加] をクリックします。
変数名 値の例 説明 GCS_BUCKETdomaintools-irisデータが保存される GCS バケットの名前。 GCS_PREFIXdomaintools/iris/オブジェクトの省略可能な GCS 接頭辞(サブフォルダ)。 STATE_KEYdomaintools/iris/state.json状態/チェックポイント ファイルのキー(省略可)。 DT_API_KEYDT-XXXXXXXXXXXXXXXXXXXXDomainTools API キー。 USE_MODEHASH使用するモード( HASH、DOMAINS、QUERYのいずれか 1 つ)を選択します。SEARCH_HASHEShash1;hash2;hash3USE_MODE=HASHの場合は必須。Iris UI からの保存済み検索ハッシュのセミコロン区切りリスト。DOMAINSexample.com;domaintools.comUSE_MODE=DOMAINSの場合は必須。セミコロンで区切られたドメインのリスト。QUERY_LISTip=1.1.1.1;ip=8.8.8.8;domain=example.orgUSE_MODE=QUERYの場合は必須。セミコロンで区切られたクエリ文字列のリスト(k=v&k2=v2)。PAGE_SIZE5001 ページあたりの行数(デフォルトは 500)。 MAX_PAGES20リクエストあたりの最大ページ数。 [変数とシークレット] セクションで、[リクエスト] まで下にスクロールします。
- リクエスト タイムアウト:
900秒(15 分)を入力します。
- リクエスト タイムアウト:
[設定] タブに移動します。
- [リソース] セクションで次の操作を行います。
- メモリ: 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 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.*[デプロイ] をクリックして、関数を保存してデプロイします。
デプロイが完了するまで待ちます(2 ~ 3 分)。
Cloud Scheduler ジョブの作成
Cloud Scheduler は、定期的に Pub/Sub トピックにメッセージをパブリッシュし、Cloud Run functions の関数をトリガーします。
- GCP Console で、[Cloud Scheduler] に移動します。
- [ジョブを作成] をクリックします。
次の構成情報を提供してください。
設定 値 名前 domaintools-iris-1hリージョン Cloud Run functions と同じリージョンを選択する 周波数 0 * * * *(1 時間ごとに正時)タイムゾーン タイムゾーンを選択します(UTC を推奨)。 ターゲット タイプ Pub/Sub トピック Pub/Sub トピック( domaintools-iris-trigger)を選択するメッセージ本文 {}(空の JSON オブジェクト)[作成] をクリックします。
スケジュールの頻度のオプション
ログの量とレイテンシの要件に基づいて頻度を選択します。
頻度 CRON 式 ユースケース 5 分毎 */5 * * * *大容量、低レイテンシ 15 分ごと */15 * * * *検索量が普通 1 時間ごと 0 * * * *標準(推奨) 6 時間ごと 0 */6 * * *少量、バッチ処理 毎日 0 0 * * *履歴データの収集
統合をテストする
- Cloud Scheduler コンソールで、ジョブを見つけます。
- [強制実行] をクリックして、ジョブを手動でトリガーします。
- 数秒待ちます。
- Cloud Run > サービスに移動します。
- 関数名(
domaintools-iris-collector)をクリックします。 - [Logs] タブをクリックします。
関数が正常に実行されたことを確認します。次の内容を確認します。
Successfully processed: {"ok": true, "mode": "HASH", "pages": X, "results": Y}[Cloud Storage] > [バケット] に移動します。
バケット名をクリックします。
プレフィックス フォルダ(
domaintools/iris/)に移動します。新しい
.jsonファイルが現在のタイムスタンプで作成されたことを確認します。
ログにエラーが表示された場合:
- HTTP 401: 環境変数で DomainTools API の認証情報を確認する
- HTTP 403: アカウントに Iris Investigate API に必要な権限があることを確認する
- HTTP 429: レート制限 - 関数はバックオフで自動的に再試行されます
- 環境変数が不足している: 必要な変数がすべて設定されていることを確認します
- 無効な USE_MODE: USE_MODE が HASH、DOMAINS、QUERY のいずれかに設定され、対応するパラメータが指定されていることを確認します。
Google SecOps サービス アカウントを取得する
Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。
サービス アカウントのメールアドレスを取得する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
DomainTools Iris Investigate)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [DomainTools Threat Intelligence] を選択します。
[サービス アカウントを取得する] をクリックします。一意のサービス アカウント メールアドレスが表示されます(例:)。
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーして、次のステップで使用します。
Google SecOps サービス アカウントに IAM 権限を付与する
Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者ロールが必要です。
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
- ロールを割り当てる: [ストレージ オブジェクト閲覧者] を選択します。
[保存] をクリックします。
DomainTools Iris Investigate の結果を取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
DomainTools Iris Investigate)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [DomainTools Threat Intelligence] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
ストレージ バケットの 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_intelIngestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[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 のプロフェッショナルから回答を得ることができます。