Collecter les résultats de DomainTools Iris Investigate
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
- 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).
- Dans la section Mon compte, sélectionnez le lien Afficher le tableau de bord des API situé dans l'onglet Récapitulatif du compte.
- Accédez à la section Nom d'utilisateur de l'API pour obtenir votre nom d'utilisateur.
- Dans le même onglet, recherchez votre clé API.
- Copiez et enregistrez la clé dans un emplacement sécurisé.
Si vous avez besoin d'une nouvelle clé, sélectionnez Réinitialiser la clé API.
Notez le point de terminaison Iris Investigate :
https://api.domaintools.com/v1/iris-investigate/
.
Configurer un bucket AWS S3 et IAM pour Google SecOps
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Enregistrez le nom et la région du bucket pour référence ultérieure (par exemple,
domaintools-iris
). - Créez un utilisateur en suivant ce guide : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : ajoutez un tag de description.
- Cliquez sur Créer une clé d'accès.
- 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.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer la stratégie et le rôle IAM pour les importations S3
- Dans la console AWS, accédez à IAM > Policies > Create policy > onglet JSON.
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.
- Remplacez
Cliquez sur Suivant > Créer une règle.
Accédez à IAM > Rôles > Créer un rôle > Service AWS > Lambda.
Associez la règle que vous venez de créer.
Nommez le rôle
WriteDomainToolsIrisToS3Role
, puis cliquez sur Créer un rôle.
Créer la fonction Lambda
- Dans la console AWS, accédez à Lambda > Fonctions > Créer une fonction.
- Cliquez sur Créer à partir de zéro.
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
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))
Accédez à Configuration> Variables d'environnement> Modifier> Ajouter une variable d'environnement.
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 Une fois la fonction créée, restez sur sa page (ou ouvrez Lambda > Fonctions > votre-fonction).
Accédez à l'onglet Configuration.
Dans le panneau Configuration générale, cliquez sur Modifier.
Définissez Délai avant expiration sur 15 minutes (900 secondes), puis cliquez sur Enregistrer.
Créer une programmation EventBridge
- Accédez à Amazon EventBridge> Scheduler> Create schedule (Créer une programmation).
- Fournissez les informations de configuration suivantes :
- Planning récurrent : Tarif (
1 hour
). - Cible : votre fonction Lambda.
- Nom :
domaintools-iris-1h
.
- Planning récurrent : Tarif (
- Cliquez sur Créer la programmation.
Facultatif : Créez un utilisateur et des clés IAM en lecture seule pour Google SecOps
- Dans la console AWS, accédez à IAM> Utilisateurs, puis cliquez sur Ajouter des utilisateurs.
- 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.
- Utilisateur : saisissez un nom unique (par exemple,
- 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 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>" } ] }
Définissez le nom sur
secops-reader-policy
.Accédez à Créer une règle > recherchez/sélectionnez > Suivant > Ajouter des autorisations.
Accédez à Identifiants de sécurité > Clés d'accès > Créer une clé d'accès.
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
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
DomainTools Iris Investigate
). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez DomainTools Threat Intelligence comme Type de journal.
- Cliquez sur Suivant.
- 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.
- URI S3 :
- Cliquez sur Suivant.
- 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.