Raccogli i log di Snowflake

Supportata 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 sul 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 di dati cloud che archivia l'attività dell'account nello schema SNOWFLAKE.ACCOUNT_USAGE. La vista LOGIN_HISTORY registra i tentativi di autenticazione, inclusi l'indirizzo IP client, il fattore di autenticazione e il motivo dell'errore. La vista QUERY_HISTORY registra ogni istruzione eseguita nell'account, inclusi l'utente, il ruolo, il warehouse e gli oggetti interessati.

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 ha questo privilegio per impostazione predefinita), database, warehouse, fasi 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 con privilegi ad AWS per creare bucket S3, policy IAM, ruoli IAM e utenti IAM

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

Le viste SNOWFLAKE.ACCOUNT_USAGE sono leggibili da ACCOUNTADMIN solo finché non viene concesso l'accesso in modo 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 di utilizzo dell'account come segue:

    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 globalmente univoco (ad esempio snowflake-activity-logs)
    Tipo di località Scegli in base alle tue esigenze (Regione, a due regioni, multiregionale)
    Località Seleziona la località (ad esempio us-central1)
    Classe di archiviazione Standard (consigliato per i log ad accesso 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 dello spazio di archiviazione Snowflake per Cloud Storage

  1. In un foglio di lavoro Snowflake, crea l'integrazione dello spazio di archiviazione come segue:

    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 STORAGE_GCP_SERVICE_ACCOUNT
    • Assegna ruoli: seleziona Snowflake Unload
  6. Fai clic su Salva.

Crea il formato file e la fase esterna

  1. In un foglio di lavoro Snowflake, crea il formato file e la fase 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 ha letto in ogni visualizzazione. Senza questo watermark, ogni esecuzione riesporterebbe l'intera visualizzazione e gli stessi eventi verrebbero importati di nuovo.

  1. Crea la tabella degli stati e inserisci i dati 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 la filigrana come segue:

    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 prima dell'ora corrente. Snowflake compila LOGIN_HISTORY con un massimo di due ore di latenza e QUERY_HISTORY con un massimo di 45 minuti, quindi una finestra che termina ora salterebbe le righe che la vista non ha ancora materializzato. Pertanto, gli eventi raggiungono Google SecOps circa tre ore dopo che si sono verificati. La riduzione del ritardo scambia la completezza con l'aggiornamento.
  • 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 è accaduto nel frattempo.
  • Ogni aggiornamento LAST_EXPORTED viene eseguito dopo la propria istruzione COPY INTO. Se un'operazione di scaricamento non va a buon fine, la procedura si interrompe, il watermark rimane dove si trovava e l'esecuzione successiva ripete la finestra anziché saltarla.
  • INCLUDE_QUERY_ID = TRUE aggiunge un UUID a ogni nome file. Senza questa opzione, i file scaricati vengono denominati data_0_0_0 e le esportazioni ripetute nello stesso percorso entrano in conflitto, il che viene documentato da Snowflake come una fonte di dati duplicati nella fase.

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;
    

Recupera il account di servizio Google SecOps

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

  1. Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > 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 es. 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 univoco del account di servizio, 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 i file trasferiti e le directory vuote: elimina i file e le directory vuote dall'origine dopo il completamento di un recupero riuscito.
    • Età massima dei file: includi i file modificati negli ultimi 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 di notizie 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 di 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'indirizzo email del account di servizio Google SecOps
    • Assegna i ruoli: seleziona entrambe le seguenti opzioni:
      • Storage Object Viewer: legge gli oggetti di log.
      • Storage Legacy Bucket Reader: legge i metadati del bucket. Se hai selezionato l'opzione di eliminazione Elimina i file trasferiti e le 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 archiviati in Amazon S3. Il lato Snowflake è identico, ad eccezione dell'integrazione dello spazio di archiviazione e della fase, 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 dell'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 è Non attivo, sposta il pulsante di attivazione/disattivazione su Attivo.
  6. Seleziona Policy.
  7. Seleziona Crea policy.
  8. In Editor delle 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 in 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 policy (ad esempio snowflake_access) e una descrizione facoltativa.

  12. Fai clic su Crea policy.

Configura il ruolo IAM AWS di Snowflake

  1. In IAM, seleziona Ruoli.
  2. Fai clic su Crea ruolo.
  3. Seleziona Account AWS come tipo di entità attendibile.
  4. Seleziona Another AWS account (Un altro account AWS).
  5. Nel campo ID account, inserisci temporaneamente il tuo ID account AWS. In seguito, modificherai la relazione di trust e concederai l'accesso a Snowflake.
  6. Seleziona l'opzione Richiedi ID esterno.
  7. Inserisci un ID segnaposto, ad esempio 0000. In seguito, lo sostituirai con l'ID esterno dell'integrazione dello spazio di 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 Role ARN (ARN ruolo).

Crea l'integrazione dello spazio di archiviazione di Snowflake per Amazon S3

  1. In un foglio di lavoro Snowflake, crea l'integrazione dello spazio di archiviazione come segue:

    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à:

    • 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 attendibilità.
  5. Fai clic su Modifica policy di attendibilità.
  6. Aggiorna il documento della policy con i valori di output DESC INTEGRATION come segue:

    {
        "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, la fase e gli oggetti di esportazione

  1. In un foglio di lavoro Snowflake, crea il formato file e la fase 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 è necessario modificarle.

Configura AWS IAM per Google SecOps

  1. Accedi alla Console di gestione AWS.
  2. Crea un utente seguendo questa guida dell'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 Policy sulle autorizzazioni.
  14. Seleziona Aggiungi autorizzazioni.
  15. Seleziona Collega direttamente i criteri.
  16. Cerca e seleziona la policy 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 > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > 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 es. 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:

    • URI S3: s3://snowflake-activity-logs/snowflake/
    • Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • Età massima dei file: includi i file modificati negli ultimi 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 di notizie 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 Mappatura: 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 Mappatura diretta
has_principal metadata.event_type Mapped: true → NETWORK_CONNECTION, true → STATUS_UPDATE, true → USER_LOGIN
has_principal_user metadata.event_type Mappatura: true → USER_UNCATEGORIZED
column10 metadata.product_event_type Mappatura diretta
QUERY_ID metadata.product_log_id Mappatura diretta
column1 metadata.product_log_id Mappatura diretta
column6 metadata.product_version Mappatura diretta
SESSION_ID network.http.session_id Mappatura diretta
RECEIVED_BYTES network.received_bytes Rinominato/mappato
BYTES_SENT_OVER_THE_NETWORK network.sent_bytes Rinominato/mappato
SENT_BYTES network.sent_bytes Rinominato/mappato
APPLICATION principal.application Mappatura diretta
data.user_name principal.asset.hostname Mappatura diretta
CLIENT_IP principal.asset.ip Unita
IP principal.asset.ip Unita
column5 principal.asset.ip Unita
SOURCE_REGION principal.cloud.availability_zone Mappatura diretta
SOURCE_CLOUD principal.cloud.environment Mappatura: (?i)azure → MICROSOFT_AZURE, (?i)amazon → AMAZON_WEB_SERVICES, (?i)google…
data.user_name principal.hostname Mappatura diretta
CLIENT_IP principal.ip Unita
IP principal.ip Unita
column5 principal.ip Unita
OS principal.platform Mapped: (?i)Linux → LINUX, (?i)windows → WINDOWS, (?i)mac/ios → MAC
OS_VERSION principal.platform_version Mappatura diretta
SOURCE_CLOUD_label principal.resource.attribute.labels Unita
roles principal.user.attribute.roles Unita
data.role_name principal.user.role_name Mappatura diretta
column9 principal.user.user_display_name Mappatura diretta
USER_NAME principal.user.userid Mappatura diretta
column10 principal.user.userid Mappatura diretta
column3 principal.user.userid Mappatura diretta
EXECUTION_STATUS security_result.action Mappatura: (?i)success → action, (?i)fail → security_result_action_block
STATUS security_result.action Mappatura: (?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 Mappatura diretta
column11 security_result.action_details Mappatura diretta
column3 security_result.action_details Mappatura diretta
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 Mappatura diretta
STATUS security_result.summary Mappatura diretta
column17 security_result.summary Mappatura diretta
TARGET_REGION target.cloud.availability_zone Mappatura diretta
TARGET_CLOUD target.cloud.environment Mappatura: (?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 Mappatura diretta
column4 target.user.userid Mappatura diretta
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.