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). Ele extrai campos do registro bruto, realiza conversões de tipo de dados, enriquece os dados com contexto adicional (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 do recurso: o namespace do recurso.
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.