Coletar registros de auditoria do Azure Storage

Compatível com:

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

  1. No console do Azure, pesquise Contas de armazenamento.
  2. Clique em Criar.
  3. 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.
  4. Clique em Revisar + criar.
  5. Leia a visão geral da conta e clique em Criar.
  6. Na página Visão geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança e rede.
  7. Clique em Mostrar ao lado de chave1 ou chave2.
  8. Clique em Copiar para a área de transferência para copiar a chave.
  9. Salve a chave em um local seguro para uso futuro.
  10. Na página Visão geral da conta de armazenamento, selecione o submenu Endpoints em Configurações.
  11. 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.
  12. 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

  1. Faça login no portal do Azure usando sua conta privilegiada.
  2. Acesse Contas de armazenamento > Configurações de diagnóstico.
  3. Clique em + Adicionar configuração de diagnóstico.
  4. Selecione as configurações de diagnóstico para blob, queue, table e file.
    • 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.
  5. Selecione a caixa de seleção Arquivar em uma conta de armazenamento como destino.
    • Especifique a assinatura e a conta de armazenamento.
  6. Clique em Salvar.

Configurar um feed no Google SecOps para processar os registros de auditoria do Azure Storage

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed, por exemplo, Registros de auditoria do Armazenamento do Azure.
  4. Selecione Microsoft Azure Blob Storage como o Tipo de origem.
  5. Selecione Auditoria do Azure Storage como o Tipo de registro.
  6. Clique em Próxima.
  7. 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)
    • 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.

  8. Clique em Próxima.

  9. 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 e auth.roleDefinitionId para additional.fields.
  • identity.requester.upn foi mapeado para src.user.userid.
  • identity.requester.objectId foi mapeado para src.user.product_object_id.

2024-12-06

  • smbCommandMinor foi mapeado para security_result.action_details.

2024-07-31

  • statusText e correlationId 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.