I “log Snowflake” possono significare due cose, e l’esportazione funziona allo stesso modo per entrambe. Possono essere dati di sicurezza che il tuo team memorizza nelle tabelle Snowflake. Oppure possono essere i propri audit trail di Snowflake, le viste SNOWFLAKE.ACCOUNT_USAGE come LOGIN_HISTORY e QUERY_HISTORY. Per piccoli prelievi, esegui la query in SnowSQL con output JSON. Per anything bigger, scarica con COPY INTO uno stage utilizzando FILE_FORMAT = (TYPE = JSON), e scarica i file con GET.
I log di Snowflake hanno attirato molta attenzione nel 2024, quando gli aggressori hanno utilizzato credenziali rubate per accedere agli account dei clienti che non applicavano l’MFA. Ora la cronologia degli accessi e delle query è una richiesta standard in un’indagine. Prime Core ha oltre 24.000 regole di rilevamento uniche, mappate su 676 tecniche MITRE ATT&CK. Di seguito ecco come estrarre i dati, sanificarli e indagarli gratuitamente in LogTotal.
Prima di iniziare
Accesso a ACCOUNT_USAGE. Per impostazione predefinita, solo ACCOUNTADMIN può leggere queste viste. Altri ruoli necessitano del grant IMPORTED PRIVILEGES sul database SNOWFLAKE, o uno dei suoi ruoli di database.
Latenza e conservazione. Le viste ACCOUNT_USAGE mantengono un anno di cronologia ma ritardano fino a un paio d’ore. Per gli ultimi sette giorni senza ritardo, la funzione della tabella INFORMATION_SCHEMA.LOGIN_HISTORY è un’alternativa.
Un magazzino. Le query e gli scaricamenti richiedono un magazzino attivo e consumano crediti. Filtra per tempo.
Opzione 1: SnowSQL con output JSON (piccoli prelievi)
snowsql -q "SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE EVENT_TIMESTAMP >= '2026-10-19' AND EVENT_TIMESTAMP < '2026-10-20'"
-o output_format=json -o friendly=false -o timing=false > sf_logins_1019.json
jq -c '.[]' sf_logins_1019.json > sf_logins_1019.jsonl
Opzione 2: Scaricare in uno stage (esportazioni più grandi)
COPY INTO @~/exports/login_history_1019/
FROM (
SELECT OBJECT_CONSTRUCT(*)
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE EVENT_TIMESTAMP >= '2026-10-19' AND EVENT_TIMESTAMP < '2026-10-20'
)
FILE_FORMAT = (TYPE = JSON COMPRESSION = NONE)
OVERWRITE = TRUE;
Gli scaricamenti JSON necessitano di una singola colonna, per questo la query avvolge ogni riga in OBJECT_CONSTRUCT(*). Quella funzione esclude i campi NULL. Quindi scaricare dal vostro user stage (@~):
GET @~/exports/login_history_1019/ file:///tmp/sf_export/;
e combina i file con cat /tmp/sf_export/* > sf_logins_1019.jsonl. Lo stesso schema funziona per le vostre tabelle di sicurezza. Sostituisci col nome della tabella e la sua colonna timestamp.
Cosa cercare nella cronologia degli accessi
Cerca accessi falliti (IS_SUCCESS = ‘NO’) in sequenze, e accessi con password senza un secondo fattore (SECOND_AUTHENTICATION_FACTOR vuoto). Nota gli accessi dagli IP client e dai tipi di client che non riconosci. Segui poi quelle sessioni su QUERY_HISTORY per vedere cosa è stato letto.
Carica, sanifica e rivedi in LogTotal
- Carica. Apri logtotal.com e trascina il file .jsonl.
- Sanifica.
- Rivedi.
Quando qualcosa va storto
| Sintomo | Causa probabile | Fix |
|---|---|---|
| L’oggetto non esiste o non autorizzato su ACCOUNT_USAGE | Il ruolo manca di accesso al database SNOWFLAKE | Richiedi IMPORTED PRIVILEGES o un ruolo di database |
| Gli accessi di oggi sono mancanti | Latenza di ACCOUNT_USAGE | Usa INFORMATION_SCHEMA.LOGIN_HISTORY per eventi recenti |
| Errore COPY INTO riguardo le colonne | Lo scaricamento JSON richiede una colonna | Riveste le righe in OBJECT_CONSTRUCT(*) |
| Campi mancanti nel JSON | OBJECT_CONSTRUCT elimina i valori NULL | Previsto; assente significa NULL |
| GET fallisce | Non eseguito da SnowSQL o il CLI di Snowflake | GET eseguito da un client, non dall’interfaccia web |
FAQ
Posso farlo nell’interfaccia web?
Query, sì. Gli scaricamenti dall’interfaccia web non sono JSON. Il percorso client sopra ti dà linee JSON.
Che dire delle tabelle degli eventi di Snowflake?
Le tabelle degli eventi contengono log e tracciamenti dalle tue funzioni e app. Esportali allo stesso modo di qualsiasi tabella.