收集 DomainTools Iris Investigate 结果

支持的语言:

本文档介绍了如何使用 Amazon S3 将 DomainTools Iris Investigate 结果注入到 Google Security Operations。解析器会将 DomainTools 的 Iris API 中的原始 JSON 数据转换为符合 Google SecOps 的统一数据模型 (UDM) 的结构化格式。它会提取与网域详细信息、联系信息、安全风险、SSL 证书和其他相关属性有关的信息,并将这些信息映射到相应的 UDM 字段,以便进行一致的分析和威胁情报分析。

准备工作

  • Google SecOps 实例
  • 对 DomainTools 企业账号的特权访问权限(对 Iris Investigate 的 API 访问权限)
  • 对 AWS(S3、IAM、Lambda、EventBridge)的特权访问权限

获取 DomainTools API 密钥和端点

  1. 登录 DomainTools API 信息中心(只有 API 所有者账号才能重置 API 密钥)。
  2. 我的账号部分,选择账号摘要标签页中的查看 API 信息中心链接。
  3. 前往 API 用户名部分,获取您的用户名。
  4. 在同一标签页中,找到您的 API 密钥
  5. 复制密钥并将其保存在安全的位置。
  6. 如果您需要新密钥,请选择 Reset API Key(重置 API 密钥)。

  7. 记下 Iris Investigate 端点https://api.domaintools.com/v1/iris-investigate/

为 Google SecOps 配置 AWS S3 存储桶和 IAM

  1. 按照以下用户指南创建 Amazon S3 存储桶创建存储桶
  2. 保存存储桶名称区域以供日后参考(例如 domaintools-iris)。
  3. 按照以下用户指南创建用户:创建 IAM 用户
  4. 选择创建的用户
  5. 选择安全凭据标签页。
  6. 访问密钥部分中,点击创建访问密钥
  7. 选择第三方服务作为使用情形
  8. 点击下一步
  9. 可选:添加说明标记。
  10. 点击创建访问密钥
  11. 点击 Download CSV file(下载 CSV 文件),保存访问密钥不公开的访问密钥以供日后使用。
  12. 点击完成
  13. 选择权限标签页。
  14. 权限政策部分中,点击添加权限
  15. 选择添加权限
  16. 选择直接附加政策
  17. 搜索并选择 AmazonS3FullAccess 政策。
  18. 点击下一步
  19. 点击添加权限

为 S3 上传配置 IAM 政策和角色

  1. AWS 控制台中,依次前往 IAM > 政策 > 创建政策 > JSON 标签页
  2. 输入以下政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutDomainToolsIrisObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::domaintools-iris/*"
        }
      ]
    }
    
    • 如果您输入了其他存储桶名称,请替换 domaintools-iris
  3. 依次点击下一步 > 创建政策

  4. 依次前往 IAM > 角色 > 创建角色 > AWS 服务 > Lambda

  5. 附加新创建的政策。

  6. 将角色命名为 WriteDomainToolsIrisToS3Role,然后点击创建角色

创建 Lambda 函数

  1. AWS 控制台中,依次前往 Lambda > 函数 > 创建函数
  2. 点击从头开始创作
  3. 提供以下配置详细信息:

    设置
    名称 domaintools_iris_to_s3
    运行时 Python 3.13
    架构 x86_64
    执行角色 WriteDomainToolsIrisToS3Role
  4. 创建函数后,打开 Code 标签页,删除桩代码并输入以下代码 (domaintools_iris_to_s3.py):

    #!/usr/bin/env python3
    # Lambda: Pull DomainTools Iris Investigate results to S3 (no transform)
    
    import os, json, time, urllib.parse
    from urllib.request import Request, urlopen
    from urllib.error import HTTPError
    import boto3
    
    # --- Environment ---
    S3_BUCKET    = os.environ["S3_BUCKET"].strip()
    S3_PREFIX    = os.environ.get("S3_PREFIX", "domaintools/iris/").strip()
    STATE_KEY    = os.environ.get("STATE_KEY", "domaintools/iris/state.json").strip()
    
    DT_API_KEY   = os.environ["DT_API_KEY"].strip()
    DT_API_SECRET= os.environ.get("DT_API_SECRET", "").strip()  # optional if your account uses key-only auth
    
    USE_MODE     = os.environ.get("USE_MODE", "HASH").strip().upper()  # HASH | DOMAINS | QUERY
    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",
    }
    if DT_API_SECRET:
        HDRS["X-Api-Secret"] = DT_API_SECRET
    
    s3 = boto3.client("s3")
    
    # --- HTTP helpers ---
    
    def _http_get(url: str) -> dict:
        req = Request(url, method="GET")
        for k, v in HDRS.items():
            req.add_header(k, v)
        attempt = 0
        while True:
            try:
                with urlopen(req, 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 _build_url(params: dict) -> str:
        return BASE_URL + ("?" + urllib.parse.urlencode(params, doseq=True) if params else "")
    
    # --- S3 helpers ---
    
    def _write_page(obj: dict, label: str, page: int) -> str:
        ts = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime())
        key = f"{S3_PREFIX.rstrip('/')}/{ts}-{label}-p{page:05d}.json"
        s3.put_object(
            Bucket=S3_BUCKET, Key=key,
            Body=json.dumps(obj, separators=(",", ":")).encode("utf-8"),
            ContentType="application/json",
        )
        return key
    
    # --- Iris paging ---
    
    def _first_page_params() -> dict:
        params: dict[str, object] = {"page_size": str(PAGE_SIZE)}
        if USE_NEXT:
            params["next"] = "true"
        return params
    
    def _paginate(label: str, params: dict) -> tuple[int, int]:
        pages = 0
        total = 0
        url = _build_url(params)
        while pages < MAX_PAGES:
            data = _http_get(url)
            _write_page(data, label, pages)
    
            resp = data.get("response") or {}
            results = resp.get("results") or []
            total += len(results)
            pages += 1
    
            # Prefer `next` absolute URL if present
            next_url = resp.get("next") if isinstance(resp, dict) else None
            if next_url:
                url = next_url
                continue
    
            # Fallback: position pager when `next=true` not used/supported
            if resp.get("has_more_results") and resp.get("position"):
                base = _first_page_params()
                base.pop("next", None)
                base["position"] = resp["position"]
                url = _build_url(base)
                continue
    
            break
        return pages, total
    
    # --- Mode runners ---
    
    def run_hashes(hashes: list[str]) -> dict:
        agg_pages = agg_results = 0
        for h in hashes:
            params = _first_page_params()
            params["search_hash"] = h
            p, r = _paginate(f"hash-{h}", params)
            agg_pages += p
            agg_results += r
        return {"pages": agg_pages, "results": agg_results}
    
    def run_domains(domains: list[str]) -> dict:
        agg_pages = agg_results = 0
        for d in domains:
            params = _first_page_params()
            # DomainTools accepts `domain` as a filter in Investigate search
            params["domain"] = d
            p, r = _paginate(f"domain-{d}", params)
            agg_pages += p
            agg_results += r
        return {"pages": agg_pages, "results": agg_results}
    
    def run_queries(queries: list[str]) -> dict:
        agg_pages = agg_results = 0
        for q in queries:
            # Merge arbitrary k=v pairs from the query string
            base = _first_page_params()
            for k, v in urllib.parse.parse_qsl(q, keep_blank_values=True):
                base.setdefault(k, v)
            p, r = _paginate(f"query-{q.replace('=','-')}", base)
            agg_pages += p
            agg_results += r
        return {"pages": agg_pages, "results": agg_results}
    
    # --- Entry point ---
    
    def lambda_handler(event=None, context=None):
        if USE_MODE == "HASH" and SEARCH_HASHES:
            res = run_hashes(SEARCH_HASHES)
        elif USE_MODE == "DOMAINS" and DOMAINS:
            res = run_domains(DOMAINS)
        elif USE_MODE == "QUERY" and QUERY_LIST:
            res = run_queries(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.")
    
        return {"ok": True, "mode": USE_MODE, **res}
    
    if __name__ == "__main__":
        print(json.dumps(lambda_handler(), indent=2))
    
  5. 依次前往配置 > 环境变量 > 修改 > 添加新的环境变量

  6. 输入以下环境变量,并替换为您的值:

    示例值 说明
    S3_BUCKET domaintools-iris 将存储数据的 S3 存储桶名称。
    S3_PREFIX domaintools/iris/ 对象的可选 S3 前缀(子文件夹)。
    STATE_KEY domaintools/iris/state.json 可选的状态/检查点文件密钥。
    DT_API_KEY DT-XXXXXXXXXXXXXXXXXXXX DomainTools API 密钥。
    DT_API_SECRET YYYYYYYYYYYYYYYYYYYYYYYY DomainTools API 密钥(如果适用)。
    USE_MODE HASH | DOMAINS | QUERY 选择要使用的模式(一次只能启用一种模式)。
    SEARCH_HASHES hash1;hash2;hash3 如果 USE_MODE=HASH,则为必需。以英文分号分隔的 Iris 界面中的已保存搜索哈希列表。
    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 每页行数(默认值为 500)。
    MAX_PAGES 20 每个请求的页面数上限
  7. 创建函数后,请停留在其页面上(或依次打开 Lambda > 函数 > your-function)。

  8. 选择配置标签页。

  9. 常规配置面板中,点击修改

  10. 超时更改为 15 分钟(900 秒),然后点击保存

创建 EventBridge 计划

  1. 依次前往 Amazon EventBridge > 调度程序 > 创建计划
  2. 提供以下配置详细信息:
    • 周期性安排费率 (1 hour)。
    • 目标:您的 Lambda 函数。
    • 名称domaintools-iris-1h
  3. 点击创建时间表

可选:为 Google SecOps 创建只读 IAM 用户和密钥

  1. 在 AWS 控制台中,依次前往 IAM > Users,然后点击 Add users
  2. 提供以下配置详细信息:
    • 用户:输入唯一名称(例如 secops-reader
    • 访问类型:选择访问密钥 - 以程序化方式访问
    • 点击创建用户
  3. 附加最低限度的读取政策(自定义):用户 > 选择 secops-reader > 权限 > 添加权限 > 直接附加政策 > 创建政策
  4. 在 JSON 编辑器中,输入以下政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::<your-bucket>/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::<your-bucket>"
        }
      ]
    }
    
  5. 将名称设置为 secops-reader-policy

  6. 依次前往创建政策 > 搜索/选择 > 下一步 > 添加权限

  7. 依次前往安全凭据 > 访问密钥 > 创建访问密钥

  8. 下载 CSV(这些值将输入到 Feed 中)。

在 Google SecOps 中配置 Feed 以注入 DomainTools Iris Investigate 结果

  1. 依次前往 SIEM 设置> Feed
  2. 点击添加新 Feed
  3. Feed 名称字段中,输入 Feed 的名称(例如 DomainTools Iris Investigate)。
  4. 选择 Amazon S3 V2 作为来源类型
  5. 选择 DomainTools 威胁情报作为日志类型
  6. 点击下一步
  7. 为以下输入参数指定值:
    • S3 URIs3://domaintools-iris/domaintools/iris/
    • 来源删除选项:根据您的偏好设置选择删除选项。
    • 文件最长保留时间:默认值为 180 天。
    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。
    • 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥。
    • 资源命名空间domaintools.threat_intel
    • 注入标签:要应用于此 Feed 中事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看新的 Feed 配置,然后点击提交

UDM 映射表

日志字段 UDM 映射 逻辑
有效 principal.domain.status 直接从原始日志中的 active 字段映射。
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 中提取,并作为具有键“fax”的标签添加到 admin 属性中。
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 属性中。
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 中提取,并作为 billing 属性中键为“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 字段映射。
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 中提取,并作为键为“name_server_domain”的标签添加到 about 对象中。
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 数组中提取,并作为键为“ip”的标签添加到 about 对象中。
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 属性中。
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 中提取,并作为 registrant 属性中键为“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”的标签添加到 tech 属性中。
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 对象中。
时间戳 about.labels.timestamp 直接从原始日志中的 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 设置为 domain 字段的值。
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 专业人士那里获得解答。