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 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 data 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 uma função que pode criar integrações de armazenamento (somente ACCOUNTADMIN tem esse privilégio por padrão), bancos de dados, data warehouses, estágios e tarefas
  • Para o Cloud Storage V2: um projeto Google Cloud com a API Cloud Storage ativada e permissões para criar buckets, papéis do Identity and Access Management (IAM) e gerenciar políticas do IAM do bucket.
  • 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 só podem ser lidas por ACCOUNTADMIN até que o acesso seja concedido explicitamente. Crie uma função dedicada para a exportação e conceda a ela as duas funções 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 a função de exportação e conceda a ela 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 acesso a eles para a função 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 proprietário da exportação.

Criar um bucket do Cloud Storage

  1. Acesse o console doGoogle Cloud .
  2. Selecione ou crie um projeto.
  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 uma função personalizada 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 Google Cloud console, 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 funções: selecione Descarregamento do Snowflake.
  6. Clique em Salvar.

Criar o formato de arquivo e o estágio externo

  1. Em uma planilha do Snowflake, crie o formato de 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 rastreia o quanto foi lido 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 e inicialize a tabela de estado 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 vai pular linhas que a visualização ainda não materializou. Portanto, os eventos chegam ao Google SecOps cerca de três horas depois que acontecem. Reduzir a defasagem das negociações para aumentar a atualização.
  • WINDOW_END é gravado na tabela antes do descarregamento. Portanto, o valor usado pela instrução COPY INTO e o valor gravado de volta em LAST_EXPORTED são idênticos. Recalcular a hora atual na segunda instrução ignoraria tudo o que aconteceu nesse período.
  • 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 vai permanecer onde estava, e a próxima execução vai repetir essa janela em vez de pular.
  • O 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.

Agendar a tarefa de exportação

  1. Crie e inicie a tarefa da seguinte forma:

    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. Você precisa conceder a essa conta de serviço acesso ao seu bucket.

  1. Acesse Configurações do SIEM > 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 Receber conta de serviço.
  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: exclui arquivos e diretórios vazios da origem após a conclusão de uma busca bem-sucedida.
    • Idade máxima do arquivo: inclua arquivos modificados no último número de dias (o padrão é 180 dias).

    • Namespace do recurso: o namespace do recurso

    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed

  12. Clique em Próxima.

  13. Revise a nova configuração do 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 duas funções no seu bucket do Cloud Storage: Storage Object Viewer para ler os objetos de registro e uma função no nível do bucket para ler os metadados dele.

  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 principais: 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, escolha Gravador de bucket legados 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 armazenados no Amazon S3. O lado do Snowflake é idêntico, exceto pela integração de armazenamento e o estágio. Portanto, o procedimento e a tarefa de exportação 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 do 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, mova a chave para Ativo.
  6. Selecione Políticas.
  7. Selecione Criar política.
  8. No 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 seu ID da conta da AWS. Você modifica a relação de confiança mais tarde e concede acesso ao Snowflake.
  6. Selecione a opção Exigir ID externo.
  7. Insira um ID de marcador de posição, como 0000. Você vai substituir 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 do 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 da função 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 a função 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 da 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 de arquivo, organizar e exportar objetos

  1. Em uma planilha do Snowflake, crie o formato de 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 à etapa por nome, então não precisam ser alteradas.

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: 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 Baixar 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 do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, 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 dos 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 no último número de 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 a ser aplicado aos eventos deste feed
  9. Clique em Próxima.

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

Tabela de mapeamento de UDM

Campo de registro Mapeamento do 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

Ver o registro de alterações deste analisador

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