Collecter les journaux DNS personnalisés

Version de l'analyseur : 1.0

Compatible avec :

Ce document explique comment ingérer des journaux DNS personnalisés dans Google Security Operations à l'aide de Google Cloud Storage V2.

Le DNS personnalisé est un type de journal générique pour les journaux de serveur DNS provenant d'implémentations DNS personnalisées ou non compatibles. Il capture les données de requête et de réponse DNS, y compris les domaines, les types d'enregistrements et les informations sur le client. Étant donné que ces journaux proviennent de sources DNS non standards, vous devez les exporter vers un bucket Google Cloud Storage (GCS), puis configurer un flux Google SecOps pour les ingérer.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Un projet Google Cloud avec l'API Cloud Storage activée
  • Autorisations permettant de créer et de gérer des buckets GCS
  • Autorisations permettant de gérer les stratégies IAM sur les buckets GCS
  • Un serveur ou un service DNS générant des journaux dans un format compatible (JSON recommandé)
  • Accès administrateur au serveur DNS pour configurer l'exportation des journaux

Créer un bucket Google Cloud Storage

  1. Accédez à la console Google Cloud.
  2. Sélectionnez votre projet ou créez-en un.
  3. Dans le menu de navigation, accédez à Cloud Storage > Buckets.
  4. Cliquez sur Créer un bucket.
  5. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Attribuez un nom au bucket Saisissez un nom unique (par exemple, custom-dns-logs).
    Type d'emplacement Choisissez en fonction de vos besoins (région, birégion, multirégion).
    Emplacement Sélectionnez l'emplacement le plus proche de votre instance Google SecOps (par exemple, us-central1).
    Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment)
    Access control (Contrôle des accès) Uniforme (recommandé)
    Outils de protection Facultatif : Activez la gestion des versions des objets ou la règle de conservation.
  6. Cliquez sur Créer.

Configurer une exportation automatique des journaux DNS vers GCS

La méthode d'exportation des journaux DNS dépend de l'implémentation de votre serveur DNS. Choisissez l'approche qui correspond le mieux à votre environnement.

Option 1 : Récepteur Cloud Logging (pour les serveurs DNS sur GCE)

Si votre serveur DNS s'exécute sur une instance Google Compute Engine et enregistre les journaux dans Cloud Logging, créez un récepteur de journaux pour exporter les journaux DNS directement vers GCS.

  1. Dans la console GCP, accédez à Logging > Routeur de journaux.
  2. Cliquez sur Créer un récepteur.
  3. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Nom du récepteur custom-dns-to-gcs
    Destination du récepteur Bucket Cloud Storage
    Catégorie custom-dns-logs
    Filtre d'inclusion Un filtre correspondant à vos entrées de journal DNS (par exemple, resource.type="gce_instance" AND logName="projects/YOUR_PROJECT_ID/logs/dns")
  4. Cliquez sur Créer un récepteur.

Option 2 : Cloud Scheduler avec Cloud Build (pour les serveurs DNS sur site)

Utilisez Cloud Build déclenché par Cloud Scheduler pour exécuter un job d'exportation conteneurisé qui collecte les journaux DNS à partir d'un serveur distant et les écrit dans GCS.

  1. Créez un compte de service pour le job d'exportation :

    1. Dans la console GCP, accédez à IAM et administration > Comptes de service.
    2. Cliquez sur Créer un compte de service.
    3. Fournissez les informations de configuration suivantes :
      • Nom du compte de service : saisissez dns-log-export-sa.
      • Description du compte de service : saisissez Service account for automated DNS log export to GCS.
    4. Cliquez sur Créer et continuer.
    5. Ajoutez les rôles suivants :
      • Administrateur des objets Storage (pour écrire des fichiers dans GCS)
      • Éditeur Cloud Build (pour exécuter des jobs Cloud Build)
    6. Cliquez sur OK.
  2. Créez un fichier de configuration Cloud Build (cloudbuild.yaml) :

    steps:
      - name: 'gcr.io/cloud-builders/gcloud'
        entrypoint: 'bash'
        args:
          - '-c'
          - |
            # Collect DNS logs from your server
            # Replace with the actual command for your environment
            # Example: pull logs via syslog-ng, rsync from remote server, or query DNS log API
            curl -s -H "Authorization: Bearer $${API_TOKEN}" \
              "https://your-dns-server.example.com/api/logs?format=json" \
              -o /workspace/dns_logs.json
            # Upload to GCS
            gcloud storage cp /workspace/dns_logs.json \
              gs://${_BUCKET_NAME}/dns/dns_logs_$(date -u +%Y%m%d_%H%M%S).json
    substitutions:
      _BUCKET_NAME: 'custom-dns-logs'
    
  3. Créez un job Cloud Scheduler pour déclencher la compilation :

    1. Dans la console GCP, accédez à Cloud Scheduler.
    2. Cliquez sur Créer une tâche.
    3. Fournissez les informations de configuration suivantes :

      Paramètre Valeur
      Nom dns-log-export-hourly
      Région Sélectionnez la même région que votre bucket GCS.
      Fréquence 0 * * * * (toutes les heures)
      Fuseau horaire UTC (recommandé)
      Type de cible HTTP
      URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/builds
      Méthode HTTP POST
      En-tête d'authentification Ajouter un jeton OAuth
      Compte de service dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com
    4. Cliquez sur Créer.

Option 3 : Service de transfert de stockage (pour les systèmes de fichiers sur site)

Si les journaux DNS sont écrits dans un système de fichiers local, utilisez le service de transfert de stockage avec un agent de transfert pour les déplacer vers GCS.

  1. Dans la console GCP, accédez à Service de transfert de stockage.
  2. Cliquez sur Créer un job de transfert.
  3. Sélectionnez Système de fichiers POSIX comme source.
  4. Suivez les instructions pour installer l'agent Storage Transfer sur le serveur DNS ou sur une machine ayant accès aux fichiers journaux DNS.
  5. Configurez la tâche de transfert :

    Paramètre Valeur
    Répertoire source Chemin d'accès au répertoire du fichier journal DNS
    Bucket de destination custom-dns-logs
    Chemin de destination dns/
    Programmation Définir une programmation récurrente (par exemple, toutes les heures)
  6. Cliquez sur Créer.

Récupérer le compte de service Google SecOps

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Ajouter un flux.
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Custom DNS Logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez DNS personnalisé comme Type de journal.
  7. Cliquez sur Obtenir un compte de service.
  8. Une adresse e-mail de compte de service unique s'affiche, par exemple :

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copiez cette adresse e-mail pour l'utiliser à l'étape suivante.

Accorder des autorisations IAM au compte de service Google SecOps

Le compte de service Google SecOps a besoin du rôle Lecteur des objets Storage sur votre bucket GCS.

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket (par exemple, custom-dns-logs).
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps (par exemple, chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com).
    • Attribuer des rôles : sélectionnez Lecteur d'objets Storage.
  6. Cliquez sur Enregistrer.

Configurer le flux Google SecOps

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Ajouter un flux.
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Custom DNS Logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez DNS personnalisé comme Type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URI du bucket de stockage : saisissez l'URI du bucket GCS :

      gs://custom-dns-logs/dns/
      
      • Remplacez custom-dns-logs par le nom de votre bucket GCS.
      • Remplacez dns par le chemin d'accès du préfixe que vous avez configuré.
    • Option de suppression de la source : sélectionnez l'option de suppression de votre choix :

      • Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
      • Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides une fois le transfert réussi.

    • Âge maximal du fichier : incluez les fichiers modifiés au cours des derniers jours (180 jours par défaut).

    • Espace de noms de l'élément : espace de noms de l'élément.

    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux.

  9. Cliquez sur Suivant.

  10. 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
receiveTimestamp metadata.event_timestamp Analysé en tant que RFC 3339
message metadata.event_type Mappé : "dns_query" → NETWORK_DNS
jsonPayload.msg metadata.product_event_type Mappé directement
insertId metadata.product_log_id Mappé directement
message metadata.product_name Mappé : "dns_query" → Custom DNS
message metadata.vendor_name Mappé : "dns_query" → CUSTOM
message network.application_protocol Mappé : "dns_query" → DNS
dns_answers network.dns.answers Fusionné
message network.dns.answers Mappé : "dns_query" → dns_answers
dns_question network.dns.questions Fusionné
message network.dns.questions Mappé : "dns_query" → dns_question
dns.response_code network.dns.response_code Renommé/Mappé
message principal.hostname Mappé : "dns_query" → jsonPayload.dns_query.server
jsonPayload.dns_query.server principal.ip Fusionné
message principal.ip Mappé : "dns_query" → jsonPayload.dns_query.server
message security_result Mappé : "dns_query" → security_result
logName security_result.category_details Fusionné
message security_result.category_details Mappé : "dns_query" → logName
message security_result.severity Mappé : "dns_query" → INFORMATIONAL, "dns_query" → MEDIUM, "dns_query" → HIGH
labels.application target.application Mappé directement
message target.hostname Mappé : "dns_query" → jsonPayload.dns_query.server
jsonPayload.dns_query.server target.ip Fusionné
message target.ip Mappé : "dns_query" → jsonPayload.dns_query.server
component_label target.labels Fusionné
instance_group_label target.labels Fusionné
message target.labels Mappé : "dns_query" → component_label, "dns_query" → instance_group_label
labels.region target.location.country_or_region Mappé directement
resource.labels.zone target.resource.attribute.cloud.availability_zone Mappé directement
message target.resource.attribute.cloud.environment Mappé : "dns_query" → GOOGLE_CLOUD_PLATFORM
resource.labels.project_id target.resource.attribute.cloud.project.id Mappé directement
message target.resource.resource_type Mappé : "dns_query" → VIRTUAL_MACHINE
N/A metadata.event_type Constante : NETWORK_DNS
N/A metadata.product_name Constante : Custom DNS
N/A metadata.vendor_name Constante : CUSTOM
N/A network.application_protocol Constante : DNS
N/A principal.hostname Constante : jsonPayload.dns_query.server
N/A security_result.severity Constante : INFORMATIONAL
N/A target.hostname Constante : jsonPayload.dns_query.server
N/A target.resource.attribute.cloud.environment Constante : GOOGLE_CLOUD_PLATFORM
N/A target.resource.resource_type Constante : VIRTUAL_MACHINE

Journal des modifications

Afficher le journal des modifications pour ce parseur

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