Collecter les journaux Snowflake
Ce document explique comment ingérer des journaux Snowflake dans Google Security Operations à l'aide d'AWS S3. L'analyseur extrait les champs des messages de journaux à l'aide d'une série de règles de correspondance de modèles Grok et KV, spécialement conçues pour gérer le format de journal Snowflake. Il mappe ensuite les champs extraits au modèle de données unifié (UDM), en enrichissant les données avec un contexte supplémentaire et en standardisant la représentation pour une analyse plus approfondie.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Instance Google SecOps
- Accès privilégié à AWS
- Accès privilégié à Snowflake (ACCOUNTADMIN)
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.
Configurer la stratégie IAM AWS Snowflake
- Connectez-vous à la console de gestion AWS.
- 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, définissez-le 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 la règle suivante (au format JSON) pour accorder à Snowflake les autorisations requises pour charger ou décharger des données à l'aide d'un seul chemin d'accès au bucket et au dossier. Vous pouvez également supprimer des fichiers de données à l'aide de l'option de copie PURGE.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::<bucket>/<prefix>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<bucket>", "Condition": { "StringLike": { "s3:prefix": [ "<prefix>/*" ] } } } ] }
Cliquez sur Suivant.
Saisissez un Nom de la règle (par exemple, snowflake_access) et une Description facultative.
Cliquez sur Créer une règle.
Configurer le rôle IAM AWS Snowflake
- Dans AWS Identity and Access Management (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 ensuite la relation de confiance et accordez l'accès à Snowflake.
- Sélectionnez l'option Require external ID (Exiger un ID externe).
- Saisissez un ID de substitut, tel que 0000. Lors d'une prochaine étape, vous modifierez la relation d'approbation pour votre rôle IAM et spécifierez l'ID externe de votre intégration de stockage.
- Cliquez sur Suivant.
- Sélectionnez la stratégie IAM que vous avez créée précédemment.
- Cliquez sur Suivant.
- Saisissez un nom et une description pour le rôle.
- Cliquez sur Créer un rôle.
- Sur la page récapitulative du rôle, copiez et enregistrez la valeur de l'ARN du rôle.
Configurer l'intégration Snowflake S3
- Connectez-vous à la base de données Snowflake.
Remplacez les champs suivants et exécutez la commande :
<integration_name>
est le nom de la nouvelle intégration (par exemple, s3_integration).<iam_role>
est le nom ARN (Amazon Resource Name) du rôle que vous avez créé précédemment.<aws_s3_bucket_path>
correspond au chemin d'accès au bucket que vous avez créé précédemment (par exemple,s3://your-log-bucket-name/
).
CREATE OR REPLACE STORAGE INTEGRATION <integration_name> TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'S3' ENABLED = TRUE STORAGE_AWS_ROLE_ARN = '<iam_role>' STORAGE_ALLOWED_LOCATIONS = ('<aws_s3_bucket_path>')
Configurer les autorisations utilisateur AWS IAM pour accéder au bucket
- Récupérez l'ARN de l'utilisateur IAM créé automatiquement pour votre compte Snowflake, puis remplacez
<integration_name>
par le nom réel de l'intégration que vous avez créée précédemment :none DESC INTEGRATION <integration_name>;
- Par exemple :
none DESC INTEGRATION s3_integration; +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+ | property | property_type | property_value | property_default | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/ | [] | | STORAGE_AWS_IAM_USER_ARN | String | arn:aws:iam::123456789001:user/abc1-b-self1234 | | | STORAGE_AWS_ROLE_ARN | String | arn:aws:iam::001234567890:role/myrole | | | STORAGE_AWS_EXTERNAL_ID | String | MYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq= | | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+
- Copiez et enregistrez les valeurs des propriétés suivantes :
- STORAGE_AWS_IAM_USER_ARN
- STORAGE_AWS_EXTERNAL_ID
- Accédez à l'AWS Management Console.
- 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 sortie DESC INTEGRATION :
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<snowflake_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<snowflake_external_id>" } } } ] }
Remplacez :
snowflake_user_arn
correspond à la valeurSTORAGE_AWS_IAM_USER_ARN
que vous avez enregistrée.snowflake_external_id
correspond à la valeurSTORAGE_AWS_EXTERNAL_ID
que vous avez enregistrée.
Cliquez sur Mettre à jour la stratégie.
Configurer le format de fichier JSON dans Snowflake
Dans Snowflake, saisissez la commande suivante :
CREATE OR REPLACE FILE FORMAT my_json_format type = json COMPRESSION = 'gzip' null_if = ('NULL', 'null');
Créer une zone S3 dans Snowflake
Dans Snowflake, remplacez les champs suivants et saisissez la commande :
<DB_NAME>
<DB_SCHEMA_NAME>
<AWS_S3_BUCKET_PATH>
use database '<DB_NAME>'; use schema '<DB_SCHEMA_NAME>'; CREATE OR REPLACE STAGE my_s3_stage storage_integration = s3_integration url = '<AWS_S3_BUCKET_PATH>' file_format = my_json_format;
Configurer Snowflake pour exporter des données
Exécutez la commande UNLOAD pour exporter les données des tables vers la zone de préparation, puis vers AWS S3 :
use database '<DB_NAME>'; use WAREHOUSE '<WAREHOUSE_NAME>'; copy into @my_s3_stage/login_history from (SELECT OBJECT_CONSTRUCT('application', 'snowflake' ,'environment', '<PUT_HERE_ENV_NAME>', '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, 'FIRST_AUTHENTICATION_FACTOR',FIRST_AUTHENTICATION_FACTOR, 'IS_SUCCESS', IS_SUCCESS, 'ERROR_CODE', ERROR_CODE, 'ERROR_MESSAGE', ERROR_MESSAGE) from snowflake.account_usage.Login_history) FILE_FORMAT = (TYPE = JSON) ; copy into @my_s3_stage/access_history from (SELECT OBJECT_CONSTRUCT('application', 'snowflake' ,'environment', '<PUT_HERE_DB_NAME>', 'log_type', 'access_history', 'QUERY_START_TIME',QUERY_START_TIME, 'USER_NAME', USER_NAME, 'DIRECT_OBJECTS_ACCESSED',DIRECT_OBJECTS_ACCESSED, 'BASE_OBJECTS_ACCESSED', BASE_OBJECTS_ACCESSED, 'OBJECTS_MODIFIED', OBJECTS_MODIFIED) from snowflake.account_usage.Access_History ) FILE_FORMAT = (TYPE = JSON);
Répétez le processus d'exportation pour toutes les tables suivantes dans lesquelles Snowflake stocke les journaux et les données d'audit :
Databases ; WAREHOUSE_EVENTS_HISTORY ; WAREHOUSE_LOAD_HISTORY ; WAREHOUSE_METERING_HISTORY ; DATABASE_STORAGE_USAGE_HISTORY ; DATA_TRANSFER_HISTORY ; GRANTS_TO_ROLES ; GRANTS_TO_USERS ; METERING_DAILY_HISTORY ; PIPE_USAGE_HISTORY ; REPLICATION_USAGE_HISTORY ; STAGE_STORAGE_USAGE_HISTORY ; STORAGE_USAGE ; TASK_HISTORY ; COPY_HISTORY ;
Configurer AWS IAM pour Google SecOps
- Connectez-vous à la console de gestion AWS.
- 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 Informations d'identification 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 une balise 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 relatives aux autorisations.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer des flux
Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :
- Paramètres SIEM> Flux
- Plate-forme de contenu > Packs de contenu
Configurer des flux à partir de Paramètres SIEM > Flux
Pour configurer un flux, procédez comme suit :
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (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, Journaux Snowflake).
- Sélectionnez Amazon S3 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 :
- Région : région dans laquelle se trouve le bucket Amazon S3.
- URI S3 : URI du bucket (au format
s3://your-log-bucket-name/
). Remplacez les éléments suivants :your-log-bucket-name
: nom du bucket.
- L'URI est : sélectionnez Répertoire ou Répertoire incluant des sous-répertoires.
- Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
- 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.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Configurer des flux depuis le Hub de contenu
Indiquez les valeurs des champs suivants :
Région : région dans laquelle se trouve le bucket Amazon S3.
- URI S3 : URI du bucket (au format
s3://your-log-bucket-name/
). Remplacez les éléments suivants :your-log-bucket-name
: nom du bucket.
- L'URI est : sélectionnez Répertoire ou Répertoire incluant des sous-répertoires.
- Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
- 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.
- URI S3 : URI du bucket (au format
Options avancées
- Nom du flux : valeur préremplie qui identifie le flux.
- Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
- Espace de noms de l'élément : espace de noms associé au flux.
- Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.