Coletar registros do Snowflake

Compatível com:

Este documento explica como ingerir registros do Snowflake no Google Security Operations. É possível configurar a ingestão usando dois métodos: Cloud Storage V2 (recomendado) ou Amazon S3 V2. Os dois métodos usam o mesmo mecanismo no Snowflake: uma tarefa programada descarrega os dados de uso da conta em um estágio externo, e o Google SecOps lê os arquivos exportados com um feed.

O Snowflake é uma plataforma de dados em nuvem que armazena a atividade da conta no esquema SNOWFLAKE.ACCOUNT_USAGE. A visualização LOGIN_HISTORY registra as tentativas de autenticação, incluindo o endereço IP do cliente, o fator de autenticação e o motivo da falha. A visualização QUERY_HISTORY registra todas as instruções executadas na conta, incluindo o usuário, a função, o warehouse e os objetos afetados.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Acesso ao Snowflake com um papel que pode criar integrações de armazenamento (somente ACCOUNTADMIN tem esse privilégio por padrão), bancos de dados, warehouses, preparações e tarefas.
  • Para o Cloud Storage V2: um projeto do Google Cloud com a API Cloud Storage ativada e permissões para criar buckets, criar papéis do Identity and Access Management (IAM) e gerenciar políticas de IAM de buckets.
  • Para o Amazon S3 V2: acesso privilegiado à AWS para criar buckets do S3, políticas do IAM, papéis do IAM e usuários do IAM

Conceder acesso aos dados de uso da conta do Snowflake

As visualizações SNOWFLAKE.ACCOUNT_USAGE podem ser lidas por ACCOUNTADMIN somente até que o acesso seja concedido explicitamente. Crie um papel dedicado para a exportação e conceda a ele os dois papéis de banco de dados que abrangem as visualizações exportadas por este documento.

  1. Faça login no Snowflake e abra uma planilha.
  2. Crie o papel de exportação e conceda a ele acesso de leitura às visualizações de uso da conta da seguinte maneira:

    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. Crie o banco de dados, o esquema e o warehouse que a exportação usa e conceda-os ao papel da seguinte maneira:

    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>;
    
    • Substitua <YOUR_USER> pelo usuário do Snowflake que é proprietário da exportação.

Criar um bucket do Cloud Storage

  1. Acesse o console doGoogle Cloud .
  2. Selecione seu projeto ou crie um novo.
  3. No menu de navegação, acesse Cloud Storage > Buckets.
  4. Clique em Criar bucket.
  5. Informe os seguintes detalhes de configuração:

    Configuração Valor
    Nomeie seu bucket Insira um nome globalmente exclusivo (por exemplo, snowflake-activity-logs)
    Tipo de local Escolha de acordo com suas necessidades (região, birregional, multirregional)
    Local Selecione o local (por exemplo, us-central1).
    Classe de armazenamento Padrão (recomendado para registros acessados com frequência)
    Controle de acesso Uniforme (recomendado)
    Ferramentas de proteção Opcional: ativar o controle de versões de objetos ou a política de retenção
  6. Clique em Criar.

Criar um papel personalizado do Cloud Storage para o Snowflake

  1. No console do Google Cloud , acesse IAM e administrador > Papéis.
  2. Clique em Criar papel.
  3. Informe os seguintes detalhes de configuração:
    • Título: insira Snowflake Unload.
    • ID: insira snowflake_unload.
    • Etapa da criação do papel: selecione Disponibilidade geral.
  4. Clique em Adicionar permissões e adicione as seguintes permissões:
    • storage.buckets.get
    • storage.objects.create
    • storage.objects.delete
    • storage.objects.list
  5. Clique em Criar.

Criar a integração de armazenamento do Snowflake para o Cloud Storage

  1. Em uma planilha do Snowflake, crie a integração de armazenamento da seguinte maneira:

    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;
    
    • Substitua snowflake-activity-logs pelo nome do seu bucket.
  2. Recupere a conta de serviço que o Snowflake criou para a integração da seguinte maneira:

    DESC STORAGE INTEGRATION SECOPS_GCS_INT;
    
  3. Copie o valor da propriedade STORAGE_GCP_SERVICE_ACCOUNT. O valor tem o seguinte formato:

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

Conceder à conta de serviço do Snowflake acesso ao bucket

  1. No console do Google Cloud , acesse Cloud Storage > Buckets.
  2. Clique no bucket que você criou (por exemplo, snowflake-activity-logs).
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar principais: cole o valor STORAGE_GCP_SERVICE_ACCOUNT.
    • Atribuir papéis: selecione Snowflake Unload.
  6. Clique em Salvar.

Criar o formato do arquivo e o estágio externo

  1. Em uma planilha do Snowflake, crie o formato do arquivo e o estágio que grava no bucket da seguinte maneira:

    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;
    

Criar a tabela de estado de exportação

A exportação monitora até onde leu em cada visualização. Sem essa marca-d'água, cada execução reexportaria toda a visualização, e os mesmos eventos seriam ingeridos novamente.

  1. Crie a tabela de estado e preencha-a da seguinte maneira:

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

Criar o procedimento de exportação

  1. Crie o procedimento que descarrega as duas visualizações e avança a marca d'água da seguinte maneira:

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

Cada elemento do procedimento existe por um motivo:

  • A janela fecha três horas antes do horário atual. O Snowflake preenche LOGIN_HISTORY com até duas horas de latência e QUERY_HISTORY com até 45 minutos. Portanto, uma janela que termina agora pularia as linhas que a visualização ainda não materializou. Portanto, os eventos chegam ao Google SecOps cerca de três horas depois de acontecerem. Encurtar o atraso troca a integridade pela atualização.
  • WINDOW_END é gravado na tabela antes do descarregamento, então o valor usado pela instrução COPY INTO e o valor gravado de volta em LAST_EXPORTED são idênticos. Recalcular o horário atual na segunda instrução ignoraria tudo o que aconteceu nesse intervalo.
  • Cada atualização de LAST_EXPORTED é executada após a própria instrução COPY INTO. Se um descarregamento falhar, o procedimento será interrompido, a marca-d'água permanecerá onde estava e a próxima execução repetirá essa janela em vez de ignorá-la.
  • INCLUDE_QUERY_ID = TRUE adiciona um UUID a cada nome de arquivo. Sem ele, os arquivos descarregados são nomeados como data_0_0_0, e as exportações repetidas para o mesmo caminho entram em conflito, o que o Snowflake documenta como uma fonte de dados duplicados no estágio.

Programar a tarefa de exportação

  1. Crie e inicie a tarefa da seguinte maneira:

    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. Execute a tarefa uma vez para verificar a configuração sem esperar pela programação, da seguinte maneira:

    EXECUTE TASK SECOPS_EXPORT_TASK;
    
  3. Verifique o resultado da execução e os arquivos que chegaram ao estágio da seguinte maneira:

    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;
    

Recuperar a conta de serviço do Google SecOps

O Google SecOps usa uma conta de serviço exclusiva para ler dados do seu bucket do Cloud Storage. É necessário conceder a essa conta de serviço acesso ao bucket.

  1. Acesse Configurações > Gerenciamento de dados > Feeds. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Feeds.
  2. Clique em Adicionar novo feed.
  3. Clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Snowflake activity logs).
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione Snowflake como o Tipo de registro.
  7. Clique em Get Service Account.
  8. Um e-mail exclusivo da conta de serviço será exibido, por exemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copie esse endereço de e-mail para usar na próxima etapa.

  10. Clique em Próxima.

  11. Especifique valores para os seguintes parâmetros de entrada:

    • URL do bucket de armazenamento: insira o URI do bucket do Cloud Storage com o caminho do prefixo:

      gs://snowflake-activity-logs/snowflake/
      
    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:

      • Nunca excluir arquivos: nunca exclua arquivos da origem (recomendado para testes).
      • Excluir arquivos transferidos e diretórios vazios: exclua arquivos e diretórios vazios da origem após a conclusão de uma busca.
    • Idade máxima do arquivo: inclua arquivos modificados nos últimos dias (o padrão é 180 dias).

    • Namespace do recurso: o namespace do recurso

    • Rótulos de ingestão: o rótulo que será aplicado aos eventos desse feed.

  12. Clique em Próxima.

  13. Revise a configuração do novo feed na tela Finalizar e clique em Enviar.

Conceder permissões do IAM à conta de serviço do Google SecOps

A conta de serviço do Google SecOps precisa de dois papéis no bucket do Cloud Storage: Storage Object Viewer para ler os objetos de registro e um papel no nível do bucket para ler os metadados do bucket.

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket.
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps.
    • Atribuir papéis: selecione as duas opções a seguir:
      • Leitor de objetos do Storage: lê os objetos de registro.
      • Leitor de bucket legado do Storage: lê os metadados do bucket. Se você selecionou a opção de exclusão Excluir arquivos transferidos e diretórios vazios, selecione Gravador de bucket legado do Storage, que também concede a permissão de exclusão.
  6. Clique em Salvar.

Método 2: Amazon S3 V2

Use esse método quando os registros precisarem ser enviados para o Amazon S3. O lado do Snowflake é idêntico, exceto pela integração de armazenamento e pelo estágio. Portanto, o procedimento de exportação e a tarefa do Método 1 são reutilizados sem alterações.

Configurar um bucket do Amazon S3

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket.
  2. Salve o Nome e a Região do bucket para referência futura. Por exemplo, snowflake-activity-logs.

Configurar a política de IAM da AWS do Snowflake

  1. Faça login no console de gerenciamento da AWS.
  2. Pesquise e selecione IAM.
  3. Selecione Configurações da conta.
  4. Em Security Token Service (STS) na lista Endpoints, encontre a região do Snowflake em que sua conta está localizada.
  5. Se o status do STS estiver inativo, mude o botão para Ativo.
  6. Selecione Políticas.
  7. Selecione Criar política.
  8. Em Editor de políticas, selecione JSON.
  9. Copie e cole a política a seguir, que concede ao Snowflake as permissões necessárias para descarregar dados em um bucket e um caminho de pasta:

    {
        "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. Clique em Próxima.

  11. Insira um Nome da política (por exemplo, snowflake_access) e uma descrição opcional.

  12. Clique em Criar política.

Configurar o papel do IAM da AWS do Snowflake

  1. Em IAM, selecione Papéis.
  2. Clique em Criar papel.
  3. Selecione Conta da AWS como o tipo de entidade confiável.
  4. Selecione Outra conta do AWS.
  5. No campo ID da conta, insira temporariamente o ID da sua conta da AWS. Modifique a relação de confiança mais tarde e conceda acesso ao Snowflake.
  6. Selecione a opção Exigir ID externo.
  7. Insira um ID de marcador de posição, como 0000. Você vai substituí-lo pelo ID externo da integração de armazenamento mais tarde.
  8. Clique em Próxima.
  9. Selecione a política do IAM que você criou anteriormente.
  10. Clique em Próxima.
  11. Digite um nome e uma descrição para a função.
  12. Clique em Criar papel.
  13. Na página de resumo da função, copie e salve o valor de ARN da função.

Criar a integração de armazenamento do Snowflake para o Amazon S3

  1. Em uma planilha do Snowflake, crie a integração de armazenamento da seguinte maneira:

    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;
    
    • Substitua <IAM_ROLE_ARN> pelo ARN do papel que você salvou.
  2. Recupere a identidade da AWS que o Snowflake criou para a integração da seguinte maneira:

    DESC INTEGRATION SECOPS_S3_INT;
    
  3. Copie e salve os valores das seguintes propriedades:

    • STORAGE_AWS_IAM_USER_ARN
    • STORAGE_AWS_EXTERNAL_ID

Conceder ao usuário do IAM do Snowflake acesso ao bucket

  1. Acesse o Console de Gerenciamento da AWS.
  2. Selecione IAM > Papéis.
  3. Selecione o papel que você criou anteriormente.
  4. Selecione a guia Relações de confiança.
  5. Clique em Editar política de confiança.
  6. Atualize o documento de política com os valores de saída DESC INTEGRATION da seguinte maneira:

    {
        "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. Clique em Atualizar política.

Criar o formato do arquivo, o estágio e os objetos de exportação

  1. Em uma planilha do Snowflake, crie o formato do arquivo e o estágio que grava no bucket da seguinte maneira:

    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. Crie a tabela de estado, o procedimento e a tarefa exatamente como descrito no Método 1, nas seções Criar a tabela de estado de exportação, Criar o procedimento de exportação e Programar a tarefa de exportação. As instruções fazem referência ao estágio pelo nome, então não precisam de mudanças.

Configurar o IAM da AWS para o Google SecOps

  1. Faça login no console de gerenciamento da AWS.
  2. Crie um usuário seguindo este guia do usuário: Como criar um usuário do IAM.
  3. Selecione o Usuário criado.
  4. Selecione a guia Credenciais de segurança.
  5. Clique em Criar chave de acesso na seção Chaves de acesso.
  6. Selecione Serviço de terceiros como o Caso de uso.
  7. Clique em Próxima.
  8. Opcional: adicione uma tag de descrição.
  9. Clique em Criar chave de acesso.
  10. Clique em Fazer o download do arquivo .csv para salvar a chave de acesso e a chave de acesso secreta para referência futura.
  11. Clique em Concluído.
  12. Selecione a guia Permissões.
  13. Clique em Adicionar permissões na seção Políticas de permissões.
  14. Selecione Adicionar permissões.
  15. Selecione Anexar políticas diretamente.
  16. Pesquise e selecione a política AmazonS3FullAccess.
  17. Clique em Próxima.
  18. Clique em Adicionar permissões

Configurar um feed no Google SecOps para ingerir registros do Snowflake

  1. Acesse Configurações > Gerenciamento de dados > Feeds. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Snowflake activity logs).
  5. Selecione Amazon S3 V2 como o Tipo de origem.
  6. Selecione Snowflake como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique os valores para os seguintes parâmetros de entrada:

    • URI do S3: s3://snowflake-activity-logs/snowflake/
    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência.
    • Idade máxima do arquivo: inclua arquivos modificados nos últimos dias (o padrão é 180 dias).
    • ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
    • Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.
    • Namespace do recurso: o namespace do recurso
    • Rótulos de ingestão: o rótulo que será aplicado aos eventos desse feed.
  9. Clique em Próxima.

  10. Revise a configuração do novo feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento de UDM

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

Registro de alterações

Confira o registro de alterações deste analisador

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.