Raccogli i log DNS personalizzati

Parser Version: 1.0

Supportato in:

Questo documento spiega come importare i log DNS personalizzati in Google Security Operations utilizzando Google Cloud Storage V2.

DNS personalizzato è un tipo di log generico per i log del server DNS provenienti da implementazioni DNS personalizzate o non supportate. Acquisisce i dati di query DNS e risposta, inclusi domini, tipi di record e informazioni sul client. Poiché questi log provengono da origini DNS non standard, devi esportarli in un bucket Google Cloud Storage (GCS) e poi configurare un feed Google SecOps per importarli.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Un progetto cloud Google Cloud con l'API Storage Cloud Storage abilitata
  • Autorizzazioni per creare e gestire bucket GCS
  • Autorizzazioni per gestire le policy IAM nei bucket GCS
  • Un server o un servizio DNS che genera log in un formato supportato (consigliato JSON)
  • Accesso amministrativo al server DNS per configurare le esportazioni dei log

Crea un bucket Google Cloud Storage

  1. Vai alla console Google Cloud.
  2. Seleziona il tuo progetto o creane uno nuovo.
  3. Nel menu di navigazione, vai a Cloud Storage > Bucket.
  4. Fai clic su Crea bucket.
  5. Fornisci i seguenti dettagli di configurazione:

    Impostazione Valore
    Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio custom-dns-logs).
    Tipo di località Scegli in base alle tue esigenze (regione singola, a due regioni, multiregionale)
    Località Seleziona la località più vicina alla tua istanza Google SecOps (ad esempio us-central1).
    Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente)
    Controllo degli accessi Uniforme (consigliato)
    Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o la policy di conservazione
  6. Fai clic su Crea.

Configura un'esportazione automatica dei log DNS in GCS

Il metodo di esportazione dei log DNS dipende dall'implementazione del server DNS. Scegli l'approccio più adatto al tuo ambiente.

Opzione 1: sink Cloud Logging (per i server DNS su GCE)

Se il server DNS viene eseguito su un'istanza Google Compute Engine e registra i log in Cloud Logging, crea un sink di log per esportare i log DNS direttamente in GCS.

  1. Nella console Google Cloud, vai a Logging > Router dei log.
  2. Fai clic su Crea sink.
  3. Fornisci i seguenti dettagli di configurazione:

    Impostazione Valore
    Nome sink custom-dns-to-gcs
    Destinazione sink Bucket Cloud Storage
    Bucket custom-dns-logs
    Filtro di inclusione Un filtro che corrisponda alle tue voci di log DNS (ad esempio, resource.type="gce_instance" AND logName="projects/YOUR_PROJECT_ID/logs/dns")
  4. Fai clic su Crea sink.

Opzione 2: Cloud Scheduler con Cloud Build (per server DNS on-premise)

Utilizza Cloud Build attivato da Cloud Scheduler per eseguire un job di esportazione in container che raccoglie i log DNS da un server remoto e li scrive in GCS.

  1. Crea un account di servizio per il job di esportazione:

    1. Nella console Google Cloud, vai a IAM e amministrazione > Service account.
    2. Fai clic su Crea account di servizio.
    3. Fornisci i seguenti dettagli di configurazione:
      • Nome del service account: inserisci dns-log-export-sa
      • Descrizione service account: inserisci Service account for automated DNS log export to GCS
    4. Fai clic su Crea e continua.
    5. Aggiungi i seguenti ruoli:
      • Storage Object Admin (per scrivere file in GCS)
      • Editor Cloud Build (per eseguire i job Cloud Build)
    6. Fai clic su Fine.
  2. Crea un file di configurazione di 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. Crea un job Cloud Scheduler per attivare la build:

    1. Nella console Google Cloud, vai a Cloud Scheduler.
    2. Fai clic su Crea job.
    3. Fornisci i seguenti dettagli di configurazione:

      Impostazione Valore
      Nome dns-log-export-hourly
      Regione Seleziona la stessa regione del bucket GCS
      Frequenza 0 * * * * (ogni ora)
      Fuso orario UTC (consigliato)
      Tipo di target HTTP
      URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/builds
      Metodo HTTP POST
      Intestazione autorizzazione Aggiungi un token OAuth
      Service account dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com
    4. Fai clic su Crea.

Opzione 3: Storage Transfer Service (per i file system on-premise)

Se i log DNS vengono scritti in un file system locale, utilizza Storage Transfer Service con un agente di trasferimento per spostarli in GCS.

  1. Nella console GCP, vai a Storage Transfer Service.
  2. Fai clic su Crea job di trasferimento.
  3. Seleziona File system POSIX come origine.
  4. Segui le istruzioni per installare Storage Transfer Agent sul server DNS o su una macchina con accesso ai file di log DNS.
  5. Configura il job di trasferimento:

    Impostazione Valore
    Directory di origine Percorso della directory del file di log DNS
    Bucket di destinazione custom-dns-logs
    Percorso di destinazione dns/
    Programmazione Impostare una programmazione ricorrente (ad esempio, ogni ora)
  6. Fai clic su Crea.

Recuperare il account di servizio Google SecOps

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Custom DNS Logs).
  5. Seleziona Google Cloud Storage V2 come Tipo di origine.
  6. Seleziona DNS personalizzato come Tipo di log.
  7. Fai clic su Ottieni service account.
  8. Verrà visualizzato un indirizzo email del account di servizio univoco, ad esempio:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copia questo indirizzo email per utilizzarlo nel passaggio successivo.

Concedi le autorizzazioni IAM al account di servizio Google SecOps

Il account di servizio Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel tuo bucket GCS.

  1. Vai a Cloud Storage > Bucket.
  2. Fai clic sul nome del bucket (ad esempio custom-dns-logs).
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:
    • Aggiungi entità: incolla l'email dell'account di servizio Google SecOps (ad esempio, chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com).
    • Assegna ruoli: seleziona Visualizzatore oggetti Storage.
  6. Fai clic su Salva.

Configura il feed Google SecOps

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Custom DNS Logs).
  5. Seleziona Google Cloud Storage V2 come Tipo di origine.
  6. Seleziona DNS personalizzato come Tipo di log.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input:

    • URI bucket di archiviazione: inserisci l'URI del bucket GCS:

      gs://custom-dns-logs/dns/
      
      • Sostituisci custom-dns-logs con il nome del tuo bucket GCS.
      • Sostituisci dns con il percorso del prefisso configurato.
    • Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:

      • Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
      • Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.

    • Età massima file: includi i file modificati nell'ultimo numero di giorni (il valore predefinito è 180 giorni).

    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.

    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.

  9. Fai clic su Avanti.

  10. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
receiveTimestamp metadata.event_timestamp Analizzato come RFC 3339
message metadata.event_type Mappato: "dns_query" → NETWORK_DNS
jsonPayload.msg metadata.product_event_type Mappato direttamente
insertId metadata.product_log_id Mappato direttamente
message metadata.product_name Mappato: "dns_query" → Custom DNS
message metadata.vendor_name Mappato: "dns_query" → CUSTOM
message network.application_protocol Mappato: "dns_query" → DNS
dns_answers network.dns.answers Unita
message network.dns.answers Mappato: "dns_query" → dns_answers
dns_question network.dns.questions Unita
message network.dns.questions Mappato: "dns_query" → dns_question
dns.response_code network.dns.response_code Rinominate/mappate
message principal.hostname Mappato: "dns_query" → jsonPayload.dns_query.server
jsonPayload.dns_query.server principal.ip Unita
message principal.ip Mappato: "dns_query" → jsonPayload.dns_query.server
message security_result Mappato: "dns_query" → security_result
logName security_result.category_details Unita
message security_result.category_details Mappato: "dns_query" → logName
message security_result.severity Mappato: "dns_query" → INFORMATIONAL, "dns_query" → MEDIUM, "dns_query" → HIGH
labels.application target.application Mappato direttamente
message target.hostname Mappato: "dns_query" → jsonPayload.dns_query.server
jsonPayload.dns_query.server target.ip Unita
message target.ip Mappato: "dns_query" → jsonPayload.dns_query.server
component_label target.labels Unita
instance_group_label target.labels Unita
message target.labels Mappato: "dns_query" → component_label, "dns_query" → instance_group_label
labels.region target.location.country_or_region Mappato direttamente
resource.labels.zone target.resource.attribute.cloud.availability_zone Mappato direttamente
message target.resource.attribute.cloud.environment Mappato: "dns_query" → GOOGLE_CLOUD_PLATFORM
resource.labels.project_id target.resource.attribute.cloud.project.id Mappato direttamente
message target.resource.resource_type Mappato: "dns_query" → VIRTUAL_MACHINE
N/D metadata.event_type Costante: NETWORK_DNS
N/D metadata.product_name Costante: Custom DNS
N/D metadata.vendor_name Costante: CUSTOM
N/D network.application_protocol Costante: DNS
N/D principal.hostname Costante: jsonPayload.dns_query.server
N/D security_result.severity Costante: INFORMATIONAL
N/D target.hostname Costante: jsonPayload.dns_query.server
N/D target.resource.attribute.cloud.environment Costante: GOOGLE_CLOUD_PLATFORM
N/D target.resource.resource_type Costante: VIRTUAL_MACHINE

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.