Coletar registros de auditoria do Azure Storage
Este documento explica como exportar os 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, na sigla em inglês). Ele extrai campos do registro bruto, realiza conversões de tipo de dados, enriquece os dados com mais contexto (como análise de agente do usuário e detalhamento do endereço IP) e mapeia os campos extraídos para os campos correspondentes do UDM.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem um locatário do Azure ativo.
- Verifique se você tem 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.
- Leia 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 chave1 ou chave2.
- Clique em Copiar para a área de transferência para copiar a chave.
- Salve a chave em um local seguro para uso futuro.
- 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 futuro.
Configurar a exportação de registros para os 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.
- Selecione 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 um feed no Google SecOps para processar os registros de auditoria do Azure Storage
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- 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 da origem: selecione a opção de exclusão de acordo com sua preferência.
Chave compartilhada: a chave de acesso ao Armazenamento de blobs do Azure.
Namespace de recursos: o namespace de recursos.
Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
- URI do Azure: o URL do endpoint do blob.
Clique em Próxima.
Revise a configuração do novo feed na tela Finalizar e clique em Enviar.
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 (derivada 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 . |
Alterações
2024-12-12
- Mapeou
identity.tokenHash
,identity.type
,identity.requester.appId
,identity.requester.tenantId
,identity.requester.tokenIssuer
,properties.sourceAccessTier
,principal.type
,auth.action
,auth.roleAssignmentId
eauth.roleDefinitionId
paraadditional.fields
. identity.requester.upn
foi mapeado parasrc.user.userid
.identity.requester.objectId
foi mapeado parasrc.user.product_object_id
.
2024-12-06
smbCommandMinor
foi mapeado parasecurity_result.action_details
.
2024-07-31
statusText
ecorrelationId
foram inicializados como nulos.
2024-04-08
- Parser recém-criado.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.