Coletar registros de acesso ao servidor do AWS S3
Este documento explica como coletar logs de acesso ao servidor do AWS S3 configurando um feed de operações de segurança do Google. O analisador extrai campos usando padrões grok, processa possíveis entradas JSON e mapeia os campos extraídos para o UDM. Ele realiza transformações de dados, conversões de tipo e lógica condicional com base na presença e nos valores de campos específicos para garantir a representação precisa do UDM.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem acesso privilegiado à AWS.
Configurar o registro de acesso ao servidor do AWS S3
O Google SecOps oferece suporte à coleta de registros usando o Amazon S3 pelo Amazon SQS.
- Faça login no console do AWS Management.
- Acesse o console do Amazon S3.
- Acesse Amazon S3 > Buckets.
- Selecione um bucket ou crie um.
- Clique em Properties.
- Na seção Registro de acesso ao servidor, clique em Editar.
- Selecione Ativar.
- No campo Bucket de destino, insira um nome para o novo bucket para enviar os objetos de registro de log ou selecione um bucket existente como destino.
- Clique em Salvar alterações.
- Para criar a fila do SQS para o bucket do S3, configure uma instância do Amazon SQS com o armazenamento do S3. Para mais informações, consulte Como configurar um bucket para notificações (tópico do SNS ou fila do SQS).
Com base no serviço e na região, identifique os endpoints para conectividade consultando a seguinte documentação da AWS: * Para informações sobre qualquer origem de registro, consulte Endpoints e cotas do AWS Identity and Access Management. * Para informações sobre as origens de registro do S3, consulte Endpoints e cotas do Amazon Simple Storage Service. * Para informações sobre as origens de registro do SQS, consulte Endpoints e cotas do Amazon Simple Queue Service.
Configurar um feed no Google SecOps para processar registros de acesso ao servidor do AWS S3
- No menu Google SecOps, acesse Configurações > Feeds > Adicionar novo.
- Na lista Tipo de origem, selecione Amazon S3 ou Amazon SQS.
- Na lista Tipo de registro, selecione Acesso ao servidor do AWS S3.
- Clique em Próxima.
- O Google SecOps oferece suporte à coleta de registros usando um ID de chave de acesso e um método secreto. Para criar o ID da chave de acesso e o secret, consulte Configurar a autenticação da ferramenta com a AWS.
- Com base na configuração de acesso ao servidor do AWS S3 que você criou, especifique os valores para os parâmetros de entrada:
- Se você estiver usando o Amazon S3, especifique valores para os seguintes campos:
- Região
- URI do S3
- URI é um
- Opção de exclusão da origem
- ID da chave de acesso
- Chave de acesso secreta
- Se você estiver usando o Amazon SQS, especifique valores para os seguintes campos:
- Região
- Nome da fila
- Número da conta
- ID da chave de acesso da fila
- Chave de acesso secreta da fila
- Opção de exclusão da origem
- Se você estiver usando o Amazon S3, especifique valores para os seguintes campos:
- Clique em Próximo e, em seguida, Enviar.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
aclRequired |
target.resource.attribute.labels.key : "aclRequired"target.resource.attribute.labels.value : valor de aclRequired |
Mapeado diretamente do campo de registro bruto aclRequired . |
authenticationtype |
extensions.auth.auth_details |
Mapeado diretamente do campo de registro bruto authenticationtype . |
bucket |
target.resource.name |
Mapeado diretamente do campo de registro bruto bucket . |
bucket |
target.resource.resource_type : "STORAGE_BUCKET" |
O analisador define resource_type como "STORAGE_BUCKET" se o campo bucket estiver presente. |
bucketowner |
target.resource.product_object_id |
Mapeado diretamente do campo de registro bruto bucketowner . |
bytes_sent |
network.sent_bytes |
Mapeado diretamente do campo de registro bruto bytes_sent após a conversão em um número inteiro não assinado e a substituição de "-" por "0". |
ciphersuite |
network.application_protocol : "HTTPS" |
O analisador define application_protocol como "HTTPS" se o campo ciphersuite estiver presente. |
ciphersuite |
network.tls.cipher |
Mapeado diretamente do campo de registro bruto ciphersuite . |
errorcode |
security_result.action_details |
Mapeado diretamente do campo de registro bruto errorcode . |
errorcode |
security_result.action : "BLOCK" |
O analisador define action como "BLOCK" se o campo errorcode contém "AccessDenied" (sem distinção entre maiúsculas e minúsculas). |
hostheader |
target.hostname |
Extraídos do campo de registro bruto hostheader , potencialmente removendo o número da porta. |
hostheader |
target.port |
Extraídos do campo de registro bruto hostheader se um número de porta estiver presente. |
hostid |
target.resource.attribute.labels.key : "S3 Extended Request ID"target.resource.attribute.labels.value : valor de hostid |
Mapeado diretamente do campo de registro bruto hostid . |
http_capture |
network.http.method |
O método HTTP é extraído do campo http_capture . |
http_capture |
network.http.version |
A versão HTTP é extraída do campo http_capture . |
http_capture |
target.url |
O URL de destino é construído usando hostheader e http_request_uri (extraídos de http_capture ), com o prefixo "http://" ou "https://" com base na presença de ciphersuite . |
httpstatus |
network.http.response_code |
Mapeado diretamente do campo de registro bruto httpstatus após a conversão em um número inteiro. |
object_version_id |
target.resource.product_object_id |
Mapeado diretamente do campo de registro bruto object_version_id . |
objectsize |
target.file.size |
Mapeado diretamente do campo de registro bruto objectsize após a conversão em um número inteiro não assinado e a substituição de "-" por "0". |
operation |
metadata.product_event_type |
Mapeado diretamente do campo de registro bruto operation . |
referrer |
network.http.referral_url |
Mapeado diretamente do campo de registro bruto referrer após a remoção das aspas. |
remoteip |
metadata.event_type : "USER_RESOURCE_ACCESS" |
O analisador define event_type como "USER_RESOURCE_ACCESS" se o campo remoteip estiver vazio. |
remoteip |
principal.ip |
Mapeado diretamente do campo de registro bruto remoteip . |
requester |
target.resource.attribute.labels.key : "Access Point ARN"target.resource.attribute.labels.value : valor de requester |
Mapeado diretamente do campo de registro bruto requester . |
requester_user |
principal.user.userid |
Mapeado diretamente do campo de registro bruto requester_user . |
requestid |
network.session_id |
Mapeado diretamente do campo de registro bruto requestid . |
request_time_ms |
network.session_duration.nanos |
Mapeado diretamente do campo de registro bruto request_time_ms após a conversão em um número inteiro, substituindo "-" por "0" e preenchendo com zeros para representar nanossegundos. |
signatureversion |
target.resource.attribute.labels.key : "Signature Version"target.resource.attribute.labels.value : valor de signatureversion |
Mapeado diretamente do campo de registro bruto signatureversion . |
time |
metadata.event_timestamp |
Analisado do campo de registro bruto time e convertido em um carimbo de data/hora. |
tlsVersion |
network.tls.version |
Mapeado diretamente do campo de registro bruto tlsVersion . |
useragent |
network.http.user_agent |
Mapeado diretamente do campo de registro bruto useragent após a remoção das aspas. |
(Parser Logic) | metadata.event_type : "NETWORK_HTTP" |
O analisador define o event_type padrão como "NETWORK_HTTP". |
(Parser Logic) | metadata.log_type : "AWS_S3_SERVER_ACCESS" |
O analisador define log_type como "AWS_S3_SERVER_ACCESS". |
(Parser Logic) | metadata.product_name : "Acesso ao servidor do AWS S3" |
O analisador define product_name como "AWS S3 Server Access". |
(Parser Logic) | metadata.product_version : "HTTP/http_version " |
O analisador define o product_version usando o http_version extraído. |
(Parser Logic) | metadata.vendor_name : "AMAZON" |
O analisador define vendor_name como "AMAZON". |
(Parser Logic) | network.application_protocol : "HTTP" |
O analisador define application_protocol como "HTTP" se o campo ciphersuite não estiver presente. |
(Parser Logic) | timestamp |
O analisador define o timestamp do evento como o horário atual quando o evento é processado. |
Alterações
2023-07-19
- Correção de bugs:
- O padrão Grok foi modificado para processar um hífen (-) quando os dados não estão presentes.
- "aclRequired" foi mapeado para "target.resource.attribute.labels".
2023-05-04
- Melhoria:
- Adição de suporte a registros no formato JSON.
2022-07-21
- Analisador criado recentemente.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.