Coletar registros de auditoria do Azure Storage
Este documento explica como exportar registros de auditoria do Azure Storage para o Google Security Operations usando uma conta do Azure Storage. O analisador processa registros no formato JSON, transformando-os no modelo de dados unificado (UDM). Ele extrai campos do registro bruto, realiza conversões de tipo de dados, enriquece os dados com contexto adicional (como análise do user agent e detalhamento do endereço IP) e mapeia os campos extraídos para os campos correspondentes da UDM.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps
- Um locatário ativo do Azure
- Acesso privilegiado ao Azure
Configurar a conta de armazenamento do Azure
- No console do Azure, pesquise Contas de armazenamento.
- Clique em Criar.
- Especifique valores para os seguintes parâmetros de entrada:
- Assinatura: selecione a assinatura.
- Grupo de recursos: selecione o grupo de recursos.
- Região: selecione a região.
- Performance: selecione a performance (padrão recomendado).
- Redundância: selecione a redundância (GRS ou LRS recomendado).
- Nome da conta de armazenamento: insira um nome para a nova conta de armazenamento.
- Clique em Revisar + criar.
- Revise a visão geral da conta e clique em Criar.
- Na página Visão geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança e rede.
- Clique em Mostrar ao lado de key1 ou key2.
- Clique em Copiar para a área de transferência para copiar a chave.
- Salve a chave em um local seguro para uso posterior.
- Na página Visão geral da conta de armazenamento, selecione o submenu Endpoints em Configurações.
- Clique em Copiar para a área de transferência para copiar o URL do endpoint do serviço de blob. Por exemplo,
https://<storageaccountname>.blob.core.windows.net
. - Salve o URL do endpoint em um local seguro para uso posterior.
Como configurar a exportação de registros para registros de auditoria do Azure Storage
- Faça login no portal do Azure usando sua conta privilegiada.
- Acesse Contas de armazenamento > Configurações de diagnóstico.
- Clique em + Adicionar configuração de diagnóstico.
- Selecione as configurações de diagnóstico para
blob
,queue
,table
efile
.- Selecione a opção allLogs em Grupos de categorias para cada configuração de diagnóstico.
- Insira um nome descritivo para cada configuração de diagnóstico.
- Marque a caixa de seleção Arquivar em uma conta de armazenamento como destino.
- Especifique a Assinatura e a Conta de armazenamento.
- Clique em Salvar.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds > Adicionar novo
- Central de conteúdo > Pacotes de conteúdo > Começar
Como configurar o feed de auditoria do armazenamento do Azure
- Clique no pacote Plataforma do Azure.
- Localize o tipo de registro Auditoria do armazenamento do Azure e clique em Adicionar novo feed.
Especifique valores para os seguintes campos:
- Tipo de origem: armazenamento de blobs V2 do Microsoft Azure.
- URI do Azure: o URL do endpoint do blob.
ENDPOINT_URL/BLOB_NAME
- Substitua:
ENDPOINT_URL
: o URL do endpoint do blob (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: o nome do blob (por exemplo,<logname>-logs
)
- Substitua:
Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
Chave compartilhada: a chave de acesso ao Azure Blob Storage.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
callerIpAddress |
principal.asset.ip |
O endereço IP é extraído do campo callerIpAddress usando um padrão grok e atribuído a principal.asset.ip . |
callerIpAddress |
principal.ip |
O endereço IP é extraído do campo callerIpAddress usando um padrão grok e atribuído a principal.ip . |
callerIpAddress |
principal.port |
O número da porta é extraído do campo callerIpAddress usando um padrão grok e atribuído a principal.port . |
category |
security_result.category_details |
O valor do campo category é atribuído a security_result.category_details . |
correlationId |
security_result.detection_fields[0].key |
A string literal correlationId é atribuída ao campo de chave. |
correlationId |
security_result.detection_fields[0].value |
O valor do campo correlationId é atribuído a security_result.detection_fields[0].value . O valor do campo time é analisado como um carimbo de data/hora e atribuído a event.idm.read_only_udm.metadata.event_timestamp . Se category for StorageWrite e principal.user.userid existir (derivado de properties.accountName ), o valor será definido como USER_RESOURCE_UPDATE_CONTENT . Se category for StorageDelete e principal.user.userid existir, o valor será definido como USER_RESOURCE_DELETION . Caso contrário, o valor será definido como USER_RESOURCE_ACCESS . A string literal AZURE_STORAGE_AUDIT é atribuída a event.idm.read_only_udm.metadata.log_type . A string literal AZURE_STORAGE_AUDIT é atribuída a event.idm.read_only_udm.metadata.product_name . O valor do campo schemaVersion é atribuído a event.idm.read_only_udm.metadata.product_version . A string literal AZURE_STORAGE_AUDIT é atribuída a event.idm.read_only_udm.metadata.vendor_name . |
location |
target.location.name |
O valor do campo location é atribuído a target.location.name . |
operationName |
additional.fields[x].key |
A string literal operationName é atribuída ao campo de chave. |
operationName |
additional.fields[x].value.string_value |
O valor do campo operationName é atribuído a additional.fields[x].value.string_value . |
operationVersion |
additional.fields[x].key |
A string literal operationVersion é atribuída ao campo de chave. |
operationVersion |
additional.fields[x].value.string_value |
O valor do campo operationVersion é atribuído a additional.fields[x].value.string_value . |
properties.accountName |
principal.user.userid |
O valor do campo properties.accountName é atribuído a principal.user.userid . |
properties.clientRequestId |
additional.fields[x].key |
A string literal clientRequestId é atribuída ao campo de chave. |
properties.clientRequestId |
additional.fields[x].value.string_value |
O valor do campo properties.clientRequestId é atribuído a additional.fields[x].value.string_value . |
properties.etag |
additional.fields[x].key |
A string literal etag é atribuída ao campo de chave. |
properties.etag |
additional.fields[x].value.string_value |
O valor do campo properties.etag é atribuído a additional.fields[x].value.string_value . |
properties.objectKey |
additional.fields[x].key |
A string literal objectKey é atribuída ao campo de chave. |
properties.objectKey |
additional.fields[x].value.string_value |
O valor do campo properties.objectKey é atribuído a additional.fields[x].value.string_value . |
properties.requestMd5 |
additional.fields[x].key |
A string literal requestMd5 é atribuída ao campo de chave. |
properties.requestMd5 |
additional.fields[x].value.string_value |
O valor do campo properties.requestMd5 é atribuído a additional.fields[x].value.string_value . |
properties.responseMd5 |
additional.fields[x].key |
A string literal responseMd5 é atribuída ao campo de chave. |
properties.responseMd5 |
additional.fields[x].value.string_value |
O valor do campo properties.responseMd5 é atribuído a additional.fields[x].value.string_value . |
properties.serviceType |
additional.fields[x].key |
A string literal serviceType é atribuída ao campo de chave. |
properties.serviceType |
additional.fields[x].value.string_value |
O valor do campo properties.serviceType é atribuído a additional.fields[x].value.string_value . |
properties.tlsVersion |
network.tls.version |
O valor do campo properties.tlsVersion é atribuído a network.tls.version . |
properties.userAgentHeader |
network.http.parsed_user_agent |
O valor do campo properties.userAgentHeader é analisado como uma string de user agent e atribuído a network.http.parsed_user_agent . |
properties.userAgentHeader |
network.http.user_agent |
O valor do campo properties.userAgentHeader é atribuído a network.http.user_agent . |
protocol |
network.application_protocol |
O valor do campo protocol é atribuído a network.application_protocol . |
resourceId |
target.resource.id |
O valor do campo resourceId é atribuído a target.resource.id . |
resourceId |
target.resource.product_object_id |
O valor do campo resourceId é atribuído a target.resource.product_object_id . A string literal DATABASE é atribuída a target.resource.resource_type . |
resourceType |
additional.fields[x].key |
A string literal resourceType é atribuída ao campo de chave. |
resourceType |
additional.fields[x].value.string_value |
O valor do campo resourceType é atribuído a additional.fields[x].value.string_value . Se statusText for Success , o valor será definido como ALLOW . |
statusCode |
network.http.response_code |
O valor do campo statusCode é convertido em um número inteiro e atribuído a network.http.response_code . A string literal MICROSOFT_AZURE é atribuída a target.cloud.environment . |
time |
timestamp |
O valor do campo time é analisado como um carimbo de data/hora e atribuído a timestamp . |
uri |
network.http.referral_url |
O valor do campo uri é atribuído a network.http.referral_url . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.