Raccogli i log DNS personalizzati
Parser Version: 1.0
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
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
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 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.
- Nella console Google Cloud, vai a Logging > Router dei log.
- Fai clic su Crea sink.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Nome sink custom-dns-to-gcsDestinazione sink Bucket Cloud Storage Bucket custom-dns-logsFiltro 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")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.
Crea un account di servizio per il job di esportazione:
- Nella console Google Cloud, vai a IAM e amministrazione > Service account.
- Fai clic su Crea account di servizio.
- 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
- Nome del service account: inserisci
- Fai clic su Crea e continua.
- Aggiungi i seguenti ruoli:
- Storage Object Admin (per scrivere file in GCS)
- Editor Cloud Build (per eseguire i job Cloud Build)
- Fai clic su Fine.
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'Crea un job Cloud Scheduler per attivare la build:
- Nella console Google Cloud, vai a Cloud Scheduler.
- Fai clic su Crea job.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Nome dns-log-export-hourlyRegione 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/buildsMetodo HTTP POST Intestazione autorizzazione Aggiungi un token OAuth Service account dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.comFai 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.
- Nella console GCP, vai a Storage Transfer Service.
- Fai clic su Crea job di trasferimento.
- Seleziona File system POSIX come origine.
- Segui le istruzioni per installare Storage Transfer Agent sul server DNS o su una macchina con accesso ai file di log DNS.
Configura il job di trasferimento:
Impostazione Valore Directory di origine Percorso della directory del file di log DNS Bucket di destinazione custom-dns-logsPercorso di destinazione dns/Programmazione Impostare una programmazione ricorrente (ad esempio, ogni ora) Fai clic su Crea.
Recuperare il account di servizio Google SecOps
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Custom DNS Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona DNS personalizzato come Tipo di log.
- Fai clic su Ottieni service account.
Verrà visualizzato un indirizzo email del account di servizio univoco, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia 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.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
custom-dns-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- 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.
- Aggiungi entità: incolla l'email dell'account di servizio Google SecOps (ad esempio,
Fai clic su Salva.
Configura il feed Google SecOps
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Custom DNS Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona DNS personalizzato come Tipo di log.
- Fai clic su Avanti.
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-logscon il nome del tuo bucket GCS. - Sostituisci
dnscon il percorso del prefisso configurato.
- Sostituisci
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.
Fai clic su Avanti.
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.