Raccogliere i log di Snowflake

Supportato in:

Questo documento spiega come importare i log di Snowflake in Google Security Operations. Puoi configurare l'importazione utilizzando due metodi: Cloud Storage V2 (consigliato) o Amazon S3 V2. Entrambi i metodi utilizzano lo stesso meccanismo lato Snowflake: un'attività pianificata scarica i dati di utilizzo dell'account in uno stage esterno e Google SecOps legge i file esportati con un feed.

Snowflake è una piattaforma cloud di dati che archivia l'attività dell'account nello schema SNOWFLAKE.ACCOUNT_USAGE. La visualizzazione LOGIN_HISTORY registra i tentativi di autenticazione, inclusi l'indirizzo IP client, il fattore di autenticazione e il motivo dell'errore. La visualizzazione QUERY_HISTORY registra ogni istruzione eseguita nell'account, inclusi l'utente, il ruolo, il warehouse e gli oggetti toccati.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Accesso a Snowflake con un ruolo che può creare integrazioni di archiviazione (solo ACCOUNTADMIN dispone di questo privilegio per impostazione predefinita), database, warehouse, stage e attività
  • Per Cloud Storage V2: un progetto Google Cloud con l'API Storage Cloud abilitata e le autorizzazioni per creare bucket, creare ruoli Identity and Access Management (IAM) e gestire le policy IAM dei bucket
  • Per Amazon S3 V2: accesso privilegiato ad AWS per creare bucket S3, criteri IAM, ruoli IAM e utenti IAM

Concedere l'accesso ai dati sull'utilizzo dell'account Snowflake

Le visualizzazioni SNOWFLAKE.ACCOUNT_USAGE sono leggibili da ACCOUNTADMIN solo finché non viene concesso l'accesso esplicito. Crea un ruolo dedicato per l'esportazione e concedigli i due ruoli del database che coprono le visualizzazioni esportate da questo documento.

  1. Accedi a Snowflake e apri un foglio di lavoro.
  2. Crea il ruolo di esportazione e concedi l'accesso in lettura alle visualizzazioni dell'utilizzo dell'account nel seguente modo:

    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;
    
  3. Crea il database, lo schema e il warehouse utilizzati dall'esportazione e concedili al ruolo come segue:

    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>;
    
    • Sostituisci <YOUR_USER> con l'utente Snowflake proprietario dell'esportazione.

Crea un bucket Cloud Storage

  1. Vai alla consoleGoogle Cloud .
  2. Seleziona il tuo progetto o creane uno nuovo.
  3. Nel menu di navigazione, vai a Cloud Storage > Bucket.
  4. Fai clic su Crea bucket.
  5. Fornisci i seguenti dettagli di configurazione:

    Impostazione Valore
    Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio snowflake-activity-logs).
    Tipo di località Scegli in base alle tue esigenze (regione singola, a due regioni, multiregionale)
    Località Seleziona la posizione (ad esempio, us-central1).
    Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente)
    Controllo degli accessi Uniforme (consigliato)
    Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o la policy di conservazione
  6. Fai clic su Crea.

Crea un ruolo Cloud Storage personalizzato per Snowflake

  1. Nella console Google Cloud , vai a IAM e amministrazione > Ruoli.
  2. Fai clic su Crea ruolo.
  3. Fornisci i seguenti dettagli di configurazione:
    • Titolo: inserisci Snowflake Unload
    • ID: inserisci snowflake_unload
    • Fase di lancio del ruolo: seleziona Disponibilità generale.
  4. Fai clic su Aggiungi autorizzazioni e aggiungi le seguenti autorizzazioni:
    • storage.buckets.get
    • storage.objects.create
    • storage.objects.delete
    • storage.objects.list
  5. Fai clic su Crea.

Crea l'integrazione di archiviazione Snowflake per Cloud Storage

  1. In un foglio di lavoro Snowflake, crea l'integrazione di archiviazione nel seguente modo:

    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;
    
    • Sostituisci snowflake-activity-logs con il nome del tuo bucket.
  2. Recupera il account di servizio creato da Snowflake per l'integrazione nel seguente modo:

    DESC STORAGE INTEGRATION SECOPS_GCS_INT;
    
  3. Copia il valore della proprietà STORAGE_GCP_SERVICE_ACCOUNT. Il valore ha il seguente formato:

    service-account-id@project1-123456.iam.gserviceaccount.com
    

Concedi al account di servizio Snowflake l'accesso al bucket

  1. Nella console Google Cloud , vai a Cloud Storage > Bucket.
  2. Fai clic sul bucket che hai creato (ad esempio snowflake-activity-logs).
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:
    • Aggiungi entità: incolla il valore di STORAGE_GCP_SERVICE_ACCOUNT.
    • Assegna ruoli: seleziona Snowflake Unload
  6. Fai clic su Salva.

Crea il formato file e lo staging esterno

  1. In un foglio di lavoro Snowflake, crea il formato del file e lo stage che scrive nel bucket come segue:

    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;
    

Crea la tabella dello stato di esportazione

L'esportazione tiene traccia di quanto è stato letto in ogni visualizzazione. Senza questa filigrana, ogni esecuzione riesporterebbe l'intera visualizzazione e gli stessi eventi verrebbero importati di nuovo.

  1. Crea la tabella degli stati e inizializzala come segue:

    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());
    

Crea la procedura di esportazione

  1. Crea la procedura che scarica entrambe le visualizzazioni e fa avanzare il watermark nel seguente modo:

    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;
    $$;
    

Ogni elemento della procedura esiste per un motivo:

  • La finestra si chiude tre ore dopo l'ora attuale. Snowflake compila LOGIN_HISTORY con una latenza massima di due ore e QUERY_HISTORY con una latenza massima di 45 minuti, quindi una finestra che termina ora ignora le righe che la visualizzazione non ha ancora materializzato. Pertanto, gli eventi raggiungono Google SecOps circa tre ore dopo il loro verificarsi. La riduzione del ritardo compromette la completezza delle operazioni per la freschezza.
  • WINDOW_END viene scritto nella tabella prima dello scaricamento, quindi il valore utilizzato dall'istruzione COPY INTO e il valore riscritto in LAST_EXPORTED sono identici. Il ricalcolo dell'ora corrente nella seconda istruzione salterebbe tutto ciò che è successo nel frattempo.
  • Ogni aggiornamento di LAST_EXPORTED viene eseguito dopo la propria istruzione COPY INTO. Se un caricamento non riesce, la procedura si interrompe, la filigrana rimane dov'era e la successiva esecuzione ripete la finestra anziché saltarla.
  • INCLUDE_QUERY_ID = TRUE aggiunge un UUID a ogni nome file. Senza, i file scaricati vengono denominati data_0_0_0 e le esportazioni ripetute nello stesso percorso si scontrano, il che Snowflake documenta come fonte di dati duplicati nello stage.

Pianifica l'attività di esportazione

  1. Crea e avvia l'attività nel seguente modo:

    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;
    
  2. Esegui l'attività una volta per verificare la configurazione senza attendere la pianificazione come segue:

    EXECUTE TASK SECOPS_EXPORT_TASK;
    
  3. Controlla il risultato dell'esecuzione e i file che hanno raggiunto la fase nel seguente modo:

    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;
    

Recuperare il account di servizio Google SecOps

Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket Cloud Storage. Devi concedere a questo account di servizio l'accesso al tuo bucket.

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Snowflake activity logs).
  5. Seleziona Google Cloud Storage V2 come Tipo di origine.
  6. Seleziona Snowflake come Tipo di log.
  7. Fai clic su Ottieni service account.
  8. Verrà visualizzato un indirizzo email del account di servizio univoco, ad esempio:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copia questo indirizzo email per utilizzarlo nel passaggio successivo.

  10. Fai clic su Avanti.

  11. Specifica i valori per i seguenti parametri di input:

    • URL bucket di archiviazione: inserisci l'URI del bucket Cloud Storage con il percorso del prefisso:

      gs://snowflake-activity-logs/snowflake/
      
    • Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:

      • Non eliminare mai i file: non eliminare mai i file dall'origine (opzione consigliata per i test).
      • Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dall'origine dopo il completamento di un recupero riuscito.
    • Età massima del file: includi i file modificati nell'ultimo numero di giorni (il valore predefinito è 180 giorni)

    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset

    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed

  12. Fai clic su Avanti.

  13. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Concedi le autorizzazioni IAM al account di servizio Google SecOps

Il account di servizio Google SecOps richiede due ruoli nel bucket Cloud Storage: Storage Object Viewer per leggere gli oggetti log e un ruolo a livello di bucket per leggere i metadati del bucket.

  1. Vai a Cloud Storage > Bucket.
  2. Fai clic sul nome del bucket.
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:
    • Aggiungi entità: incolla l'email del account di servizio Google SecOps
    • Assegna ruoli: seleziona entrambi i seguenti ruoli:
      • Visualizzatore oggetti Storage: legge gli oggetti log.
      • Storage Legacy Bucket Reader: legge i metadati del bucket. Se hai selezionato l'opzione di eliminazione Elimina file trasferiti e directory vuote, seleziona Storage Legacy Bucket Writer, che concede anche l'autorizzazione di eliminazione.
  6. Fai clic su Salva.

Metodo 2: Amazon S3 V2

Utilizza questo metodo quando i log devono essere inseriti in Amazon S3. Il lato Snowflake è identico, a parte l'integrazione dell'archiviazione e lo stage, quindi la procedura e l'attività di esportazione del Metodo 1 vengono riutilizzate senza modifiche.

Configura un bucket Amazon S3

  1. Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket.
  2. Salva il nome e la regione del bucket per riferimento futuro. Ad esempio: snowflake-activity-logs.

Configura la policy IAM AWS di Snowflake

  1. Accedi alla console di gestione AWS.
  2. Cerca e seleziona IAM.
  3. Seleziona Impostazioni account.
  4. In Security Token Service (STS) nell'elenco Endpoint, trova la regione Snowflake in cui si trova il tuo account.
  5. Se lo stato di STS è inattivo, sposta il pulsante di attivazione/disattivazione su Attivo.
  6. Seleziona Norme.
  7. Seleziona Crea policy.
  8. In Editor policy, seleziona JSON.
  9. Copia e incolla la seguente policy, che concede a Snowflake le autorizzazioni necessarie per scaricare i dati in un bucket e un percorso di cartella:

    {
        "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/*"
                        ]
                    }
                }
            }
        ]
    }
    
  10. Fai clic su Avanti.

  11. Inserisci un Nome della norma (ad esempio, snowflake_access) e una descrizione facoltativa.

  12. Fai clic su Crea policy.

Configura il ruolo IAM AWS Snowflake

  1. In IAM, seleziona Ruoli.
  2. Fai clic su Crea ruolo.
  3. Seleziona Account AWS come tipo di entità attendibile.
  4. Seleziona Un altro account AWS.
  5. Nel campo ID account, inserisci temporaneamente il tuo ID account AWS. Modifica la relazione di trust in un secondo momento e concedi l'accesso a Snowflake.
  6. Seleziona l'opzione Richiedi ID esterno.
  7. Inserisci un ID segnaposto, ad esempio 0000. In un secondo momento, lo sostituirai con l'ID esterno dell'integrazione dell'archiviazione.
  8. Fai clic su Avanti.
  9. Seleziona la policy IAM che hai creato in precedenza.
  10. Fai clic su Avanti.
  11. Inserisci un nome e una descrizione per il ruolo.
  12. Fai clic su Crea ruolo.
  13. Nella pagina di riepilogo del ruolo, copia e salva il valore ARN ruolo.

Crea l'integrazione dell'archiviazione Snowflake per Amazon S3

  1. In un foglio di lavoro Snowflake, crea l'integrazione di archiviazione nel seguente modo:

    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;
    
    • Sostituisci <IAM_ROLE_ARN> con l'ARN del ruolo che hai salvato.
  2. Recupera l'identità AWS creata da Snowflake per l'integrazione nel seguente modo:

    DESC INTEGRATION SECOPS_S3_INT;
    
  3. Copia e salva i valori delle seguenti proprietà come indicato:

    • STORAGE_AWS_IAM_USER_ARN
    • STORAGE_AWS_EXTERNAL_ID

Concedi all'utente IAM Snowflake l'accesso al bucket

  1. Vai alla console di gestione AWS.
  2. Seleziona IAM > Ruoli.
  3. Seleziona il ruolo che hai creato in precedenza.
  4. Seleziona la scheda Relazioni di trust.
  5. Fai clic su Modifica policy di attendibilità.
  6. Aggiorna il documento della policy con i valori di output DESC INTEGRATION nel seguente modo:

    {
        "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>"
                    }
                }
            }
        ]
    }
    
  7. Fai clic su Aggiorna policy.

Crea il formato file, esegui lo staging ed esporta gli oggetti

  1. In un foglio di lavoro Snowflake, crea il formato del file e lo stage che scrive nel bucket come segue:

    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;
    
  2. Crea la tabella di stato, la procedura e l'attività esattamente come descritto nel Metodo 1, nelle sezioni Crea la tabella di stato dell'esportazione, Crea la procedura di esportazione e Pianifica l'attività di esportazione. Le istruzioni fanno riferimento alla fase per nome, quindi non devono essere modificate.

Configurare AWS IAM per Google SecOps

  1. Accedi alla console di gestione AWS.
  2. Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
  3. Seleziona l'utente creato.
  4. Seleziona la scheda Credenziali di sicurezza.
  5. Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
  6. Seleziona Servizio di terze parti come Caso d'uso.
  7. Fai clic su Avanti.
  8. (Facoltativo) Aggiungi un tag di descrizione.
  9. Fai clic su Crea chiave di accesso.
  10. Fai clic su Scarica file .csv per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
  11. Fai clic su Fine.
  12. Seleziona la scheda Autorizzazioni.
  13. Fai clic su Aggiungi autorizzazioni nella sezione Criteri di autorizzazione.
  14. Seleziona Aggiungi autorizzazioni.
  15. Seleziona Allega direttamente le norme.
  16. Cerca e seleziona il criterio AmazonS3FullAccess.
  17. Fai clic su Avanti.
  18. Fai clic su Aggiungi autorizzazioni.

Configura un feed in Google SecOps per importare i log di Snowflake

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Snowflake activity logs).
  5. Seleziona Amazon S3 V2 come Tipo di origine.
  6. Seleziona Snowflake come Tipo di log.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input come segue:

    • URI S3: s3://snowflake-activity-logs/snowflake/
    • Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • Età massima del file: includi i file modificati nell'ultimo numero di giorni (il valore predefinito è 180 giorni)
    • ID chiave di accesso: chiave di accesso utente con accesso al bucket S3
    • Chiave di accesso segreta: chiave segreta dell'utente con accesso al bucket S3
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed
  9. Fai clic su Avanti.

  10. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
column4_label additional.fields Unita
column7_label additional.fields Unita
first_authentication_factor_label additional.fields Unita
host_list additional.fields Unita
query_text_label additional.fields Unita
query_type_label additional.fields Unita
roleIds_list additional.fields Unita
roleNames_list additional.fields Unita
rolecount_label additional.fields Unita
user_count_label additional.fields Unita
has_principal extensions.auth.type Mappato: true → AUTHTYPE_UNSPECIFIED
START_TIME metadata.event_timestamp Analizzato come yyyy-MM-dd HH:mm:ss.SSS Z
column2 metadata.event_timestamp Analizzato come yyyy-MM-dd HH:mm:ss.SSS Z
column20 metadata.event_timestamp Analizzato come yyyy-MM-dd HH:mm:ss.SSS Z
ts metadata.event_timestamp Analizzato come ISO8601
event_type metadata.event_type Mappato direttamente
has_principal metadata.event_type Mappato: true → NETWORK_CONNECTION, true → STATUS_UPDATE, true → USER_LOGIN
has_principal_user metadata.event_type Mappato: true → USER_UNCATEGORIZED
column10 metadata.product_event_type Mappato direttamente
QUERY_ID metadata.product_log_id Mappato direttamente
column1 metadata.product_log_id Mappato direttamente
column6 metadata.product_version Mappato direttamente
SESSION_ID network.http.session_id Mappato direttamente
RECEIVED_BYTES network.received_bytes Rinominate/mappate
BYTES_SENT_OVER_THE_NETWORK network.sent_bytes Rinominate/mappate
SENT_BYTES network.sent_bytes Rinominate/mappate
APPLICATION principal.application Mappato direttamente
data.user_name principal.asset.hostname Mappato direttamente
CLIENT_IP principal.asset.ip Unita
IP principal.asset.ip Unita
column5 principal.asset.ip Unita
SOURCE_REGION principal.cloud.availability_zone Mappato direttamente
SOURCE_CLOUD principal.cloud.environment Mappato: (?i)azure → MICROSOFT_AZURE, (?i)amazon → AMAZON_WEB_SERVICES, (?i)google …
data.user_name principal.hostname Mappato direttamente
CLIENT_IP principal.ip Unita
IP principal.ip Unita
column5 principal.ip Unita
OS principal.platform Mappato: (?i)Linux → LINUX, (?i)windows → WINDOWS, (?i)mac/ios → MAC
OS_VERSION principal.platform_version Mappato direttamente
SOURCE_CLOUD_label principal.resource.attribute.labels Unita
roles principal.user.attribute.roles Unita
data.role_name principal.user.role_name Mappato direttamente
column9 principal.user.user_display_name Mappato direttamente
USER_NAME principal.user.userid Mappato direttamente
column10 principal.user.userid Mappato direttamente
column3 principal.user.userid Mappato direttamente
EXECUTION_STATUS security_result.action Mappato: (?i)success → action, (?i)fail → security_result_action_block
STATUS security_result.action Mappato: (?i)success → action, (?i)fail → action
action security_result.action Unita
security_result_action_block security_result.action Unita
OCSP_MODE security_result.action_details Mappato direttamente
column11 security_result.action_details Mappato direttamente
column3 security_result.action_details Mappato direttamente
BYTES_DELETED_label security_result.detection_fields Unita
BYTES_READ_FROM_RESULT_label security_result.detection_fields Unita
BYTES_SCANNED_label security_result.detection_fields Unita
BYTES_SPILLED_TO_LOCAL_STORAGE_label security_result.detection_fields Unita
BYTES_SPILLED_TO_REMOTE_STORAGE_label security_result.detection_fields Unita
BYTES_WRITTEN_TO_RESULT_label security_result.detection_fields Unita
BYTES_WRITTEN_label security_result.detection_fields Unita
CHILD_QUERIES_WAIT_TIME_label security_result.detection_fields Unita
CLUSTER_NUMBER_label security_result.detection_fields Unita
COMPILATION_TIME_label security_result.detection_fields Unita
CREDITS_USED_CLOUD_SERVICES_label security_result.detection_fields Unita
DATABASE_ID_label security_result.detection_fields Unita
DATABASE_NAME_label security_result.detection_fields Unita
END_TIME_label security_result.detection_fields Unita
ERROR_MESSAGE_label security_result.detection_fields Unita
EXECUTION_TIME_label security_result.detection_fields Unita
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS_label security_result.detection_fields Unita
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES_label security_result.detection_fields Unita
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS_label security_result.detection_fields Unita
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES_label security_result.detection_fields Unita
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS_label security_result.detection_fields Unita
INBOUND_DATA_TRANSFER_BYTES_label security_result.detection_fields Unita
IS_CLIENT_GENERATED_STATEMENT_label security_result.detection_fields Unita
LIST_EXTERNAL_FILES_TIME_label security_result.detection_fields Unita
OUTBOUND_DATA_TRANSFER_BYTES_label security_result.detection_fields Unita
PARTITIONS_SCANNED_label security_result.detection_fields Unita
PARTITIONS_TOTAL_label security_result.detection_fields Unita
PERCENTAGE_SCANNED_FROM_CACHE_label security_result.detection_fields Unita
QUERY_ACCELERATION_BYTES_SCANNED_label security_result.detection_fields Unita
QUERY_ACCELERATION_PARTITIONS_SCANNED_label security_result.detection_fields Unita
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR_label security_result.detection_fields Unita
QUERY_HASH_VERSION_label security_result.detection_fields Unita
QUERY_HASH_label security_result.detection_fields Unita
QUERY_LOAD_PERCENT_label security_result.detection_fields Unita
QUERY_PARAMETERIZED_HASH_VERSION_label security_result.detection_fields Unita
QUERY_TAG_label security_result.detection_fields Unita
QUERY_TYPE_label security_result.detection_fields Unita
QUEUED_OVERLOAD_TIME_label security_result.detection_fields Unita
QUEUED_PROVISIONING_TIME_label security_result.detection_fields Unita
QUEUED_REPAIR_TIME_label security_result.detection_fields Unita
RELEASE_VERSION_label security_result.detection_fields Unita
ROLE_TYPE_label security_result.detection_fields Unita
ROWS_DELETED_label security_result.detection_fields Unita
ROWS_INSERTED_label security_result.detection_fields Unita
ROWS_PRODUCED_label security_result.detection_fields Unita
ROWS_UNLOADED_label security_result.detection_fields Unita
ROWS_UPDATED_label security_result.detection_fields Unita
ROWS_WRITTEN_TO_RESULT_label security_result.detection_fields Unita
SCHEMA_ID_label security_result.detection_fields Unita
SCHEMA_NAME_label security_result.detection_fields Unita
TOTAL_ELAPSED_TIME_label security_result.detection_fields Unita
TRANSACTION_BLOCKED_TIME_label security_result.detection_fields Unita
TRANSACTION_ID_label security_result.detection_fields Unita
WAREHOUSE_ID_label security_result.detection_fields Unita
WAREHOUSE_NAME_label security_result.detection_fields Unita
WAREHOUSE_SIZE_label security_result.detection_fields Unita
WAREHOUSE_TYPE_label security_result.detection_fields Unita
authentication_factor_label security_result.detection_fields Unita
column4_label security_result.detection_fields Unita
column6_label security_result.detection_fields Unita
column7_label security_result.detection_fields Unita
column8_label security_result.detection_fields Unita
event_id_label security_result.detection_fields Unita
event_type_label security_result.detection_fields Unita
is_success_label security_result.detection_fields Unita
python_compiler_label security_result.detection_fields Unita
python_runtime_label security_result.detection_fields Unita
python_version_label security_result.detection_fields Unita
reported_client_type_label security_result.detection_fields Unita
reported_client_version_label security_result.detection_fields Unita
tracing_label security_result.detection_fields Unita
EXECUTION_STATUS security_result.summary Mappato direttamente
STATUS security_result.summary Mappato direttamente
column17 security_result.summary Mappato direttamente
TARGET_REGION target.cloud.availability_zone Mappato direttamente
TARGET_CLOUD target.cloud.environment Mappato: (?i)azure → MICROSOFT_AZURE, (?i)amazon → AMAZON_WEB_SERVICES, (?i)google …
TARGET_CLOUD_label target.resource.attribute.labels Unita
column2_label target.resource.attribute.labels Unita
column7_label target.resource.attribute.labels Unita
USER_NAME target.user.userid Mappato direttamente
column4 target.user.userid Mappato direttamente
N/D extensions.auth.type Costante: AUTHTYPE_UNSPECIFIED
N/D metadata.event_type Costante: NETWORK_CONNECTION
N/D metadata.product_name Costante: SNOWFLAKE
N/D metadata.vendor_name Costante: SNOWFLAKE
N/D principal.cloud.environment Costante: MICROSOFT_AZURE
N/D principal.platform Costante: LINUX
N/D target.cloud.environment Costante: MICROSOFT_AZURE

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.