Collecter les journaux Snowflake
Ce document explique comment ingérer des journaux Snowflake dans Google Security Operations. Vous pouvez configurer l'ingestion à l'aide de deux méthodes : Cloud Storage V2 (recommandée) ou Amazon S3 V2. Les deux méthodes utilisent le même mécanisme côté Snowflake : une tâche planifiée décharge les données d'utilisation du compte vers un emplacement externe, et Google SecOps lit les fichiers exportés avec un flux.
Snowflake est une plate-forme de données cloud qui stocke l'activité du compte dans le schéma SNOWFLAKE.ACCOUNT_USAGE. La vue LOGIN_HISTORY enregistre les tentatives d'authentification, y compris l'adresse IP du client, le facteur d'authentification et la raison de l'échec. La vue QUERY_HISTORY enregistre chaque instruction exécutée dans le compte, y compris l'utilisateur, le rôle, l'entrepôt et les objets concernés.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Accès à Snowflake avec un rôle permettant de créer des intégrations de stockage (seul
ACCOUNTADMINdispose de ce droit par défaut), des bases de données, des entrepôts, des zones de préparation et des tâches - Pour Cloud Storage V2 : un projet Google Cloud avec l'API Cloud Storage activée, ainsi que les autorisations permettant de créer des buckets, des rôles Identity and Access Management (IAM) et de gérer les stratégies IAM des buckets
- Pour Amazon S3 V2 : accès privilégié à AWS pour créer des buckets S3, des stratégies IAM, des rôles IAM et des utilisateurs IAM
Accorder l'accès aux données d'utilisation du compte Snowflake
Les vues SNOWFLAKE.ACCOUNT_USAGE ne sont lisibles par ACCOUNTADMIN que jusqu'à ce que l'accès soit explicitement accordé. Créez un rôle dédié à l'exportation et accordez-lui les deux rôles de base de données qui couvrent les vues exportées par ce document.
- Connectez-vous à Snowflake et ouvrez une feuille de calcul.
Créez le rôle d'exportation et accordez-lui l'accès en lecture aux vues d'utilisation du compte comme suit :
USE ROLE ACCOUNTADMIN; CREATE ROLE IF NOT EXISTS SECOPS_EXPORTER; GRANT DATABASE ROLE SNOWFLAKE.SECURITY_VIEWER TO ROLE SECOPS_EXPORTER; GRANT DATABASE ROLE SNOWFLAKE.GOVERNANCE_VIEWER TO ROLE SECOPS_EXPORTER;Créez la base de données, le schéma et l'entrepôt utilisés par l'exportation, puis accordez-leur le rôle comme suit :
CREATE DATABASE IF NOT EXISTS SECOPS_EXPORT; CREATE SCHEMA IF NOT EXISTS SECOPS_EXPORT.ACTIVITY; CREATE WAREHOUSE IF NOT EXISTS SECOPS_EXPORT_WH WITH WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE INITIALLY_SUSPENDED = TRUE; GRANT USAGE ON DATABASE SECOPS_EXPORT TO ROLE SECOPS_EXPORTER; GRANT USAGE, CREATE STAGE, CREATE TABLE, CREATE PROCEDURE, CREATE TASK, CREATE FILE FORMAT ON SCHEMA SECOPS_EXPORT.ACTIVITY TO ROLE SECOPS_EXPORTER; GRANT USAGE, OPERATE ON WAREHOUSE SECOPS_EXPORT_WH TO ROLE SECOPS_EXPORTER; GRANT EXECUTE TASK ON ACCOUNT TO ROLE SECOPS_EXPORTER; GRANT ROLE SECOPS_EXPORTER TO USER <YOUR_USER>;- Remplacez
<YOUR_USER>par l'utilisateur Snowflake propriétaire de l'exportation.
- Remplacez
Méthode 1 : Cloud Storage V2 (recommandée)
Créer un bucket Cloud Storage
- Accédez à la consoleGoogle Cloud .
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage > Buckets.
- Cliquez sur Créer un bucket.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Attribuez un nom au bucket Saisissez un nom unique (par exemple, snowflake-activity-logs).Type d'emplacement Choisissez en fonction de vos besoins (région, birégion, multirégion). Emplacement Sélectionnez l'emplacement (par exemple, us-central1).Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment) Access control (Contrôle des accès) Uniforme (recommandé) Outils de protection Facultatif : Activez la gestion des versions des objets ou la règle de conservation. Cliquez sur Créer.
Créer un rôle Cloud Storage personnalisé pour Snowflake
- Dans la console Google Cloud , accédez à IAM et administration > Rôles.
- Cliquez sur Créer un rôle.
- Fournissez les informations de configuration suivantes :
- Titre : saisissez
Snowflake Unload. - ID : saisissez
snowflake_unload. - Étape de lancement du rôle : sélectionnez Disponibilité générale.
- Titre : saisissez
- Cliquez sur Ajouter des autorisations, puis ajoutez les autorisations suivantes :
storage.buckets.getstorage.objects.createstorage.objects.deletestorage.objects.list
Cliquez sur Créer.
Créer l'intégration du stockage Snowflake pour Cloud Storage
Dans une feuille de calcul Snowflake, créez l'intégration de stockage comme suit :
USE ROLE ACCOUNTADMIN; CREATE STORAGE INTEGRATION SECOPS_GCS_INT TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'GCS' ENABLED = TRUE STORAGE_ALLOWED_LOCATIONS = ('gcs://snowflake-activity-logs/snowflake/'); GRANT USAGE ON INTEGRATION SECOPS_GCS_INT TO ROLE SECOPS_EXPORTER;- Remplacez
snowflake-activity-logspar le nom de votre bucket.
- Remplacez
Récupérez le compte de service que Snowflake a créé pour l'intégration :
DESC STORAGE INTEGRATION SECOPS_GCS_INT;Copiez la valeur de la propriété
STORAGE_GCP_SERVICE_ACCOUNT. La valeur a le format suivant :service-account-id@project1-123456.iam.gserviceaccount.com
Accorder au compte de service Snowflake l'accès au bucket
- Dans la console Google Cloud , accédez à Cloud Storage > Buckets.
- Cliquez sur le bucket que vous avez créé (par exemple,
snowflake-activity-logs). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez la valeur
STORAGE_GCP_SERVICE_ACCOUNT. - Attribuer des rôles : sélectionnez Snowflake Unload.
- Ajouter des comptes principaux : collez la valeur
- Cliquez sur Enregistrer.
Créer le format de fichier et la zone de préparation externe
Dans une feuille de calcul Snowflake, créez le format de fichier et la zone de préparation qui écrit dans le bucket comme suit :
USE ROLE SECOPS_EXPORTER; USE SCHEMA SECOPS_EXPORT.ACTIVITY; CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT TYPE = JSON; CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE URL = 'gcs://snowflake-activity-logs/snowflake/' STORAGE_INTEGRATION = SECOPS_GCS_INT FILE_FORMAT = SECOPS_JSON_FORMAT;
Créer la table d'état des exportations
L'exportation indique la distance parcourue dans chaque vue. Sans ce filigrane, chaque exécution réexporterait l'intégralité de la vue et les mêmes événements seraient ingérés à nouveau.
Créez la table d'état et initialisez-la comme suit :
CREATE TABLE IF NOT EXISTS SECOPS_EXPORT_STATE ( VIEW_NAME STRING NOT NULL, LAST_EXPORTED TIMESTAMP_LTZ NOT NULL, WINDOW_END TIMESTAMP_LTZ ); INSERT INTO SECOPS_EXPORT_STATE (VIEW_NAME, LAST_EXPORTED) SELECT 'LOGIN_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP()) UNION ALL SELECT 'QUERY_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP());
Créer la procédure d'exportation
Créez la procédure qui décharge les deux vues et fait avancer le filigrane comme suit :
CREATE OR REPLACE PROCEDURE SECOPS_EXPORT_ACTIVITY() RETURNS STRING LANGUAGE SQL AS $$ BEGIN UPDATE SECOPS_EXPORT_STATE SET WINDOW_END = DATEADD('hour', -3, CURRENT_TIMESTAMP()); COPY INTO @SECOPS_EXPORT_STAGE/login_history/ FROM ( SELECT OBJECT_CONSTRUCT( 'application', 'snowflake', 'log_type', 'login_history', 'EVENT_TIMESTAMP', EVENT_TIMESTAMP, 'EVENT_TYPE', EVENT_TYPE, 'USER_NAME', USER_NAME, 'CLIENT_IP', CLIENT_IP, 'REPORTED_CLIENT_TYPE', REPORTED_CLIENT_TYPE, 'REPORTED_CLIENT_VERSION', REPORTED_CLIENT_VERSION, 'FIRST_AUTHENTICATION_FACTOR', FIRST_AUTHENTICATION_FACTOR, 'SECOND_AUTHENTICATION_FACTOR', SECOND_AUTHENTICATION_FACTOR, 'IS_SUCCESS', IS_SUCCESS, 'ERROR_CODE', ERROR_CODE, 'ERROR_MESSAGE', ERROR_MESSAGE) FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY WHERE EVENT_TIMESTAMP > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY') AND EVENT_TIMESTAMP <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY') ) FILE_FORMAT = (TYPE = JSON) INCLUDE_QUERY_ID = TRUE; UPDATE SECOPS_EXPORT_STATE SET LAST_EXPORTED = WINDOW_END WHERE VIEW_NAME = 'LOGIN_HISTORY'; COPY INTO @SECOPS_EXPORT_STAGE/query_history/ FROM ( SELECT OBJECT_CONSTRUCT( 'application', 'snowflake', 'log_type', 'query_history', 'START_TIME', START_TIME, 'END_TIME', END_TIME, 'QUERY_ID', QUERY_ID, 'QUERY_TYPE', QUERY_TYPE, 'EXECUTION_STATUS', EXECUTION_STATUS, 'ERROR_MESSAGE', ERROR_MESSAGE, 'USER_NAME', USER_NAME, 'ROLE_NAME', ROLE_NAME, 'WAREHOUSE_NAME', WAREHOUSE_NAME, 'WAREHOUSE_SIZE', WAREHOUSE_SIZE, 'DATABASE_NAME', DATABASE_NAME, 'SCHEMA_NAME', SCHEMA_NAME, 'SESSION_ID', SESSION_ID, 'BYTES_SCANNED', BYTES_SCANNED, 'ROWS_PRODUCED', ROWS_PRODUCED, 'TOTAL_ELAPSED_TIME', TOTAL_ELAPSED_TIME) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE START_TIME > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY') AND START_TIME <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY') ) FILE_FORMAT = (TYPE = JSON) INCLUDE_QUERY_ID = TRUE; UPDATE SECOPS_EXPORT_STATE SET LAST_EXPORTED = WINDOW_END WHERE VIEW_NAME = 'QUERY_HISTORY'; RETURN 'Export completed'; END; $$;
Chaque élément de la procédure existe pour une raison précise :
- La fenêtre se ferme trois heures après l'heure actuelle. Snowflake remplit
LOGIN_HISTORYavec une latence maximale de deux heures etQUERY_HISTORYavec une latence maximale de 45 minutes. Par conséquent, une fenêtre qui se termine maintenant ignorerait les lignes que la vue n'a pas encore matérialisées. Les événements parviennent donc à Google SecOps environ trois heures après leur survenue. En réduisant le décalage, vous privilégiez la fraîcheur à l'exhaustivité. WINDOW_ENDest écrit dans la table avant le déchargement. La valeur utilisée par l'instructionCOPY INTOet la valeur réécrite dansLAST_EXPORTEDsont donc identiques. Si vous recalculiez l'heure actuelle dans la deuxième instruction, vous ignoreriez tout ce qui s'est passé entre-temps.- Chaque mise à jour de
LAST_EXPORTEDs'exécute après sa propre instructionCOPY INTO. Si un déchargement échoue, la procédure s'arrête, le filigrane reste à sa place et la prochaine exécution répète cette fenêtre au lieu de la passer. INCLUDE_QUERY_ID = TRUEajoute un UUID à chaque nom de fichier. Sans cela, les fichiers déchargés sont nommésdata_0_0_0et les exportations répétées vers le même chemin d'accès entrent en conflit, ce que Snowflake documente comme une source de données en double dans la zone de préparation.
Planifier la tâche d'exportation
Créez et démarrez la tâche comme suit :
CREATE OR REPLACE TASK SECOPS_EXPORT_TASK WAREHOUSE = SECOPS_EXPORT_WH SCHEDULE = 'USING CRON 0 * * * * UTC' AS CALL SECOPS_EXPORT_ACTIVITY(); ALTER TASK SECOPS_EXPORT_TASK RESUME;Exécutez la tâche une fois pour vérifier la configuration sans attendre la programmation :
EXECUTE TASK SECOPS_EXPORT_TASK;Vérifiez le résultat de l'exécution et les fichiers qui ont atteint l'étape comme suit :
SELECT NAME, STATE, ERROR_MESSAGE, SCHEDULED_TIME FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME => 'SECOPS_EXPORT_TASK')) ORDER BY SCHEDULED_TIME DESC LIMIT 5; LIST @SECOPS_EXPORT_STAGE;
Récupérer le compte de service Google SecOps
Google SecOps utilise un compte de service unique pour lire les données de votre bucket Cloud Storage. Vous devez accorder à ce compte de service l'accès à votre bucket.
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter un flux.
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Snowflake activity logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez Snowflake comme Type de journal.
- Cliquez sur Obtenir un compte de service.
Une adresse e-mail de compte de service unique s'affiche, par exemple :
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopiez cette adresse e-mail pour l'utiliser à l'étape suivante.
Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
URL du bucket de stockage : saisissez l'URI du bucket Cloud Storage avec le chemin d'accès au préfixe :
gs://snowflake-activity-logs/snowflake/
Option de suppression de la source : sélectionnez l'option de suppression de votre choix :
- Ne jamais supprimer les fichiers : ne supprimez jamais les fichiers de la source (recommandé pour les tests).
- Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides de la source une fois l'extraction réussie.
Âge maximal du fichier : incluez les fichiers modifiés au cours des derniers jours (180 jours par défaut).
Espace de noms de l'élément : espace de noms de l'élément
Libellés d'ingestion : libellé à appliquer aux événements de ce flux
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Accorder des autorisations IAM au compte de service Google SecOps
Le compte de service Google SecOps a besoin de deux rôles sur votre bucket Cloud Storage : Storage Object Viewer pour lire les objets de journaux et un rôle au niveau du bucket pour lire les métadonnées du bucket.
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket.
- Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
- Attribuer des rôles : sélectionnez les deux rôles suivants :
- Lecteur des objets Storage : lit les objets journaux.
- Lecteur des anciens buckets Storage : lit les métadonnées du bucket. Si vous avez sélectionné l'option de suppression Supprimer les fichiers transférés et les répertoires vides, sélectionnez plutôt Rédacteur de bucket Storage hérité, qui accorde également l'autorisation de suppression.
- Cliquez sur Enregistrer.
Méthode 2 : Amazon S3 V2
Utilisez cette méthode lorsque les journaux doivent être stockés dans Amazon S3. Le côté Snowflake est identique, à l'exception de l'intégration du stockage et de la zone de préparation. La procédure et la tâche d'exportation de la méthode 1 sont donc réutilisées sans modification.
Configurer un bucket Amazon S3
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Enregistrez le nom et la région du bucket pour référence ultérieure. Par exemple,
snowflake-activity-logs.
Configurer la stratégie IAM AWS Snowflake
- Connectez-vous à AWS Management Console.
- Recherchez et sélectionnez IAM.
- Sélectionnez Paramètres du compte.
- Sous Security Token Service (STS) dans la liste Points de terminaison, recherchez la région Snowflake où se trouve votre compte.
- Si l'état du STS est "Inactif", basculez sur Actif.
- Sélectionnez Règles.
- Cliquez sur Créer une règle.
- Dans l'éditeur de règles, sélectionnez JSON.
Copiez et collez le règlement suivant, qui accorde à Snowflake les autorisations dont il a besoin pour décharger les données dans un bucket et un chemin d'accès au dossier :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::snowflake-activity-logs/snowflake/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::snowflake-activity-logs", "Condition": { "StringLike": { "s3:prefix": [ "snowflake/*" ] } } } ] }Cliquez sur Suivant.
Saisissez un Nom de la règle (par exemple,
snowflake_access) et ajoutez éventuellement une description.Cliquez sur Créer une règle.
Configurer le rôle Snowflake AWS IAM
- Dans IAM, sélectionnez Rôles.
- Cliquez sur Créer un rôle.
- Sélectionnez Compte AWS comme type d'entité de confiance.
- Sélectionnez Autre compte AWS.
- Dans le champ ID de compte, saisissez temporairement votre propre ID de compte AWS. Vous modifiez la relation de confiance ultérieurement et accordez l'accès à Snowflake.
- Sélectionnez l'option Exiger un ID externe.
- Saisissez un ID d'espace réservé, tel que
0000. Vous le remplacerez ultérieurement par l'ID externe de l'intégration de stockage. - Cliquez sur Suivant.
- Sélectionnez la règle IAM que vous avez créée précédemment.
- Cliquez sur Suivant.
- Saisissez un nom et une description.
- Cliquez sur Créer un rôle.
- Sur la page récapitulative du rôle, copiez et enregistrez la valeur ARN du rôle.
Créer l'intégration de stockage Snowflake pour Amazon S3
Dans une feuille de calcul Snowflake, créez l'intégration de stockage comme suit :
USE ROLE ACCOUNTADMIN; CREATE STORAGE INTEGRATION SECOPS_S3_INT TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'S3' ENABLED = TRUE STORAGE_AWS_ROLE_ARN = '<IAM_ROLE_ARN>' STORAGE_ALLOWED_LOCATIONS = ('s3://snowflake-activity-logs/snowflake/'); GRANT USAGE ON INTEGRATION SECOPS_S3_INT TO ROLE SECOPS_EXPORTER;- Remplacez
<IAM_ROLE_ARN>par l'ARN du rôle que vous avez enregistré.
- Remplacez
Récupérez l'identité AWS que Snowflake a créée pour l'intégration comme suit :
DESC INTEGRATION SECOPS_S3_INT;Copiez et enregistrez les valeurs des propriétés suivantes :
- STORAGE_AWS_IAM_USER_ARN
- STORAGE_AWS_EXTERNAL_ID
Accorder à l'utilisateur IAM Snowflake l'accès au bucket
- Accédez à la console de gestion AWS.
- Sélectionnez IAM > Rôles.
- Sélectionnez le rôle que vous avez créé précédemment.
- Sélectionnez l'onglet Relations d'approbation.
- Cliquez sur Modifier la règle d'approbation.
Mettez à jour le document de règles avec les valeurs de résultat
DESC INTEGRATIONcomme suit :{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<STORAGE_AWS_IAM_USER_ARN>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<STORAGE_AWS_EXTERNAL_ID>" } } } ] }Cliquez sur Mettre à jour la stratégie.
Créer le format de fichier, préparer et exporter des objets
Dans une feuille de calcul Snowflake, créez le format de fichier et la zone de préparation qui écrit dans le bucket comme suit :
USE ROLE SECOPS_EXPORTER; USE SCHEMA SECOPS_EXPORT.ACTIVITY; CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT TYPE = JSON; CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE URL = 's3://snowflake-activity-logs/snowflake/' STORAGE_INTEGRATION = SECOPS_S3_INT FILE_FORMAT = SECOPS_JSON_FORMAT;Créez la table d'état, la procédure et la tâche exactement comme décrit dans la méthode 1, dans les sections Créer la table d'état d'exportation, Créer la procédure d'exportation et Planifier la tâche d'exportation. Les instructions font référence à l'étape par son nom. Aucune modification n'est donc nécessaire.
Configurer AWS IAM pour Google SecOps
- Connectez-vous à AWS Management Console.
- Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Identifiants de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : Ajoutez un tag de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier .csv pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Associer directement les règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer un flux dans Google SecOps pour ingérer les journaux Snowflake
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter un flux.
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Snowflake activity logs). - Sélectionnez Amazon S3 V2 comme Type de source.
- Sélectionnez Snowflake comme Type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
- URI S3 :
s3://snowflake-activity-logs/snowflake/ - Option de suppression de la source : sélectionnez l'option de suppression de votre choix.
- Âge maximal du fichier : incluez les fichiers modifiés au cours des derniers jours (180 jours par défaut).
- ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3
- Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3
- Espace de noms de l'élément : espace de noms de l'élément
- Libellés d'ingestion : libellé à appliquer aux événements de ce flux
- URI S3 :
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
column4_label |
additional.fields |
Fusionné |
column7_label |
additional.fields |
Fusionné |
first_authentication_factor_label |
additional.fields |
Fusionné |
host_list |
additional.fields |
Fusionné |
query_text_label |
additional.fields |
Fusionné |
query_type_label |
additional.fields |
Fusionné |
roleIds_list |
additional.fields |
Fusionné |
roleNames_list |
additional.fields |
Fusionné |
rolecount_label |
additional.fields |
Fusionné |
user_count_label |
additional.fields |
Fusionné |
has_principal |
extensions.auth.type |
Mappé : true → AUTHTYPE_UNSPECIFIED |
START_TIME |
metadata.event_timestamp |
Analysé en tant que yyyy-MM-dd HH:mm:ss.SSS Z |
column2 |
metadata.event_timestamp |
Analysé en tant que yyyy-MM-dd HH:mm:ss.SSS Z |
column20 |
metadata.event_timestamp |
Analysé en tant que yyyy-MM-dd HH:mm:ss.SSS Z |
ts |
metadata.event_timestamp |
Analysé en tant que ISO8601 |
event_type |
metadata.event_type |
Mappé directement |
has_principal |
metadata.event_type |
Mappé : true → NETWORK_CONNECTION, true → STATUS_UPDATE, true → USER_LOGIN |
has_principal_user |
metadata.event_type |
Mappé : true → USER_UNCATEGORIZED |
column10 |
metadata.product_event_type |
Mappé directement |
QUERY_ID |
metadata.product_log_id |
Mappé directement |
column1 |
metadata.product_log_id |
Mappé directement |
column6 |
metadata.product_version |
Mappé directement |
SESSION_ID |
network.http.session_id |
Mappé directement |
RECEIVED_BYTES |
network.received_bytes |
Renommé/Mappé |
BYTES_SENT_OVER_THE_NETWORK |
network.sent_bytes |
Renommé/Mappé |
SENT_BYTES |
network.sent_bytes |
Renommé/Mappé |
APPLICATION |
principal.application |
Mappé directement |
data.user_name |
principal.asset.hostname |
Mappé directement |
CLIENT_IP |
principal.asset.ip |
Fusionné |
IP |
principal.asset.ip |
Fusionné |
column5 |
principal.asset.ip |
Fusionné |
SOURCE_REGION |
principal.cloud.availability_zone |
Mappé directement |
SOURCE_CLOUD |
principal.cloud.environment |
Mappé : (?i)azure → MICROSOFT_AZURE, (?i)amazon → AMAZON_WEB_SERVICES, (?i)google… |
data.user_name |
principal.hostname |
Mappé directement |
CLIENT_IP |
principal.ip |
Fusionné |
IP |
principal.ip |
Fusionné |
column5 |
principal.ip |
Fusionné |
OS |
principal.platform |
Mappé : (?i)Linux → LINUX, (?i)windows → WINDOWS, (?i)mac/ios → MAC |
OS_VERSION |
principal.platform_version |
Mappé directement |
SOURCE_CLOUD_label |
principal.resource.attribute.labels |
Fusionné |
roles |
principal.user.attribute.roles |
Fusionné |
data.role_name |
principal.user.role_name |
Mappé directement |
column9 |
principal.user.user_display_name |
Mappé directement |
USER_NAME |
principal.user.userid |
Mappé directement |
column10 |
principal.user.userid |
Mappé directement |
column3 |
principal.user.userid |
Mappé directement |
EXECUTION_STATUS |
security_result.action |
Mappé : (?i)success → action, (?i)fail → security_result_action_block |
STATUS |
security_result.action |
Mappé : (?i)success → action, (?i)fail → action |
action |
security_result.action |
Fusionné |
security_result_action_block |
security_result.action |
Fusionné |
OCSP_MODE |
security_result.action_details |
Mappé directement |
column11 |
security_result.action_details |
Mappé directement |
column3 |
security_result.action_details |
Mappé directement |
BYTES_DELETED_label |
security_result.detection_fields |
Fusionné |
BYTES_READ_FROM_RESULT_label |
security_result.detection_fields |
Fusionné |
BYTES_SCANNED_label |
security_result.detection_fields |
Fusionné |
BYTES_SPILLED_TO_LOCAL_STORAGE_label |
security_result.detection_fields |
Fusionné |
BYTES_SPILLED_TO_REMOTE_STORAGE_label |
security_result.detection_fields |
Fusionné |
BYTES_WRITTEN_TO_RESULT_label |
security_result.detection_fields |
Fusionné |
BYTES_WRITTEN_label |
security_result.detection_fields |
Fusionné |
CHILD_QUERIES_WAIT_TIME_label |
security_result.detection_fields |
Fusionné |
CLUSTER_NUMBER_label |
security_result.detection_fields |
Fusionné |
COMPILATION_TIME_label |
security_result.detection_fields |
Fusionné |
CREDITS_USED_CLOUD_SERVICES_label |
security_result.detection_fields |
Fusionné |
DATABASE_ID_label |
security_result.detection_fields |
Fusionné |
DATABASE_NAME_label |
security_result.detection_fields |
Fusionné |
END_TIME_label |
security_result.detection_fields |
Fusionné |
ERROR_MESSAGE_label |
security_result.detection_fields |
Fusionné |
EXECUTION_TIME_label |
security_result.detection_fields |
Fusionné |
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS_label |
security_result.detection_fields |
Fusionné |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES_label |
security_result.detection_fields |
Fusionné |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS_label |
security_result.detection_fields |
Fusionné |
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES_label |
security_result.detection_fields |
Fusionné |
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS_label |
security_result.detection_fields |
Fusionné |
INBOUND_DATA_TRANSFER_BYTES_label |
security_result.detection_fields |
Fusionné |
IS_CLIENT_GENERATED_STATEMENT_label |
security_result.detection_fields |
Fusionné |
LIST_EXTERNAL_FILES_TIME_label |
security_result.detection_fields |
Fusionné |
OUTBOUND_DATA_TRANSFER_BYTES_label |
security_result.detection_fields |
Fusionné |
PARTITIONS_SCANNED_label |
security_result.detection_fields |
Fusionné |
PARTITIONS_TOTAL_label |
security_result.detection_fields |
Fusionné |
PERCENTAGE_SCANNED_FROM_CACHE_label |
security_result.detection_fields |
Fusionné |
QUERY_ACCELERATION_BYTES_SCANNED_label |
security_result.detection_fields |
Fusionné |
QUERY_ACCELERATION_PARTITIONS_SCANNED_label |
security_result.detection_fields |
Fusionné |
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR_label |
security_result.detection_fields |
Fusionné |
QUERY_HASH_VERSION_label |
security_result.detection_fields |
Fusionné |
QUERY_HASH_label |
security_result.detection_fields |
Fusionné |
QUERY_LOAD_PERCENT_label |
security_result.detection_fields |
Fusionné |
QUERY_PARAMETERIZED_HASH_VERSION_label |
security_result.detection_fields |
Fusionné |
QUERY_TAG_label |
security_result.detection_fields |
Fusionné |
QUERY_TYPE_label |
security_result.detection_fields |
Fusionné |
QUEUED_OVERLOAD_TIME_label |
security_result.detection_fields |
Fusionné |
QUEUED_PROVISIONING_TIME_label |
security_result.detection_fields |
Fusionné |
QUEUED_REPAIR_TIME_label |
security_result.detection_fields |
Fusionné |
RELEASE_VERSION_label |
security_result.detection_fields |
Fusionné |
ROLE_TYPE_label |
security_result.detection_fields |
Fusionné |
ROWS_DELETED_label |
security_result.detection_fields |
Fusionné |
ROWS_INSERTED_label |
security_result.detection_fields |
Fusionné |
ROWS_PRODUCED_label |
security_result.detection_fields |
Fusionné |
ROWS_UNLOADED_label |
security_result.detection_fields |
Fusionné |
ROWS_UPDATED_label |
security_result.detection_fields |
Fusionné |
ROWS_WRITTEN_TO_RESULT_label |
security_result.detection_fields |
Fusionné |
SCHEMA_ID_label |
security_result.detection_fields |
Fusionné |
SCHEMA_NAME_label |
security_result.detection_fields |
Fusionné |
TOTAL_ELAPSED_TIME_label |
security_result.detection_fields |
Fusionné |
TRANSACTION_BLOCKED_TIME_label |
security_result.detection_fields |
Fusionné |
TRANSACTION_ID_label |
security_result.detection_fields |
Fusionné |
WAREHOUSE_ID_label |
security_result.detection_fields |
Fusionné |
WAREHOUSE_NAME_label |
security_result.detection_fields |
Fusionné |
WAREHOUSE_SIZE_label |
security_result.detection_fields |
Fusionné |
WAREHOUSE_TYPE_label |
security_result.detection_fields |
Fusionné |
authentication_factor_label |
security_result.detection_fields |
Fusionné |
column4_label |
security_result.detection_fields |
Fusionné |
column6_label |
security_result.detection_fields |
Fusionné |
column7_label |
security_result.detection_fields |
Fusionné |
column8_label |
security_result.detection_fields |
Fusionné |
event_id_label |
security_result.detection_fields |
Fusionné |
event_type_label |
security_result.detection_fields |
Fusionné |
is_success_label |
security_result.detection_fields |
Fusionné |
python_compiler_label |
security_result.detection_fields |
Fusionné |
python_runtime_label |
security_result.detection_fields |
Fusionné |
python_version_label |
security_result.detection_fields |
Fusionné |
reported_client_type_label |
security_result.detection_fields |
Fusionné |
reported_client_version_label |
security_result.detection_fields |
Fusionné |
tracing_label |
security_result.detection_fields |
Fusionné |
EXECUTION_STATUS |
security_result.summary |
Mappé directement |
STATUS |
security_result.summary |
Mappé directement |
column17 |
security_result.summary |
Mappé directement |
TARGET_REGION |
target.cloud.availability_zone |
Mappé directement |
TARGET_CLOUD |
target.cloud.environment |
Mappé : (?i)azure → MICROSOFT_AZURE, (?i)amazon → AMAZON_WEB_SERVICES, (?i)google… |
TARGET_CLOUD_label |
target.resource.attribute.labels |
Fusionné |
column2_label |
target.resource.attribute.labels |
Fusionné |
column7_label |
target.resource.attribute.labels |
Fusionné |
USER_NAME |
target.user.userid |
Mappé directement |
column4 |
target.user.userid |
Mappé directement |
| N/A | extensions.auth.type |
Constante : AUTHTYPE_UNSPECIFIED |
| N/A | metadata.event_type |
Constante : NETWORK_CONNECTION |
| N/A | metadata.product_name |
Constante : SNOWFLAKE |
| N/A | metadata.vendor_name |
Constante : SNOWFLAKE |
| N/A | principal.cloud.environment |
Constante : MICROSOFT_AZURE |
| N/A | principal.platform |
Constante : LINUX |
| N/A | target.cloud.environment |
Constante : MICROSOFT_AZURE |
Journal des modifications
Afficher le journal des modifications pour ce parseur
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.