Raccogliere i log di Snowflake

Supportato in:

Questo documento spiega come importare i log di Snowflake in Google Security Operations utilizzando AWS S3. Il parser estrae i campi dai messaggi di log utilizzando una serie di regole di corrispondenza dei pattern Grok e KV, progettate specificamente per gestire il formato dei log Snowflake. Quindi mappa i campi estratti al modello Unified Data Model (UDM), arricchendo i dati con un contesto aggiuntivo e standardizzando la rappresentazione per ulteriori analisi.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Accesso privilegiato ad AWS
  • Accesso privilegiato a Snowflake (ACCOUNTADMIN)

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.

Configura il criterio 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 criterio.
  8. In Editor policy, seleziona JSON.
  9. Copia e incolla il seguente criterio (in formato JSON) per fornire a Snowflake le autorizzazioni necessarie per caricare o scaricare dati utilizzando un singolo bucket e un singolo percorso di cartella. Puoi anche eliminare i file di dati utilizzando l'opzione di copia 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>/*"
                        ]
                    }
                }
            }
        ]
    }
    
  10. Fai clic su Avanti.

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

  12. Fai clic su Crea criterio.

Configura il ruolo IAM AWS di Snowflake

  1. In AWS Identity and Access Management (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. In un secondo momento, modifichi la relazione di trust e concedi l'accesso a Snowflake.
  6. Seleziona l'opzione Richiedi ID esterno.
  7. Inserisci un ID segnaposto come 0000. In un passaggio successivo, modificherai la relazione di trust per il tuo ruolo IAM e specificherai l'ID esterno per l'integrazione dell'archiviazione.
  8. Fai clic su Avanti.
  9. Seleziona il criterio 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.

Configura l'integrazione di Snowflake S3

  1. Connettiti al database Snowflake.
  2. Sostituisci i seguenti campi ed esegui il comando:

    • <integration_name> è il nome della nuova integrazione (ad esempio, s3_integration).
    • <iam_role> è l'Amazon Resource Name (ARN) del ruolo che hai creato in precedenza.
    • <aws_s3_bucket_path> è il percorso del bucket che hai creato in precedenza (ad esempio 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>')
    

Configurare le autorizzazioni utente AWS IAM per accedere al bucket

  1. Recupera l'ARN dell'utente IAM creato automaticamente per il tuo account Snowflake, sostituisci <integration_name> con il nome effettivo dell'integrazione che hai creato in precedenza: none DESC INTEGRATION <integration_name>;
  • Ad esempio: 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= | | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+
  1. Copia e salva i valori delle seguenti proprietà:
    • STORAGE_AWS_IAM_USER_ARN
    • STORAGE_AWS_EXTERNAL_ID
  2. Vai alla Console di gestione AWS.
  3. Seleziona IAM > Ruoli.
  4. Seleziona il ruolo creato in precedenza.
  5. Seleziona la scheda Relazioni di trust.
  6. Fai clic su Modifica policy di attendibilità.
  7. Aggiorna il documento delle norme con i valori di output di 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>"
            }
          }
        }
      ]
    }
    
  8. Sostituisci:

    • snowflake_user_arn è il valore di STORAGE_AWS_IAM_USER_ARN che hai registrato.
    • snowflake_external_id è il valore di STORAGE_AWS_EXTERNAL_ID che hai registrato.
  9. Fai clic su Aggiorna criteri.

Configura il formato del file JSON in Snowflake

  1. In Snowflake, inserisci questo comando:

    CREATE OR REPLACE FILE FORMAT my_json_format
      type = json
      COMPRESSION = 'gzip'
      null_if = ('NULL', 'null');
    

Crea un'area temporanea S3 in Snowflake

  1. In Snowflake, sostituisci i seguenti campi e inserisci il comando:

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

Configurare Snowflake per esportare i dati

  1. Esegui il comando unload per esportare i dati dalle tabelle alla fase e a sua volta ad 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);
    
  2. Ripeti la procedura di esportazione per tutte le seguenti tabelle in cui Snowflake archivia i log e i dati correlati all'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 ;
    

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 il tag della 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 per le autorizzazioni.
  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.

Configurare i feed

Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:

  • Impostazioni SIEM > Feed
  • Hub dei contenuti > Pacchetti di contenuti

Configura i feed da Impostazioni SIEM > Feed

Per configurare un feed:

  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, Log Snowflake).
  5. Seleziona Amazon S3 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:

    • Region (Regione): la regione in cui si trova il bucket Amazon S3.
    • URI S3: l'URI del bucket (il formato deve essere s3://your-log-bucket-name/). Sostituisci quanto segue:
      • your-log-bucket-name: il nome del bucket.
    • L'URI è una: seleziona Directory o Directory che include sottodirectory.
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • ID chiave di accesso: la chiave di accesso utente con accesso al bucket S3.
    • Chiave di accesso segreta: la chiave segreta dell'utente con accesso al bucket S3.
  9. Fai clic su Avanti.

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

Configurare i feed dall'hub dei contenuti

Specifica i valori per i seguenti campi:

  • Region (Regione): la regione in cui si trova il bucket Amazon S3.

    • URI S3: l'URI del bucket (il formato deve essere s3://your-log-bucket-name/). Sostituisci quanto segue:
      • your-log-bucket-name: il nome del bucket.
    • L'URI è una: seleziona Directory o Directory che include sottodirectory.
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • ID chiave di accesso: la chiave di accesso utente con accesso al bucket S3.
    • Chiave di accesso segreta: la chiave segreta dell'utente con accesso al bucket S3.

Opzioni avanzate

  • Nome feed: un valore precompilato che identifica il feed.
  • Tipo di origine: metodo utilizzato per raccogliere i log in Google SecOps.
  • Spazio dei nomi dell'asset: lo spazio dei nomi associato al feed.
  • Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.

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