Recolha registos do Snowflake
Este documento explica como carregar registos do Snowflake para o Google Security Operations através do AWS S3. O analisador extrai campos das mensagens de registo através de uma série de regras de correspondência de padrões Grok e KV, especificamente concebidas para processar o formato de registo do Snowflake. Em seguida, mapeia os campos extraídos para o modelo de dados unificado (UDM), enriquecendo os dados com contexto adicional e padronizando a representação para análise posterior.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps
- Acesso privilegiado ao AWS
- Acesso privilegiado ao Snowflake (ACCOUNTADMIN)
Configure um contentor do Amazon S3
- Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor
- Guarde o Nome e a Região do contentor para referência futura.
Configure a política de IAM do AWS do Snowflake
- Inicie sessão na AWS Management Console.
- Pesquise e selecione IAM.
- Selecione Definições da conta.
- Em Serviço de tokens de segurança (STS) na lista Pontos finais, encontre a região do Snowflake onde a sua conta está localizada.
- Se o estado do STS for inativo, mova o botão para Ativo.
- Selecione Políticas.
- Selecione Criar política.
- No Editor de políticas, selecione JSON.
Copie e cole a seguinte política (no formato JSON) para fornecer ao Snowflake as autorizações necessárias para carregar ou descarregar dados através de um único caminho de pasta e contentor. Também pode limpar ficheiros de dados através da opção de cópia 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>/*" ] } } } ] }
Clicar em Seguinte.
Introduza um Nome da política (por exemplo, snowflake_access) e uma Descrição opcional.
Clique em Criar política.
Configure a função IAM do AWS do Snowflake
- No AWS Identity and Access Management (IAM), selecione Funções.
- Clique em Criar função.
- Selecione Conta da AWS como o tipo de entidade fidedigna.
- Selecione Outra conta da AWS.
- No campo ID da conta, introduza o seu próprio ID da conta da AWS temporariamente. Posteriormente, modifica a relação de confiança e concede acesso ao Snowflake.
- Selecione a opção Exigir ID externo.
- Introduza um ID de marcador de posição, como 0000. Num passo posterior, vai modificar a relação de confiança para a sua função do IAM e especificar o ID externo para a integração de armazenamento.
- Clicar em Seguinte.
- Selecione a política de IAM que criou anteriormente.
- Clicar em Seguinte.
- Introduza um nome e uma descrição para a função.
- Clique em Criar função.
- Na página de resumo da função, copie e guarde o valor ARN da função.
Configure a integração do Snowflake S3
- Associe-se à base de dados Snowflake.
Substitua os seguintes campos e execute o comando:
<integration_name>
é o nome da nova integração (por exemplo, s3_integration).<iam_role>
é o Nome do recurso da Amazon (ARN) da função que criou anteriormente.<aws_s3_bucket_path>
é o caminho para o contentor que criou anteriormente (por exemplo,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>')
Configure as autorizações do utilizador do IAM da AWS para aceder ao contentor
- Obtenha o ARN do utilizador do IAM que foi criado automaticamente para a sua conta do Snowflake, substitua
<integration_name>
pelo nome real da integração que criou anteriormente:none DESC INTEGRATION <integration_name>;
- Por exemplo:
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= | | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+
- Copie e guarde os valores das seguintes propriedades:
- STORAGE_AWS_IAM_USER_ARN
- STORAGE_AWS_EXTERNAL_ID
- Aceda à AWS Management Console.
- Selecione IAM > Funções.
- Selecione a função que criou anteriormente.
- Selecione o separador Relações de confiança.
- Clique em Editar política de confiança.
Atualize o documento de política com os valores de saída 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>" } } } ] }
Substituir:
snowflake_user_arn
é o valorSTORAGE_AWS_IAM_USER_ARN
que registou.snowflake_external_id
é o valorSTORAGE_AWS_EXTERNAL_ID
que registou.
Clique em Atualizar política.
Configure o formato de ficheiro JSON no Snowflake
No Snowflake, introduza o seguinte comando:
CREATE OR REPLACE FILE FORMAT my_json_format type = json COMPRESSION = 'gzip' null_if = ('NULL', 'null');
Crie uma fase S3 no Snowflake
No Snowflake, substitua os seguintes campos e introduza o 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;
Configure o Snowflake para exportar dados
Execute o comando de descarregamento para exportar dados de tabelas para a fase e, por sua vez, para o 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);
Repita o processo de exportação para todas as seguintes tabelas nas quais o Snowflake armazena registos e dados relacionados com a auditoria:
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 ;
Configure o AWS IAM para o Google SecOps
- Inicie sessão na AWS Management Console.
- Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione a etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise e selecione a política AmazonS3FullAccess.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do Snowflake).
- Selecione Amazon S3 como o Tipo de origem.
- Selecione Snowflake como o Tipo de registo.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- Região: a região onde o contentor do Amazon S3 está localizado.
- URI do S3: o URI do contentor (o formato deve ser:
s3://your-log-bucket-name/
). Substitua o seguinte:your-log-bucket-name
: o nome do segmento.
- O URI é um: selecione Diretório ou Diretório que inclui subdiretórios.
- Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
- ID da chave de acesso: a chave de acesso do utilizador com acesso ao contentor do S3.
- Chave de acesso secreta: a chave secreta do utilizador com acesso ao contentor do S3.
Clicar em Seguinte.
Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.