Collecter les résultats de DomainTools Iris Investigate

Compatible avec :

Ce document explique comment ingérer les résultats de DomainTools Iris Investigate dans Google Security Operations à l'aide d'Amazon S3. L'analyseur transforme les données JSON brutes de l'API Iris de DomainTools en un format structuré conforme au modèle de données unifié (UDM) de Google SecOps. Il extrait des informations sur les détails du domaine, les coordonnées, les risques de sécurité, les certificats SSL et d'autres attributs pertinents, et les mappe aux champs UDM correspondants pour une analyse cohérente et des renseignements sur les menaces.

Avant de commencer

  • Instance Google SecOps
  • Accès privilégié au compte DomainTools Enterprise (accès à l'API Iris Investigate)
  • Accès privilégié à AWS (S3, IAM, Lambda, EventBridge)

Obtenir la clé API et le point de terminaison DomainTools

  1. Connectez-vous au tableau de bord de l'API DomainTools (seul le compte du propriétaire de l'API peut réinitialiser la clé API).
  2. Dans la section Mon compte, sélectionnez le lien Afficher le tableau de bord des API situé dans l'onglet Récapitulatif du compte.
  3. Accédez à la section Nom d'utilisateur de l'API pour obtenir votre nom d'utilisateur.
  4. Dans le même onglet, recherchez votre clé API.
  5. Copiez et enregistrez la clé dans un emplacement sécurisé.
  6. Si vous avez besoin d'une nouvelle clé, sélectionnez Réinitialiser la clé API.

  7. Notez le point de terminaison Iris Investigate : https://api.domaintools.com/v1/iris-investigate/.

Configurer un bucket AWS S3 et IAM pour Google SecOps

  1. Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
  2. Enregistrez le nom et la région du bucket pour référence ultérieure (par exemple, domaintools-iris).
  3. Créez un utilisateur en suivant ce guide : Créer un utilisateur IAM.
  4. Sélectionnez l'utilisateur créé.
  5. Sélectionnez l'onglet Informations d'identification de sécurité.
  6. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  7. Sélectionnez Service tiers comme Cas d'utilisation.
  8. Cliquez sur Suivant.
  9. Facultatif : ajoutez un tag de description.
  10. Cliquez sur Créer une clé d'accès.
  11. Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour une utilisation ultérieure.
  12. Cliquez sur OK.
  13. Sélectionnez l'onglet Autorisations.
  14. Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
  15. Sélectionnez Ajouter des autorisations.
  16. Sélectionnez Joindre directement des règles.
  17. Recherchez et sélectionnez la règle AmazonS3FullAccess.
  18. Cliquez sur Suivant.
  19. Cliquez sur Ajouter des autorisations.

Configurer la stratégie et le rôle IAM pour les importations S3

  1. Dans la console AWS, accédez à IAM > Policies > Create policy > onglet JSON.
  2. Saisissez la règle suivante :

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutDomainToolsIrisObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::domaintools-iris/*"
        }
      ]
    }
    
    • Remplacez domaintools-iris si vous avez saisi un autre nom de bucket.
  3. Cliquez sur Suivant > Créer une règle.

  4. Accédez à IAM > Rôles > Créer un rôle > Service AWS > Lambda.

  5. Associez la règle que vous venez de créer.

  6. Nommez le rôle WriteDomainToolsIrisToS3Role, puis cliquez sur Créer un rôle.

Créer la fonction Lambda

  1. Dans la console AWS, accédez à Lambda > Fonctions > Créer une fonction.
  2. Cliquez sur Créer à partir de zéro.
  3. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Nom domaintools_iris_to_s3
    Durée d'exécution Python 3.13
    Architecture x86_64
    Rôle d'exécution WriteDomainToolsIrisToS3Role
  4. Une fois la fonction créée, ouvrez l'onglet Code, supprimez le stub et saisissez le code suivant (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. Accédez à Configuration> Variables d'environnement> Modifier> Ajouter une variable d'environnement.

  6. Saisissez les variables d'environnement suivantes en remplaçant les valeurs par les vôtres :

    Clé Exemple de valeur Description
    S3_BUCKET domaintools-iris Nom du bucket S3 dans lequel les données seront stockées.
    S3_PREFIX domaintools/iris/ Préfixe S3 facultatif (sous-dossier) pour les objets.
    STATE_KEY domaintools/iris/state.json Clé de fichier d'état/de point de contrôle facultative.
    DT_API_KEY DT-XXXXXXXXXXXXXXXXXXXX Clé API DomainTools.
    DT_API_SECRET YYYYYYYYYYYYYYYYYYYYYYYY Secret de l'API DomainTools (le cas échéant).
    USE_MODE HASH | DOMAINS | QUERY Sélectionnez le mode à utiliser (un seul peut être actif à la fois).
    SEARCH_HASHES hash1;hash2;hash3 Obligatoire si USE_MODE=HASH. Liste des hachages de recherches enregistrées de l'interface utilisateur Iris, séparés par un point-virgule.
    DOMAINS example.com;domaintools.com Obligatoire si USE_MODE=DOMAINS. Liste de domaines séparés par un point-virgule.
    QUERY_LIST ip=1.1.1.1;ip=8.8.8.8;domain=example.org Obligatoire si USE_MODE=QUERY. Liste de chaînes de requête séparées par un point-virgule (k=v&k2=v2).
    PAGE_SIZE 500 Nombre de lignes par page (500 par défaut).
    MAX_PAGES 20 Nombre maximal de pages par requête
  7. Une fois la fonction créée, restez sur sa page (ou ouvrez Lambda > Fonctions > votre-fonction).

  8. Accédez à l'onglet Configuration.

  9. Dans le panneau Configuration générale, cliquez sur Modifier.

  10. Définissez Délai avant expiration sur 15 minutes (900 secondes), puis cliquez sur Enregistrer.

Créer une programmation EventBridge

  1. Accédez à Amazon EventBridge> Scheduler> Create schedule (Créer une programmation).
  2. Fournissez les informations de configuration suivantes :
    • Planning récurrent : Tarif (1 hour).
    • Cible : votre fonction Lambda.
    • Nom : domaintools-iris-1h.
  3. Cliquez sur Créer la programmation.

Facultatif : Créez un utilisateur et des clés IAM en lecture seule pour Google SecOps

  1. Dans la console AWS, accédez à IAM> Utilisateurs, puis cliquez sur Ajouter des utilisateurs.
  2. Fournissez les informations de configuration suivantes :
    • Utilisateur : saisissez un nom unique (par exemple, secops-reader).
    • Type d'accès : sélectionnez Clé d'accès – Accès programmatique.
    • Cliquez sur Créer un utilisateur.
  3. Associez une règle de lecture minimale (personnalisée) : Utilisateurs> sélectionnez secops-reader > Autorisations> Ajouter des autorisations> Associer des règles directement> Créer une règle
  4. Dans l'éditeur JSON, saisissez la stratégie suivante :

    {
      "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. Définissez le nom sur secops-reader-policy.

  6. Accédez à Créer une règle > recherchez/sélectionnez > Suivant > Ajouter des autorisations.

  7. Accédez à Identifiants de sécurité > Clés d'accès > Créer une clé d'accès.

  8. Téléchargez le CSV (ces valeurs sont saisies dans le flux).

Configurer un flux dans Google SecOps pour ingérer les résultats de DomainTools Iris Investigate

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, DomainTools Iris Investigate).
  4. Sélectionnez Amazon S3 V2 comme type de source.
  5. Sélectionnez DomainTools Threat Intelligence comme Type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants :
    • URI S3 : s3://domaintools-iris/domaintools/iris/
    • Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
    • Âge maximal des fichiers : 180 jours par défaut.
    • ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
    • Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
    • Espace de noms de l'asset : domaintools.threat_intel
    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Table de mappage UDM

Champ de journal Mappage UDM Logique
actif principal.domain.status Directement mappé à partir du champ active dans le journal brut.
additional_whois_email.[].value about.labels.additional_whois_email Extrait du tableau additional_whois_email et ajouté en tant que libellé dans l'objet about.
adsense.value about.labels.adsense Extrait de adsense.value et ajouté en tant que libellé dans l'objet about.
admin_contact.city.value principal.domain.admin.office_address.city Directement mappé à partir du champ admin_contact.city.value dans le journal brut.
admin_contact.country.value principal.domain.admin.office_address.country_or_region Directement mappé à partir du champ admin_contact.country.value dans le journal brut.
admin_contact.email.[].value principal.domain.admin.email_addresses Extrait du tableau admin_contact.email et ajouté au champ email_addresses.
admin_contact.fax.value principal.domain.admin.attribute.labels.fax Extrait de admin_contact.fax.value et ajouté en tant que libellé avec la clé "fax" dans l'attribut admin.
admin_contact.name.value principal.domain.admin.user_display_name Directement mappé à partir du champ admin_contact.name.value dans le journal brut.
admin_contact.org.value principal.domain.admin.company_name Directement mappé à partir du champ admin_contact.org.value dans le journal brut.
admin_contact.phone.value principal.domain.admin.phone_numbers Directement mappé à partir du champ admin_contact.phone.value dans le journal brut.
admin_contact.postal.value principal.domain.admin.attribute.labels.postal Extrait de admin_contact.postal.value et ajouté en tant que libellé avec la clé "postal" dans l'attribut admin.
admin_contact.state.value principal.domain.admin.office_address.state Directement mappé à partir du champ admin_contact.state.value dans le journal brut.
admin_contact.street.value principal.domain.admin.office_address.name Directement mappé à partir du champ admin_contact.street.value dans le journal brut.
alexa about.labels.alexa Directement mappé à partir du champ alexa dans le journal brut et ajouté en tant que libellé dans l'objet about.
baidu_codes.[].value about.labels.baidu_codes Extrait du tableau baidu_codes et ajouté en tant que libellé dans l'objet about.
billing_contact.city.value principal.domain.billing.office_address.city Directement mappé à partir du champ billing_contact.city.value dans le journal brut.
billing_contact.country.value principal.domain.billing.office_address.country_or_region Directement mappé à partir du champ billing_contact.country.value dans le journal brut.
billing_contact.email.[].value principal.domain.billing.email_addresses Extrait du tableau billing_contact.email et ajouté au champ email_addresses.
billing_contact.fax.value principal.domain.billing.attribute.labels.fax Extrait de billing_contact.fax.value et ajouté en tant que libellé avec la clé "fax" dans l'attribut billing.
billing_contact.name.value principal.domain.billing.user_display_name Directement mappé à partir du champ billing_contact.name.value dans le journal brut.
billing_contact.org.value principal.domain.billing.company_name Directement mappé à partir du champ billing_contact.org.value dans le journal brut.
billing_contact.phone.value principal.domain.billing.phone_numbers Directement mappé à partir du champ billing_contact.phone.value dans le journal brut.
billing_contact.postal.value principal.domain.billing.attribute.labels.postal Extrait de billing_contact.postal.value et ajouté en tant que libellé avec la clé "postal" dans l'attribut billing.
billing_contact.state.value principal.domain.billing.office_address.state Directement mappé à partir du champ billing_contact.state.value dans le journal brut.
billing_contact.street.value principal.domain.billing.office_address.name Directement mappé à partir du champ billing_contact.street.value dans le journal brut.
create_date.value principal.domain.creation_time Converti au format de code temporel à partir du champ create_date.value du journal brut.
data_updated_timestamp principal.domain.audit_update_time Converti au format de code temporel à partir du champ data_updated_timestamp du journal brut.
domaine principal.hostname Directement mappé à partir du champ domain dans le journal brut.
domain_risk.components.[].evidence security_result.detection_fields.evidence Extrait du tableau domain_risk.components.[].evidence et ajouté en tant que champ de détection avec la clé "evidence" dans l'objet security_result.
domain_risk.components.[].name security_result.category_details Directement mappé à partir du champ domain_risk.components.[].name dans le journal brut.
domain_risk.components.[].risk_score security_result.risk_score Directement mappé à partir du champ domain_risk.components.[].risk_score dans le journal brut.
domain_risk.components.[].threats security_result.threat_name Le premier élément du tableau domain_risk.components.[].threats est mappé sur security_result.threat_name.
domain_risk.components.[].threats security_result.detection_fields.threats Les éléments restants du tableau domain_risk.components.[].threats sont ajoutés en tant que champs de détection avec la clé "threats" dans l'objet security_result.
domain_risk.risk_score security_result.risk_score Directement mappé à partir du champ domain_risk.risk_score dans le journal brut.
email_domain.[].value about.labels.email_domain Extrait du tableau email_domain et ajouté en tant que libellé dans l'objet about.
expiration_date.value principal.domain.expiration_time Converti au format de code temporel à partir du champ expiration_date.value du journal brut.
fb_codes.[].value about.labels.fb_codes Extrait du tableau fb_codes et ajouté en tant que libellé dans l'objet about.
first_seen.value principal.domain.first_seen_time Converti au format de code temporel à partir du champ first_seen.value du journal brut.
ga4.[].value about.labels.ga4 Extrait du tableau ga4 et ajouté en tant que libellé dans l'objet about.
google_analytics.value about.labels.google_analytics Extrait de google_analytics.value et ajouté en tant que libellé dans l'objet about.
gtm_codes.[].value about.labels.gtm_codes Extrait du tableau gtm_codes et ajouté en tant que libellé dans l'objet about.
hotjar_codes.[].value about.labels.hotjar_codes Extrait du tableau hotjar_codes et ajouté en tant que libellé dans l'objet about.
ip.[].address.value principal.ip Le premier élément du tableau ip est mappé sur principal.ip.
ip.[].address.value about.labels.ip_address Les éléments restants du tableau ip sont ajoutés en tant que libellés avec la clé "ip_address" dans l'objet about.
ip.[].asn.[].value network.asn Le premier élément du premier tableau ip.asn est mappé à network.asn.
ip.[].asn.[].value about.labels.asn Les éléments restants des tableaux ip.asn sont ajoutés en tant que libellés avec la clé "asn" dans l'objet about.
ip.[].country_code.value principal.location.country_or_region Le country_code.value du premier élément du tableau ip est mappé sur principal.location.country_or_region.
ip.[].country_code.value about.location.country_or_region Les country_code.value des éléments restants du tableau ip sont mappés sur about.location.country_or_region.
ip.[].isp.value principal.labels.isp Le isp.value du premier élément du tableau ip est mappé sur principal.labels.isp.
ip.[].isp.value about.labels.isp Les isp.value des éléments restants du tableau ip sont mappés sur about.labels.isp.
matomo_codes.[].value about.labels.matomo_codes Extrait du tableau matomo_codes et ajouté en tant que libellé dans l'objet about.
monitor_domain about.labels.monitor_domain Directement mappé à partir du champ monitor_domain dans le journal brut et ajouté en tant que libellé dans l'objet about.
monitoring_domain_list_name about.labels.monitoring_domain_list_name Directement mappé à partir du champ monitoring_domain_list_name dans le journal brut et ajouté en tant que libellé dans l'objet about.
mx.[].domain.value about.domain.name Directement mappé à partir du champ mx.[].domain.value dans le journal brut.
mx.[].host.value about.hostname Directement mappé à partir du champ mx.[].host.value dans le journal brut.
mx.[].ip.[].value about.ip Extrait du tableau mx.[].ip et ajouté au champ ip.
mx.[].priority about.security_result.priority_details Directement mappé à partir du champ mx.[].priority dans le journal brut.
name_server.[].domain.value about.labels.name_server_domain Extrait de name_server.[].domain.value et ajouté en tant que libellé avec la clé "name_server_domain" dans l'objet about.
name_server.[].host.value principal.domain.name_server Extrait de name_server.[].host.value et ajouté au champ name_server.
name_server.[].host.value about.domain.name_server Extrait de name_server.[].host.value et ajouté au champ name_server.
name_server.[].ip.[].value about.labels.ip Extrait du tableau name_server.[].ip et ajouté en tant que libellé avec la clé "ip" dans l'objet about.
popularity_rank about.labels.popularity_rank Directement mappé à partir du champ popularity_rank dans le journal brut et ajouté en tant que libellé dans l'objet about.
redirect.value about.labels.redirect Extrait de redirect.value et ajouté en tant que libellé dans l'objet about.
redirect_domain.value about.labels.redirect_domain Extrait de redirect_domain.value et ajouté en tant que libellé dans l'objet about.
registrant_contact.city.value principal.domain.registrant.office_address.city Directement mappé à partir du champ registrant_contact.city.value dans le journal brut.
registrant_contact.country.value principal.domain.registrant.office_address.country_or_region Directement mappé à partir du champ registrant_contact.country.value dans le journal brut.
registrant_contact.email.[].value principal.domain.registrant.email_addresses Extrait du tableau registrant_contact.email et ajouté au champ email_addresses.
registrant_contact.fax.value principal.domain.registrant.attribute.labels.fax Extrait de registrant_contact.fax.value et ajouté en tant que libellé avec la clé "fax" dans l'attribut registrant.
registrant_contact.name.value principal.domain.registrant.user_display_name Directement mappé à partir du champ registrant_contact.name.value dans le journal brut.
registrant_contact.org.value principal.domain.registrant.company_name Directement mappé à partir du champ registrant_contact.org.value dans le journal brut.
registrant_contact.phone.value principal.domain.registrant.phone_numbers Directement mappé à partir du champ registrant_contact.phone.value dans le journal brut.
registrant_contact.postal.value principal.domain.registrant.attribute.labels.postal Extrait de registrant_contact.postal.value et ajouté en tant que libellé avec la clé "postal" dans l'attribut registrant.
registrant_contact.state.value principal.domain.registrant.office_address.state Directement mappé à partir du champ registrant_contact.state.value dans le journal brut.
registrant_contact.street.value principal.domain.registrant.office_address.name Directement mappé à partir du champ registrant_contact.street.value dans le journal brut.
registrant_name.value about.labels.registrant_name Extrait de registrant_name.value et ajouté en tant que libellé dans l'objet about.
registrant_org.value about.labels.registrant_org Extrait de registrant_org.value et ajouté en tant que libellé dans l'objet about.
registrar.value principal.domain.registrar Directement mappé à partir du champ registrar.value dans le journal brut.
registrar_status about.labels.registrar_status Extrait du tableau registrar_status et ajouté en tant que libellé dans l'objet about.
server_type network.tls.client.server_name Directement mappé à partir du champ server_type dans le journal brut.
soa_email.[].value principal.user.email_addresses Extrait du tableau soa_email et ajouté au champ email_addresses.
spf_info about.labels.spf_info Directement mappé à partir du champ spf_info dans le journal brut et ajouté en tant que libellé dans l'objet about.
ssl_email.[].value about.labels.ssl_email Extrait du tableau ssl_email et ajouté en tant que libellé dans l'objet about.
ssl_info.[].alt_names.[].value about.labels.alt_names Extrait du tableau ssl_info.[].alt_names et ajouté en tant que libellé dans l'objet about.
ssl_info.[].common_name.value about.labels.common_name Extrait de ssl_info.[].common_name.value et ajouté en tant que libellé dans l'objet about.
ssl_info.[].duration.value about.labels.duration Extrait de ssl_info.[].duration.value et ajouté en tant que libellé dans l'objet about.
ssl_info.[].email.[].value about.labels.ssl_info_email Extrait du tableau ssl_info.[].email et ajouté en tant que libellé avec la clé "ssl_info_email" dans l'objet about.
ssl_info.[].hash.value network.tls.server.certificate.sha1 Le hash.value du premier élément du tableau ssl_info est mappé sur network.tls.server.certificate.sha1.
ssl_info.[].hash.value about.labels.hash Les hash.value des éléments restants du tableau ssl_info sont mappés sur about.labels.hash.
ssl_info.[].issuer_common_name.value network.tls.server.certificate.issuer Le issuer_common_name.value du premier élément du tableau ssl_info est mappé sur network.tls.server.certificate.issuer.
ssl_info.[].issuer_common_name.value about.labels.issuer_common_name Les issuer_common_name.value des éléments restants du tableau ssl_info sont mappés sur about.labels.issuer_common_name.
ssl_info.[].not_after.value network.tls.server.certificate.not_after Le not_after.value du premier élément du tableau ssl_info est converti au format d'horodatage et mappé à network.tls.server.certificate.not_after.
ssl_info.[].not_after.value about.labels.not_after Les not_after.value des éléments restants du tableau ssl_info sont mappés sur about.labels.not_after.
ssl_info.[].not_before.value network.tls.server.certificate.not_before Le not_before.value du premier élément du tableau ssl_info est converti au format d'horodatage et mappé à network.tls.server.certificate.not_before.
ssl_info.[].not_before.value about.labels.not_before Les not_before.value des éléments restants du tableau ssl_info sont mappés sur about.labels.not_before.
ssl_info.[].organization.value network.organization_name Le organization.value du premier élément du tableau ssl_info est mappé sur network.organization_name.
ssl_info.[].organization.value about.labels.organization Les organization.value des éléments restants du tableau ssl_info sont mappés sur about.labels.organization.
ssl_info.[].subject.value about.labels.subject Extrait de ssl_info.[].subject.value et ajouté en tant que libellé dans l'objet about.
statcounter_project_codes.[].value about.labels.statcounter_project_codes Extrait du tableau statcounter_project_codes et ajouté en tant que libellé dans l'objet about.
statcounter_security_codes.[].value about.labels.statcounter_security_codes Extrait du tableau statcounter_security_codes et ajouté en tant que libellé dans l'objet about.
tags.[].label about.file.tags Extrait de tags.[].label et ajouté au champ tags.
tags.[].scope security_result.detection_fields.scope Extrait de tags.[].scope et ajouté en tant que champ de détection avec la clé "scope" dans l'objet security_result.
tags.[].tagged_at security_result.detection_fields.tagged_at Extrait de tags.[].tagged_at et ajouté en tant que champ de détection avec la clé "tagged_at" dans l'objet security_result.
technical_contact.city.value principal.domain.tech.office_address.city Directement mappé à partir du champ technical_contact.city.value dans le journal brut.
technical_contact.country.value principal.domain.tech.office_address.country_or_region Directement mappé à partir du champ technical_contact.country.value dans le journal brut.
technical_contact.email.[].value principal.domain.tech.email_addresses Extrait du tableau technical_contact.email et ajouté au champ email_addresses.
technical_contact.fax.value principal.domain.tech.attribute.labels.fax Extrait de technical_contact.fax.value et ajouté en tant que libellé avec la clé "fax" dans l'attribut tech.
technical_contact.name.value principal.domain.tech.user_display_name Directement mappé à partir du champ technical_contact.name.value dans le journal brut.
technical_contact.org.value principal.domain.tech.company_name Directement mappé à partir du champ technical_contact.org.value dans le journal brut.
technical_contact.phone.value principal.domain.tech.phone_numbers Directement mappé à partir du champ technical_contact.phone.value dans le journal brut.
technical_contact.postal.value principal.domain.tech.attribute.labels.postal Extrait de technical_contact.postal.value et ajouté en tant que libellé avec la clé "postal" dans l'attribut tech.
technical_contact.state.value principal.domain.tech.office_address.state Directement mappé à partir du champ technical_contact.state.value dans le journal brut.
technical_contact.street.value principal.domain.tech.office_address.name Directement mappé à partir du champ technical_contact.street.value dans le journal brut.
tld about.labels.tld Directement mappé à partir du champ tld dans le journal brut et ajouté en tant que libellé dans l'objet about.
timestamp about.labels.timestamp Directement mappé à partir du champ timestamp dans le journal brut et ajouté en tant que libellé dans l'objet about.
website_response principal.network.http.response_code Directement mappé à partir du champ website_response dans le journal brut.
website_title about.labels.website_title Directement mappé à partir du champ website_title dans le journal brut et ajouté en tant que libellé dans l'objet about.
whois_url principal.domain.whois_server Directement mappé à partir du champ whois_url dans le journal brut.
yandex_codes.[].value about.labels.yandex_codes Extrait du tableau yandex_codes et ajouté en tant que libellé dans l'objet about.
edr.client.hostname Définissez la valeur du champ domain.
edr.client.ip_addresses Définissez la valeur du premier élément du tableau ip, à savoir ip.[0].address.value.
edr.raw_event_name Définissez sur "STATUS_UPDATE" si principal.hostname est présent, sinon définissez sur "GENERIC_EVENT".
metadata.event_timestamp Copié à partir du champ create_time de premier niveau dans le journal brut.
metadata.event_type Définissez sur "STATUS_UPDATE" si principal.hostname est présent, sinon définissez sur "GENERIC_EVENT".
metadata.log_type Défini sur "DOMAINTOOLS_THREATINTEL".
metadata.product_name Définissez la valeur sur "DOMAINTOOLS".
metadata.vendor_name Définissez la valeur sur "DOMAINTOOLS".

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.