Recolha registos de auditoria do Azure Storage
Este documento explica como exportar registos de auditoria do armazenamento do Azure para o Google Security Operations através de uma conta de armazenamento do Azure. O analisador processa registos no formato JSON, transformando-os no modelo de dados unificado (UDM). Extrai campos do registo não processado, faz conversões de tipos de dados, enriquece os dados com contexto adicional (como a análise do agente do utilizador e a discriminação do endereço IP) e mapeia os campos extraídos para os campos correspondentes do UDM.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
- Instância do Google SecOps
- Um inquilino do Azure ativo
- Acesso privilegiado ao Azure
Configure a conta de armazenamento do Azure
- Na consola do Azure, pesquise Contas de armazenamento.
- Clique em Criar.
- Especifique valores para os seguintes parâmetros de entrada:
- Subscrição: selecione a subscrição.
- Grupo de recursos: selecione o grupo de recursos.
- Região: selecione a região.
- Desempenho: selecione o desempenho (padrão recomendado).
- Redundância: selecione a redundância (GRS ou LRS recomendado).
- Nome da conta de armazenamento: introduza um nome para a nova conta de armazenamento.
- Clique em Rever + criar.
- Reveja a vista geral da conta e clique em Criar.
- Na página Vista geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança + rede.
- Clique em Mostrar junto a key1 ou key2.
- Clique em Copiar para a área de transferência para copiar a chave.
- Guarde a chave num local seguro para utilização posterior.
- Na página Vista geral da conta de armazenamento, selecione o submenu Pontos finais em Definições.
- Clique em Copiar para a área de transferência para copiar o URL do ponto final do serviço Blob; por exemplo,
https://<storageaccountname>.blob.core.windows.net
. - Guarde o URL do ponto final numa localização segura para utilização posterior.
Como configurar a exportação de registos para registos de auditoria do armazenamento do Azure
- Inicie sessão no Portal do Azure com a sua conta privilegiada.
- Aceda a Contas de armazenamento > Definições de diagnóstico.
- Clique em + Adicionar definição de diagnóstico.
- Selecione as definições de diagnóstico para
blob
,queue
,table
efile
.- Selecione a opção allLogs em Grupos de categorias para cada definição de diagnóstico.
- Introduza um nome descritivo para cada definição de diagnóstico.
- Selecione a caixa de verificação Arquivar numa conta de armazenamento como destino.
- Especifique a Subscrição e a Conta de armazenamento.
- Clique em Guardar.
Configure feeds
Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:
- Definições do SIEM > Feeds > Adicionar novo
- Content Hub > Pacotes de conteúdo > Começar
Como configurar o feed de auditoria do armazenamento do Azure
- Clique no pacote Plataforma Azure.
- Localize o tipo de registo Azure Storage Audit e clique em Adicionar novo feed.
Especifique valores para os seguintes campos:
- Source Type: Microsoft Azure Blob Storage V2.
- URI do Azure: o URL do ponto final do blob.
ENDPOINT_URL/BLOB_NAME
- Substitua o seguinte:
ENDPOINT_URL
: o URL do ponto final do blob (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: o nome do blob (por exemplo,<logname>-logs
)
- Substitua o seguinte:
Opções de eliminação de origens: selecione a opção de eliminação de acordo com as suas preferências de carregamento.
Idade máxima do ficheiro: inclui ficheiros modificados no último número de dias. A predefinição é 180 dias.
Chave partilhada: a chave de acesso ao armazenamento de blobs do Azure.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Espaço de nomes do recurso: espaço de nomes associado ao feed.
- Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre a configuração de vários feeds para diferentes tipos de registos nesta família de produtos, consulte o artigo Configure feeds por produto.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
callerIpAddress |
principal.asset.ip |
O endereço IP é extraído do campo callerIpAddress através de um padrão grok e atribuído a principal.asset.ip . |
callerIpAddress |
principal.ip |
O endereço IP é extraído do campo callerIpAddress através de um padrão grok e atribuído a principal.ip . |
callerIpAddress |
principal.port |
O número da porta é extraído do campo callerIpAddress através de 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 cadeia 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 uma 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 é definido como USER_RESOURCE_UPDATE_CONTENT . Se category for StorageDelete e principal.user.userid existir, o valor é definido como USER_RESOURCE_DELETION . Caso contrário, o valor é definido como USER_RESOURCE_ACCESS . A string literal AZURE_STORAGE_AUDIT está atribuída a event.idm.read_only_udm.metadata.log_type . A string literal AZURE_STORAGE_AUDIT está 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 está 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 cadeia 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 cadeia 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 cadeia 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 cadeia 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 cadeia 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 cadeia 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 cadeia 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 cadeia 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 agente do utilizador 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 está atribuída a target.resource.resource_type . |
resourceType |
additional.fields[x].key |
A cadeia 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 é definido como ALLOW . |
statusCode |
network.http.response_code |
O valor do campo statusCode é convertido num número inteiro e atribuído a network.http.response_code . A string literal MICROSOFT_AZURE está atribuída a target.cloud.environment . |
time |
timestamp |
O valor do campo time é analisado como uma 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 da Google SecOps.