Recolha Google Cloud registos do Compute

Compatível com:

Este documento explica como configurar a Google Cloud exportação de registos de computação para o Google Security Operations através do Cloud Storage. O analisador extrai campos, normaliza o campo de mensagem e mapeia os dados extraídos para o esquema do modelo de dados unificado (UDM) para uma representação consistente de eventos de segurança. Processa vários formatos de registos, incluindo mensagens semelhantes a syslog e pares de chave-valor, e categoriza eventos com base em campos extraídos, como type e action.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • O Compute está configurado e ativo no seu Google Cloud ambiente.
  • Acesso privilegiado a Google Cloud.

Crie um contentor do Google Cloud Storage

  1. Inicie sessão na Google Cloud consola.
  2. Aceda à página Contentores do Cloud Storage.

    Aceda a Recipientes

  3. Clique em Criar.

  4. Na página Criar um depósito, introduza as informações do depósito. Após cada um dos passos seguintes, clique em Continuar para avançar para o passo seguinte:

    1. Na secção Começar, faça o seguinte:

      1. Introduza um nome exclusivo que cumpra os requisitos de nome do contentor; por exemplo, compute-logs.
      2. Para ativar o espaço de nomes hierárquico, clique na seta de expansão para expandir a secção Otimizar para cargas de trabalho orientadas para ficheiros e com grande volume de dados e, de seguida, selecione Ativar espaço de nomes hierárquico neste contentor.

        1. Para adicionar uma etiqueta de grupo, clique na seta de expansão para expandir a secção Etiquetas.
        2. Clique em Adicionar etiqueta e especifique uma chave e um valor para a etiqueta.
    2. Na secção Escolha onde quer armazenar os seus dados, faça o seguinte:

      1. Selecione um Tipo de localização.

        1. Use o menu de tipo de localização para selecionar uma Localização onde os dados de objetos no seu contentor vão ser armazenados permanentemente.
        1. Para configurar a replicação entre contentores, expanda a secção Configurar replicação entre contentores.
    3. Na secção Escolha uma classe de armazenamento para os seus dados, selecione uma classe de armazenamento predefinida para o contentor ou selecione Autoclass para a gestão automática da classe de armazenamento dos dados do seu contentor.

    4. Na secção Escolha como controlar o acesso a objetos, selecione não para aplicar a prevenção de acesso público e selecione um modelo de controlo de acesso para os objetos do seu contentor.

    5. Na secção Escolha como proteger os dados de objetos, faça o seguinte:

      1. Selecione qualquer uma das opções em Proteção de dados que quer definir para o seu contentor.
      2. Para escolher como os dados de objetos vão ser encriptados, clique na seta de expansão com a etiqueta Encriptação de dados e selecione um Método de encriptação de dados.
  5. Clique em Criar.

Configure a Google Cloud exportação de registos do Compute

  1. Na Google Cloud Console, aceda a Logging > Router de registos.
  2. Clique em Criar destino.
  3. Indique os seguintes detalhes de configuração:
    • Nome do destino: introduza um nome significativo (por exemplo, Compute-Logs-Sink).
    • Destino da sincronização: selecione Cloud Storage.
    • Contentor do Cloud Storage: introduza o URI do contentor (por exemplo, gs://compute-logs/compute-logs/).
  4. Na secção Criar filtro de inclusão, configure o filtro de registo para capturar registos do Google Cloud Compute através de um ou mais dos seguintes padrões:

    Filtro de tipo de recurso (obrigatório – escolha um):

    • Para registos de instâncias de VM apenas:

      resource.type="gce_instance"
      
    • Para todos os recursos relacionados com o GCE (instâncias de VM, sub-redes e firewalls):

      resource.type=("gce_instance" OR "gce_subnetwork" OR "gce_network" OR "gce_firewall_rule")
      

    Tipos de registos específicos (opcional: adicione conforme necessário):

    • Para registos de auditoria (operações de instâncias, alterações de configuração):

      resource.type="gce_instance"
      logName:"cloudaudit.googleapis.com/activity"
      
    • Para os registos de fluxo da VPC (tráfego de rede):

      resource.type="gce_subnetwork"
      logName:"vpc_flows"
      
    • Para registos de firewall (ligações permitidas/recusadas):

      resource.type="gce_subnetwork"
      logName:"compute.googleapis.com/firewall"
      
    • Para registos da consola série:

      resource.type="gce_instance"
      logName:"serialconsole.googleapis.com"
      

    Filtros relacionados com a rede (opcional: adicione conforme necessário):

    • Filtre por detalhes da ligação (IPs de origem/destino, portas):

      jsonPayload.connection.dest_ip:*
      OR jsonPayload.connection.src_ip:*
      
    • Filtre por detalhes da instância:

      jsonPayload.dest_instance.project_id:*
      OR jsonPayload.src_instance.project_id:*
      
    • Filtre por ações de segurança:

      jsonPayload.rule_details.action=("ALLOW" OR "BLOCK")
      

    Exemplo: filtro completo para registo abrangente de computação:

    (resource.type="gce_instance" OR resource.type="gce_subnetwork")
    AND (
     logName:"cloudaudit.googleapis.com/activity"
     OR logName:"vpc_flows"
     OR logName:"compute.googleapis.com/firewall"
     OR jsonPayload.connection.dest_ip:*
     OR jsonPayload.connection.src_ip:*
    )
    
  5. Clique em Criar destino.

Configure autorizações para o Cloud Storage

  1. Aceda a IAM > IAM e administrador > Contas de serviço.
  2. Encontre a conta de serviço do Cloud Logging; por exemplo, service-account@logging.iam.gserviceaccount.com.
  3. Atribua-lhe a função roles/storage.admin no contentor.

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 Google Cloud feed de cálculo

  1. Clique no pacote Google Cloud Compute platform.
  2. Localize o tipo de registo GCP Compute Feed e clique em Adicionar novo feed.
  3. Especifique valores para os seguintes campos:

    • Tipo de origem: Google Cloud Storage V2.
    • URI do contentor de armazenamento: URL do contentor do Cloud Storage; por exemplo, gs://compute-context-logs/. Este URL tem de terminar com uma barra invertida (/).
    • Opção de eliminação da origem: selecione a opção de eliminação de acordo com a sua preferência.

    • Idade máxima do ficheiro: inclua ficheiros modificados no número de dias mais recente. A predefinição é 180 dias.

    • Conta de serviço do Chronicle: copie a conta de serviço. Precisa desta conta para adicionar autorizações no contentor para que o Google SecOps possa ler ou eliminar dados no contentor.

    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.
  4. 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 do UDM Lógica
addr read_only_udm.principal.ip Unido à lista de endereços IP principal se o campo não estiver vazio ou for "?".
jsonPayload.connection.dest_ip read_only_udm.target.ip Unido à lista de endereços IP de destino, se o campo existir.
jsonPayload.connection.dest_port read_only_udm.target.port Convertido em string e, em seguida, em número inteiro e mapeado se não ocorrerem erros durante a conversão.
jsonPayload.connection.protocol read_only_udm.network.ip_protocol Convertido em string e, em seguida, em número inteiro. Usado para determinar o protocolo IP (TCP, UDP, etc.) através de uma tabela de pesquisa e mapeado se não ocorrerem erros durante a conversão.
jsonPayload.connection.src_ip read_only_udm.principal.ip Unido à lista de endereços IP principal, se o campo existir.
jsonPayload.connection.src_port read_only_udm.principal.port Convertido em string e, em seguida, em número inteiro e mapeado se não ocorrerem erros durante a conversão.
jsonPayload.dest_instance.project_id read_only_udm.target.resource.product_object_id Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir.
jsonPayload.dest_instance.region read_only_udm.target.location.name Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir.
jsonPayload.dest_instance.vm_name read_only_udm.target.resource.attribute.cloud.project.name Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir.
jsonPayload.dest_instance.zone read_only_udm.target.resource.attribute.cloud.availability_zone Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir.
jsonPayload.dest_vpc.project_id read_only_udm.target.cloud.vpc.product_object_id Usado como condição para mapear campos relacionados.
jsonPayload.dest_vpc.subnetwork_name read_only_udm.target.cloud.vpc.name Mapeado condicionalmente se jsonPayload.dest_vpc.project_id existir.
jsonPayload.instance.project_id read_only_udm.target.resource.product_object_id Mapeado condicionalmente se jsonPayload.instance.project_id existir.
jsonPayload.instance.region read_only_udm.target.location.name Mapeado condicionalmente se jsonPayload.instance.project_id existir.
jsonPayload.instance.vm_name read_only_udm.target.resource.attribute.cloud.project.name Mapeado condicionalmente se jsonPayload.instance.project_id existir.
jsonPayload.instance.zone read_only_udm.target.resource.attribute.cloud.availability_zone Mapeado condicionalmente se jsonPayload.instance.project_id existir.
jsonPayload.message read_only_udm.metadata.product_event_type, read_only_udm.principal.application, read_only_udm.target.process.pid, read_only_udm.target.user.userid, read_only_udm.principal.hostname, read_only_udm.target.process.command_line, read_only_udm.security_result.description, read_only_udm.principal.process.file.full_path Analisados e mapeados para diferentes campos com base em padrões grok e lógica condicional.
jsonPayload.rule_details.action read_only_udm.security_result.action Usado para determinar a ação do resultado de segurança (PERMITIR/BLOQUEAR) e mapeado.
jsonPayload.rule_details.direction read_only_udm.network.direction Usado para determinar a direção da rede (INBOUND/OUTBOUND/UNKNOWN_DIRECTION) e mapeado.
jsonPayload.rule_details.priority read_only_udm.security_result.priority_details Convertido em string e mapeado se não ocorrerem erros durante a conversão.
jsonPayload.rule_details.reference read_only_udm.security_result.rule_labels.value Mapeado para o valor da etiqueta da regra.
jsonPayload.src_instance.project_id read_only_udm.principal.resource.product_object_id Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir.
jsonPayload.src_instance.region read_only_udm.principal.location.name Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir.
jsonPayload.src_instance.vm_name read_only_udm.principal.resource.attribute.cloud.project.name Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir.
jsonPayload.src_instance.zone read_only_udm.principal.resource.attribute.cloud.availability_zone Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir.
jsonPayload.src_vpc.project_id read_only_udm.principal.cloud.vpc.product_object_id Usado como condição para mapear campos relacionados.
jsonPayload.src_vpc.subnetwork_name read_only_udm.principal.cloud.vpc.name Mapeado condicionalmente se jsonPayload.src_vpc.project_id existir.
jsonPayload.vpc.project_id read_only_udm.target.cloud.vpc.product_object_id Mapeado condicionalmente se jsonPayload.vpc.project_id existir.
jsonPayload.vpc.subnetwork_name read_only_udm.target.cloud.vpc.name Mapeado condicionalmente se jsonPayload.vpc.project_id existir.
logName read_only_udm.security_result.category_details Mapeado diretamente.
resource.labels.instance_id read_only_udm.principal.resource.product_object_id, read_only_udm.principal.asset_id Mapeado condicionalmente. Se o tipo for "PROCTITLE", é usado para criar o ID do recurso.
resource.labels.location read_only_udm.principal.location.name Mapeado condicionalmente se o campo existir.
resource.labels.project_id read_only_udm.metadata.product_deployment_id Mapeado condicionalmente se o campo existir.
resource.labels.zone read_only_udm.principal.resource.attribute.cloud.availability_zone Mapeado condicionalmente se o campo existir.
resource.type read_only_udm.metadata.event_type Usado para determinar o tipo de evento e mapeado.
timestamp read_only_udm.metadata.event_timestamp Mapeado diretamente.
escrever read_only_udm.metadata.product_event_type, read_only_udm.metadata.event_type, read_only_udm.extensions.auth.type Usado para determinar o tipo de evento, o tipo de evento do produto e o tipo de autenticação, e mapeado em conformidade.
read_only_udm.metadata.event_type A lógica define o tipo de evento com base no campo "tipo" e noutras condições. Se não for encontrada nenhuma correspondência específica, a predefinição é "GENERIC_EVENT".
read_only_udm.metadata.log_type Valor constante "GCP_COMPUTE".
read_only_udm.metadata.vendor_name Valor constante "Google Cloud Platform".
read_only_udm.metadata.product_name Valor constante "Google Cloud Platform".
read_only_udm.security_result.rule_labels.key Valor constante "Reference".
read_only_udm.target.cloud.vpc.resource_type Condicionalmente definido como "VPC_NETWORK" se jsonPayload.instance.project_id ou jsonPayload.dest_vpc.project_id existir.
read_only_udm.target.resource.attribute.cloud.environment Condicionalmente definido como "GOOGLE_CLOUD_PLATFORM" se jsonPayload.instance.project_id, jsonPayload.dest_vpc.project_id ou jsonPayload.src_vpc.project_id existir.
read_only_udm.principal.administrative_domain Mapeado a partir do campo "Domínio da conta" extraído do campo "kv_data".
read_only_udm.principal.user.user_display_name Mapeado a partir do campo "Nome da conta" extraído do campo "kv_data".
read_only_udm.target.resource.name Mapeado a partir do campo "Nome do objeto" extraído do campo "kv_data".
read_only_udm.target.resource.type Mapeado a partir do campo "Tipo de objeto" extraído do campo "kv_data".
read_only_udm.principal.process.pid Mapeado a partir do campo "Process ID" extraído do campo "kv_data".
read_only_udm.target.user.windows_sid Mapeado a partir do campo "ID de segurança" extraído do campo "kv_data".
read_only_udm.network.session_id Mapeado a partir do campo "auid".

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