Quando i log di sicurezza sono in BigQuery (da un sink di Cloud Logging, un’esportazione di Google Workspace o la tua pipeline), esportali con EXPORT DATA. Scrive JSON delimitato da nuove righe in un bucket di Cloud Storage, e tu scarichi quello. Per risultati piccoli, bq query –format=json stampa le righe direttamente. In entrambi i casi, filtra prima sulla colonna tempo o partizione della tabella, perché BigQuery fattura sui dati scansionati.
BigQuery è dove molti team di Google Cloud conservano la cronologia dei log molto dopo che la conservazione predefinita di Cloud Logging è passata. Prime Core ha più di 24.000 regole di rilevamento uniche, mappate a 676 tecniche MITRE ATT&CK. Di seguito è riportato come estrarre un frammento, sanificarlo e investigarlo gratuitamente in LogTotal.
Prima di iniziare
Autorizzazioni. È necessario eseguire lavori (Utente Job di BigQuery), leggere il dataset (Visualizzatore Dati BigQuery) e scrivere sul bucket di esportazione.
Conosci le tabelle. Un sink di Cloud Logging su BigQuery crea tabelle denominate in base ai log, ad esempio cloudaudit_googleapis_com_activity, spesso partizionate per timestamp. Le esportazioni di Workspace hanno il loro schema.
Controlla prima il costo. Aggiungi –dry_run a una bq query per vedere quanti byte verrebbero scansionati. Se il numero ti fa sobbalzare, aggiungi un filtro temporale più ristretto.
Opzione 1: EXPORT DATA su Cloud Storage
EXPORT DATA OPTIONS (
uri = 'gs://my-bq-exports/audit-20261019/*.json',
format = 'JSON',
overwrite = true
) AS
SELECT *
FROM `my-project.audit_logs.cloudaudit_googleapis_com_activity`
WHERE timestamp >= TIMESTAMP('2026-10-19') AND timestamp < TIMESTAMP('2026-10-20');
L’URI ha bisogno di un carattere jolly (*), perché BigQuery potrebbe scrivere diversi file. Scaricali e combinagli:
gcloud storage cp 'gs://my-bq-exports/audit-20261019/*' ./audit-20261019/
cat ./audit-20261019/*.json > bq_audit_20261019.jsonl
Opzione 2: bq query per risultati piccoli
bq query --nouse_legacy_sql --format=json --max_rows=10000
'SELECT * FROM `my-project.audit_logs.cloudaudit_googleapis_com_activity`
WHERE timestamp >= TIMESTAMP("2026-10-19") AND timestamp < TIMESTAMP("2026-10-20")'
> bq_audit_small.json
jq -c '.[]' bq_audit_small.json > bq_audit_small.jsonl
–format=json stampa un array JSON, che jq appiattisce in una riga per linea.
Carica, sanifica e rivedi in LogTotal
- Carica. Apri logtotal.com e trascina il file .jsonl.
- Sanificare.
- Rivedi.
Quando qualcosa va storto
| Sintomo | Causa probabile | Fix |
|---|---|---|
| La query scansiona tutta la tabella | Nessun filtro sulla colonna di partizione o tempo | Filtra sul timestamp (o _PARTITIONTIME) |
| EXPORT DATA fallisce sull’URI | Nessun carattere jolly nell’URI | Usa …/*.json |
| Permesso negato nella scrittura sul bucket | Diritti di creazione oggetti di Storage mancanti | Concedi l’accesso in scrittura sul bucket |
| Output bq tagliato a 100 righe | Default –max_rows | Imposta –max_rows, o usa EXPORT DATA |
| Campi nidificati sembrano strani | Le colonne annidate e ripetute mantengono la loro struttura | Previsto; è comunque JSON valido |
FAQ
È lo stesso dell’esportazione da Cloud Logging?
No. Cloud Logging ha la sua esportazione. Questa guida è per i log che vivono già in tabelle BigQuery.
Posso esportare un’intera tabella senza una query
Sì: bq extract –destination_format NEWLINE_DELIMITED_JSON copia una tabella o una partizione su Cloud Storage. Per le investigazioni, di solito è meglio una query filtrata.