Comment Exporter les Journaux Snowflake

Comment Exporter les Journaux Snowflake

SOC Prime Team
SOC Prime Team linkedin icon Suivre

Les « journaux Snowflake » signifient deux choses, et l’exportation fonctionne de la même manière pour les deux. Cela peut être des données de sécurité que votre équipe stocke dans des tables Snowflake. Ou il peut s’agir de la propre piste d’audit de Snowflake, les vues SNOWFLAKE.ACCOUNT_USAGE telles que LOGIN_HISTORY et QUERY_HISTORY. Pour de petites extractions, exécutez la requête dans SnowSQL avec une sortie JSON. Pour tout ce qui est plus grand, déchargez avec COPY INTO un stage en utilisant FILE_FORMAT = (TYPE = JSON), et téléchargez les fichiers avec GET.

Les propres journaux de Snowflake ont attiré beaucoup d’attention en 2024, lorsque des attaquants ont utilisé des identifiants volés pour se connecter à des comptes clients qui n’appliquaient pas MFA. L’historique de connexion et de requête sont désormais des demandes standard dans une enquête. Prime Core dispose de plus de 24 000 règles de détection uniques, mappées à 676 techniques MITRE ATT&CK. Voici comment extraire les données, les assainir et les enquêter gratuitement dans LogTotal.

Avant de commencer

Accès à ACCOUNT_USAGE. Par défaut, seul ACCOUNTADMIN peut lire ces vues. Les autres rôles ont besoin de la subvention IMPORTED PRIVILEGES sur la base de données SNOWFLAKE, ou de l’un de ses rôles de base de données.

Latence et rétention. Les vues ACCOUNT_USAGE conservent un an d’historique mais accusent un retard pouvant aller jusqu’à quelques heures. Pour les sept derniers jours sans décalage, la fonction de table INFORMATION_SCHEMA.LOGIN_HISTORY est une alternative.

Un entrepôt. Les requêtes et déchargements nécessitent un entrepôt en cours d’exécution, et ils consomment des crédits. Filtrer par heure.

Option 1 : SnowSQL avec sortie JSON (petites extractions)

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

Option 2 : Décharger vers un stage (grandes exportations)

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;

Les déchargements JSON nécessitent une seule colonne, c’est pourquoi la requête enroule chaque ligne dans OBJECT_CONSTRUCT(*). Cette fonction omet les champs NULL. Ensuite téléchargez depuis votre user stage (@~) :

GET @~/exports/login_history_1019/ file:///tmp/sf_export/;

et combinez les fichiers avec cat /tmp/sf_export/* > sf_logins_1019.jsonl. Le même schéma fonctionne pour vos propres tables de sécurité. Remplacez par le nom de la table et sa colonne timestamp.

Que chercher dans l’historique des connexions

Recherchez les connexions échouées (IS_SUCCESS = ‘NO’) en rafales, et les connexions par mot de passe sans second facteur (SECOND_AUTHENTICATION_FACTOR vide). Notez les connexions à partir d’IP et de types de clients que vous ne reconnaissez pas. Ensuite, suivez ces sessions dans QUERY_HISTORY pour voir ce qui a été lu.

Téléchargez, assainissez et examinez dans LogTotal

  1. Téléchargez. Ouvrir logtotal.com et déposez le fichier .jsonl.
  2. Assainissez. 
  3. Examinez. 

Quand ça va mal

SymptômeCause probableFix
Objet n’existe pas ou non autorisé sur ACCOUNT_USAGELe rôle n’a pas accès à la base de données SNOWFLAKEDemander des IMPORTED PRIVILEGES ou un rôle de base de données
Connexions de la journée manquantesLatence ACCOUNT_USAGEUtilisez INFORMATION_SCHEMA.LOGIN_HISTORY pour les événements récents
Erreur COPY INTO concernant les colonnesLe déchargement JSON nécessite une colonneEnveloppez les lignes dans OBJECT_CONSTRUCT(*)
Champs manquants dans le JSONOBJECT_CONSTRUCT omet les valeurs NULLAttendu; absent signifie NULL
Échec de GETNon exécuté depuis SnowSQL ou le CLI SnowflakeGET s’exécute depuis un client, pas l’interface web

FAQ

Puis-je faire cela dans l’interface web ?

Requêtes, oui. Les téléchargements depuis l’interface web ne sont pas en JSON. La route client ci-dessus vous fournit des lignes JSON.

Qu’en est-il des tables d’événements Snowflake ?

Les tables d’événements contiennent des journaux et traces de vos propres fonctions et applications. Exportez-les de la même manière que n’importe quelle table.

Rejoignez la plateforme Detection as Code de SOC Prime pour améliorer la visibilité sur les menaces les plus pertinentes pour votre entreprise. Pour vous aider à démarrer et à générer une valeur immédiate, planifiez dès maintenant une réunion avec des experts de SOC Prime.