Coletar registros de recursos do Microsoft Azure

Compatível com:

Este documento explica como coletar registros de recursos do Microsoft Azure configurando um feed do Google Security Operations usando o Microsoft Azure Blob Storage V2.

Os registros de recursos do Azure oferecem insights sobre as operações realizadas nos recursos do Azure. Esses registros capturam informações detalhadas sobre operações, status e métricas de desempenho de recursos. O conteúdo varia de acordo com o tipo de recurso e inclui dados como eventos de autenticação, mudanças de configuração, tentativas de acesso e métricas operacionais.

Antes de começar

Verifique se você atende os seguintes pré-requisitos:

  • Uma instância do Google SecOps
  • Acesso privilegiado ao portal do Microsoft Azure com permissões para:

    • Criar contas de armazenamento
    • Configurar as configurações de diagnóstico para recursos do Azure
    • Gerenciar chaves de acesso

Configurar a conta de armazenamento do Azure

Criar conta de armazenamento

  1. No portal do Azure, pesquise Contas de armazenamento.
  2. Clique em Criar.
  3. Informe os seguintes detalhes de configuração:

    Configuração Valor
    Assinatura Selecione sua assinatura do Azure
    Grupo de recursos Selecionar ou criar
    Nome da conta de armazenamento Insira um nome exclusivo (por exemplo, azureresourcelogs).
    Região Selecione a região (por exemplo, East US).
    Desempenho Padrão (recomendado)
    Redundância GRS (armazenamento com redundância geográfica) ou LRS (armazenamento com redundância local)
  4. Clique em Revisar + criar.

  5. Revise a visão geral da conta e clique em Criar.

  6. Aguarde até que a implantação seja concluída.

Receber credenciais da conta de armazenamento

  1. Acesse a Conta de armazenamento que você acabou de criar.
  2. Na navegação à esquerda, selecione Chaves de acesso em Segurança e rede.
  3. Clique em Mostrar chaves.
  4. Copie e salve o seguinte para uso posterior:

    • Nome da conta de armazenamento: azureresourcelogs
    • Chave 1 ou Chave 2: a chave de acesso compartilhado (uma string aleatória de 512 bits na codificação base-64).

Receber endpoint do serviço de blob

  1. Na mesma conta de armazenamento, selecione Endpoints na navegação à esquerda.
  2. Copie e salve o URL do endpoint do serviço de blob.
    • Exemplo: https://azureresourcelogs.blob.core.windows.net/

Configurar as configurações de diagnóstico de recursos do Azure

Os registros de recursos do Azure não são coletados por padrão. É necessário criar uma configuração de diagnóstico para cada recurso do Azure e rotear os registros para a conta de armazenamento.

  1. No portal do Azure, navegue até o recurso do Azure que você quer monitorar.
  2. Na navegação à esquerda, selecione Configurações de diagnóstico em Monitoring.
  3. Clique em + Adicionar configuração de diagnóstico.
  4. Informe os seguintes detalhes de configuração:
    • Nome da configuração de diagnóstico: insira um nome descritivo (por exemplo, export-to-secops).
    • Na seção Registros, selecione as categorias de registros que você quer coletar. As categorias disponíveis variam de acordo com o tipo de recurso. Estas são algumas das categorias comuns:
      • Administrativo (para registros de atividades)
      • Segurança (para registros de atividades)
      • AuditEvent (para o Key Vault)
      • ApplicationGatewayAccessLog (para o Gateway de aplicativo)
      • ApplicationGatewayFirewallLog (para o Gateway de aplicativo)
      • NetworkSecurityGroupEvent (para grupos de segurança de rede)
    • Na seção Métricas (opcional), selecione AllMetrics para enviar métricas da plataforma à conta de armazenamento.
    • Na seção Detalhes do destino, marque a caixa de seleção Arquivar em uma conta de armazenamento.
    • Assinatura: selecione a assinatura que contém sua conta de armazenamento.
    • Conta de armazenamento: selecione a conta de armazenamento que você criou (por exemplo, azureresourcelogs).
  5. Clique em Salvar.

Depois da configuração, os registros são exportados automaticamente para contêineres na conta de armazenamento. O Azure cria contêineres usando o padrão de nomenclatura insights-logs-<log-category-name>. Exemplo:

  • Registros de auditoria do Key Vault: insights-logs-auditevent
  • Registros de acesso do Application Gateway: insights-logs-applicationgatewayaccesslog
  • Registros do firewall do Gateway de aplicativo: insights-logs-applicationgatewayfirewalllog
  • Eventos do grupo de segurança de rede: insights-logs-networksecuritygroupevent

Configurar um feed no Google SecOps para ingerir registros de recursos do Azure

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Azure Resource Logs - Key Vault).
  5. Selecione Microsoft Azure Blob Storage V2 como o Tipo de origem.
  6. Selecione Recurso do Microsoft Azure como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do Azure: insira o URL do endpoint do serviço de blobs com o caminho do contêiner:
    https://azureresourcelogs.blob.core.windows.net/insights-logs-auditevent/
    
    • Substitua:
      • azureresourcelogs: o nome da sua conta de armazenamento do Azure.
      • insights-logs-auditevent: o nome do contêiner de blob em que os registros são armazenados (varia de acordo com o tipo de recurso e a categoria de registro).
    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:

      • Nunca: nunca exclui arquivos após as transferências.
      • Excluir arquivos transferidos: exclui os arquivos após a transferência bem-sucedida.
      • Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência bem-sucedida.
    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.

    • Chave compartilhada: insira o valor da chave compartilhada (chave de acesso) que você capturou da conta de armazenamento na etapa 3.

    • Namespace do recurso: o namespace do recurso.

    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.

  9. Clique em Próxima.

  10. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Configurar o firewall do Azure Storage (se ativado)

Se a sua conta de armazenamento do Azure usar um firewall, adicione os intervalos de IP do Google SecOps.

  1. No portal do Azure, acesse sua conta de armazenamento (por exemplo, azureresourcelogs).
  2. Selecione Rede em Segurança e rede.
  3. Em Firewalls e redes virtuais, selecione Ativado nas redes virtuais e endereços IP selecionados.
  4. Na seção Firewall, em Intervalo de endereços, clique em + Adicionar intervalo de IP.
  5. Adicione cada intervalo de IP do Google SecOps na notação CIDR.

  6. Clique em Salvar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
vários campos additionalfield*_label additional.fields Mesclado de vários campos adicionais field*_label
authenticationMethod extensions.auth.mechanism Definido como USERNAME_PASSWORD se authenticationMethod for Password
category, event_type extensions.auth.type Definido como MACHINE para SQLSecurityAuditEvents, SSO para categorias específicas e AUTHTYPE_UNSPECIFIED para outras.
properties.partialipaddress intermediary.ip Valor de "properties.partialipaddress" se não estiver vazio
properties.event_time, stage_time, risk_time, last_update_time, time metadata.collected_timestamp Convertido usando ISO8601 de properties.event_time, stage_time, risk_time, last_update_time ou time com fallback grok
properties.message, properties.activity, properties.log.stage metadata.description Valor de "properties.message" se não estiver vazio; caso contrário, de "properties.activity"; caso contrário, de "properties.log.stage".
event_type metadata.event_type Valor de event_type se não estiver vazio. Caso contrário, GENERIC_EVENT.
category, record.category metadata.product_event_type Valor copiado diretamente da categoria ou de record.category
properties.event_id, properties.log.auditID metadata.product_log_id Valor de "properties.event_id" se não estiver vazio. Caso contrário, de "properties.log.auditID".
properties.log.apiVersion metadata.product_version Valor copiado diretamente de "properties.log.apiVersion".
protocolo network.application_protocol Valor copiado diretamente do protocolo
properties.log.verb network.dhcp.opcode Valor copiado diretamente de properties.log.verb (maiúsculas)
properties.CsMethod, record.properties.CsMethod network.http.method Valor copiado diretamente de "properties.CsMethod" ou "record.properties.CsMethod"
user_agent network.http.parsed_user_agent Convertido de user_agent
properties.Referer, uri network.http.referral_url Valor de "properties.Referer" se não estiver vazio; caso contrário, de "uri".
properties.ScStatus, record.properties.ScStatus, properties.statusCode, record.properties.statusCode, responseStatus.code network.http.response_code Convertido para número inteiro de properties.ScStatus, record.properties.ScStatus, properties.statusCode, record.properties.statusCode ou responseStatus.code
user_agent network.http.user_agent Valor copiado diretamente de user_agent
properties.ScBytes, record.properties.ScBytes, properties.responseLength network.received_bytes Convertido para uinteger de properties.ScBytes, record.properties.ScBytes ou properties.responseLength
properties.CsBytes, record.properties.CsBytes, properties.requestLength network.sent_bytes Convertido para uinteger de properties.CsBytes, record.properties.CsBytes ou properties.requestLength
properties.session_id network.session_id Valor copiado diretamente de "properties.session_id" (convertido em string)
properties.tlsVersion network.tls.version Valor copiado diretamente de "properties.tlsVersion"
domain_name_value principal.administrative_domain Valor copiado diretamente de domain_name_value
properties.clientAppUsed, target_application principal.application Valor de "properties.clientAppUsed" se não estiver vazio. Caso contrário, de "target_application".
prop_device_id principal.asset.asset_id Definido como "ID do dispositivo: seguido por prop_device_id" se não for nulo
hardware principal.asset.hardware Unido do hardware
properties.host_name, properties.CIp, record.properties.CIp, properties.ComputerName, record.properties.ComputerName, properties.CsHost, record.properties.CsHost, properties.server_instance_name, record.properties.server_instance_name, server_name principal.asset.hostname Valor de "properties.host_name" se não estiver vazio. Caso contrário, de "properties.CIp" (grok IP), "record.properties.CIp" (grok IP), "properties.ComputerName", "record.properties.ComputerName", "properties.CsHost", "record.properties.CsHost", "properties.server_instance_name", "record.properties.server_instance_name" ou "server_name".
src_ip, src_ip1, properties.client_ip, record.properties.clientIpAddress, properties.clientIpAddress, callerIpAddress, properties.ipAddress, ip principal.asset.ip Valor de src_ip, src_ip1, properties.client_ip (IP grok), record.properties.clientIpAddress, properties.clientIpAddress (IP grok), record.properties.clientIpAddress, callerIpAddress (IP grok), properties.ipAddress ou ip
properties.host_name, properties.CsHost, record.properties.CsHost principal.hostname Valor de "properties.host_name" se não estiver vazio. Caso contrário, de "properties.CsHost" ou "record.properties.CsHost".
src_ip, src_ip1, properties.client_ip, record.properties.clientIpAddress, properties.clientIpAddress, callerIpAddress, properties.ipAddress, ip principal.ip Valor de src_ip, src_ip1, properties.client_ip (IP grok), record.properties.clientIpAddress, properties.clientIpAddress (IP grok), record.properties.clientIpAddress, callerIpAddress (IP grok), properties.ipAddress ou ip
properties.location.city, provisioning_steps_city principal.location.city Valor de "properties.location.city" se não estiver vazio; caso contrário, de "provisioning_steps_city"
properties.location.countryOrRegion, provisioning_steps_country, location, Region principal.location.country_or_region Valor de "properties.location.countryOrRegion" se não estiver vazio. Caso contrário, de "provisioning_steps_country", "location", ou "Region".
properties.location.geoCoordinates.latitude principal.location.region_latitude Valor copiado diretamente de "properties.location.geoCoordinates.latitude"
properties.location.geoCoordinates.longitude principal.location.region_longitude Valor copiado diretamente de "properties.location.geoCoordinates.longitude"
properties.location.state principal.location.state Valor copiado diretamente de "properties.location.state"
prop_os principal.platform Definido como WINDOWS se prop_os corresponder a (?i)Win; LINUX se (?i)Lin; MAC se (?i)Mac
properties.deviceDetail.operatingSystem principal.platform_version Valor copiado diretamente de "properties.deviceDetail.operatingSystem"
src_port principal.port Convertido para número inteiro de src_port
is_compliant_label, is_managed_label, serice_type_label, serice_credential_label principal.resource.attribute.labels Mesclado de is_compliant_label, is_managed_label, serice_type_label, serice_credential_label
properties.sourceSystem.Name principal.resource.name Valor copiado diretamente de "properties.sourceSystem.Name"
properties.sourceSystem.Id principal.resource.product_object_id Valor copiado diretamente de "properties.sourceSystem.Id"
properties.server_principal_name, source_user_principal_name, user_principal_name, local_account_username_value principal.user.email_addresses Unido de "properties.server_principal_name" (se corresponder ao e-mail), "source_user_principal_name" (se corresponder ao e-mail), "user_principal_name" (se corresponder ao e-mail) ou "local_account_username_value" (se corresponder ao e-mail)
properties.sequence_group_id, grpname, properties.log.user.groups principal.user.group_identifiers Unido de "properties.sequence_group_id", "grpname" ou "properties.log.user.groups"
properties.sourceIdentity.details.id, properties.userId, details_id_not_present principal.user.product_object_id Valor de properties.sourceIdentity.details.id se não estiver vazio. Caso contrário, de properties.userId. Caso contrário, de details_id_not_present.
properties.ServicePrincipalDisplayName, properties.servicePrincipalName, properties.sourceIdentity.details.DisplayName, properties.userDisplayName, record.properties.log.user.username principal.user.user_display_name Valor de properties.ServicePrincipalDisplayName se não estiver vazio; caso contrário, de properties.servicePrincipalName; caso contrário, de properties.sourceIdentity.details.DisplayName; caso contrário, de properties.userDisplayName; caso contrário, de record.properties.log.user.username
properties.servicePrincipalId, user_userPrincipalName, source_user_principal_name, details_user_principal_name, user_principal_name, properties.accountName, record.properties.log.user.uid principal.user.userid Valor de properties.servicePrincipalId se não estiver vazio; caso contrário, de user_userPrincipalName; caso contrário, de source_user_principal_name; caso contrário, de details_user_principal_name; caso contrário, de user_principal_name; caso contrário, de properties.accountName; caso contrário, de record.properties.log.user.uid
security_action, succeeded, statusText, resultType security_result.action Definido como ALLOW se security_action for allow; caso contrário, ALLOW se succeeded for true ou statusText for Success ou resultType for success; caso contrário, BLOCK se succeeded for false ou statusText for failed ou resultType for failed
properties.action_name security_result.action_details Valor copiado diretamente de "properties.action_name"
status_label security_result.about.resource.attribute.labels Mesclado de status_label
properties_log_label, corr_key_label, resultType_label, resultSignature_label, networkName_label, networkType_label, method_label, authentication_step_requirement_label, authentication_step_result_detail_label, stepdate_label, initiatedby_name_label, initiatedby_id_label, initiatedby_type_label, targetSystem_id_label, targetSystem_name_label, containerID_label, pod_label, authentication_label, api_name_label, scale_unit_label, namespace_name_label, subscription_id_label, activity_id_label_1, task_name_label, environment_label, cookie, additional_field_event_ip, additional_field_event_primary_stamp, additional_field_event_stamp_type, source, correlationId_field, activityDateTime_field, detectedDateTime_field, lastUpdatedDateTime_field, count_label, total_label, minimum_label, maximum_label, average_label, metricName_label, timeGrain_label, ApiName_label, Authentication_label, GeoType_label, old_label, new_label, add_label, keyId_label, sr_result.rule_name, sr_result.rule_id, resultField, sr_result.detection_fields security_result.detection_fields Mesclado de properties_log_label, corr_key_label, resultType_label, resultSignature_label, networkName_label, networkType_label, method_label, authentication_step_requirement_label, authentication_step_result_detail_label, stepdate_label, initiatedby_name_label, initiatedby_id_label, initiatedby_type_label, targetSystem_id_label, targetSystem_name_label, containerID_label, pod_label, authentication_label, api_name_label, scale_unit_label, namespace_name_label, subscription_id_label, activity_id_label_1, task_name_label, environment_label, cookie, additional_field_event_ip, additional_field_event_primary_stamp, additional_field_event_stamp_type, source, correlationId_field, activityDateTime_field, detectedDateTime_field, lastUpdatedDateTime_field, count_label, total_label, minimum_label, maximum_label, average_label, metricName_label, timeGrain_label, ApiName_label, Authentication_label, GeoType_label, old_label, new_label, add_label, keyId_label, sr_result.rule_name, sr_result.rule_id, resultField, sr_result.detection_fields
resultDescription, sec_result.description, properties.queryexecutionstatus security_result.description Valor de resultDescription (gsub newlines); caso contrário, de sec_result.description; caso contrário, de properties.queryexecutionstatus
policy_id_value security_result.rule_id Valor copiado diretamente de policy_id_value
properties.Result, statusText, properties.queryexecutionstatus security_result.summary Valor de "properties.Result" se não estiver vazio. Caso contrário, de "statusText". Caso contrário, de "properties.queryexecutionstatus".
target_application target.application Valor de target_application
properties.ComputerName, record.properties.ComputerName, properties.server_instance_name, record.properties.server_instance_name target.asset.hostname Valor de properties.ComputerName, record.properties.ComputerName, properties.server_instance_name ou record.properties.server_instance_name
(fixado no código) target.cloud.environment Defina como "MICROSOFT_AZURE".
properties.SPort, record.properties.SPort target.port Convertido para número inteiro de properties.SPort ou record.properties.SPort
properties.querytext.query target.process.command_line Valor copiado diretamente de "properties.querytext.query"
properties.processId target.process.pid Convertido para string de properties.processId
subscription_id_label, resource_group_label, request_resource_type_label, request_resource_id_label, additional_objectKey, additional_clientRequestId, additional_RiskEventType, additional_tokenIssuerType, keyId_label, appid_label target.resource.attribute.labels Mesclado de subscription_id_label, resource_group_label, request_resource_type_label, request_resource_id_label, additional_objectKey, additional_clientRequestId, additional_RiskEventType, additional_tokenIssuerType, keyId_label, appid_label
properties_databasename, properties.resourceDisplayName, record.properties.databasename, record.properties.databaseName target.resource.name Valor de "properties_databasename" se não estiver vazio; caso contrário, de "properties.resourceDisplayName"; caso contrário, de "record.properties.databasename"; caso contrário, de "record.properties.databaseName"
resourceId, properties.resourceId target.resource.product_object_id Valor de resourceId se não estiver vazio; caso contrário, de properties.resourceId
properties_collectionname, properties.resourceDisplayName, record.properties.collectionname, record.properties.collectionName, properties.log.objectRef.resource target.resource.resource_subtype Valor de properties_collectionname se não estiver vazio; caso contrário, de properties.resourceDisplayName; caso contrário, de record.properties.collectionname; caso contrário, de record.properties.collectionName; caso contrário, de properties.log.objectRef.resource
resourceId, message target.resource.resource_type Definido como DATABASE se resourceId corresponder ao padrão; caso contrário, CLUSTER se a mensagem corresponder a MANAGEDCLUSTERS; caso contrário, VIRTUAL_MACHINE se MANAGEDINSTANCES; caso contrário, DATABASE se DATABASEACCOUNTS
resourceType target.resource.type Valor copiado diretamente de "resourceType"
properties.CsUriStem, properties.log.requestURI, value (from additionalInfo) target.url Valor de properties.CsUriStem se não estiver vazio. Caso contrário, de properties.log.requestURI. Caso contrário, de value (de additionalInfo).
user_principal_name target.user.email_addresses Unido de user_principal_name (se corresponder ao e-mail)
properties.userId target.user.product_object_id Valor copiado diretamente de "properties.userId".
properties.userDisplayName target.user.user_display_name Valor copiado diretamente de properties.userDisplayName
user_principal_name, properties.userPrincipalName target.user.userid Valor de user_principal_name se não estiver vazio; caso contrário, de properties.userPrincipalName
(fixado no código) metadata.product_name Definido como "Logs de recursos do Azure"
(fixado no código) metadata.vendor_name Defina como "Microsoft".

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.