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). 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

  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 do recurso: o namespace do recurso.

    • 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.