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
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em Configurações do SIEM > Feeds
Para configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Para configurar um único feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed, por exemplo, Registros de auditoria do Armazenamento do Azure.
- Selecione Microsoft Azure Blob Storage como o Tipo de origem.
- Selecione Auditoria do Azure Storage como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- 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:
- URI é um: selecione o TIPO DE URI de acordo com a configuração do fluxo de registros (Arquivo único | Diretório | Diretório que inclui subdiretórios).
Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
Chave compartilhada: a chave de acesso ao Azure Blob Storage.
Namespace do recurso: o namespace do recurso.
Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
- URI do Azure: o URL do endpoint do blob.
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- 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:
- URI é um: selecione o TIPO DE URI de acordo com a configuração do fluxo de registros (Arquivo único | Diretório | Diretório que inclui subdiretórios).
- Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
- 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.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
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.