Coletar registros do Cloud Compute

Compatível com:

Neste documento, explicamos como configurar a exportação de registros do Compute para o Google Security Operations usando o Cloud Storage. Google Cloud O analisador extrai campos, normaliza o campo de mensagem e mapeia os dados extraídos para o esquema do modelo de dados unificado (UDM, na sigla em inglês) para uma representação consistente de eventos de segurança. Ele processa vários formatos de registro, 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

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se o Compute está configurado e ativo no ambiente Google Cloud .
  • Verifique se você tem acesso privilegiado a Google Cloud.

Crie um bucket do Google Cloud Storage

  1. Faça login no console do Google Cloud.
  2. Acesse a página Buckets do Cloud Storage.

    Acessar buckets

  3. Clique em Criar.

  4. Na página Criar um bucket, insira as informações do seu bucket. Após cada uma das etapas a seguir, clique em Continuar para prosseguir para a próxima:

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

      1. Insira um nome exclusivo que atenda aos requisitos de nome de bucket. Por exemplo, compute-logs.
      2. Para ativar o namespace hierárquico, clique na seta de expansão para abrir a seção Otimizar para cargas de trabalho orientadas a arquivos e com uso intensivo de dados e selecione Ativar namespace hierárquico neste bucket.

        1. Para adicionar um rótulo de bucket, clique na seta de expansão para abrir a seção Rótulos.
        2. Clique em Adicionar rótulo e especifique uma chave e um valor para o rótulo.
    2. Na seção Escolha onde armazenar seus dados, faça o seguinte:

      1. Selecione um tipo de local.

        1. Use o menu do tipo de local para selecionar um Local em que os dados de objetos no bucket serão armazenados permanentemente.
        1. Para configurar a replicação entre buckets, abra a seção Configurar a replicação entre buckets.
    3. Na seção Escolha uma classe de armazenamento para seus dados, selecione uma classe de armazenamento padrão para o bucket ou selecione Classe automática para gerenciamento automático da classe de armazenamento dos dados do bucket.

    4. Na seçã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 controle de acesso para os objetos do bucket.

    5. Na seção Escolha como proteger os dados do objeto, faça o seguinte:

      1. Selecione qualquer uma das opções em Proteção de dados que você quer definir para o bucket.
      2. Para escolher como os dados do objeto serão criptografados, clique na seta de expansão identificada como Criptografia de dados e selecione um método de criptografia de dados.
  5. Clique em Criar.

Configurar Google Cloud exportação de registros do Compute

  1. No console do Google Cloud, acesse Logging > Roteador de registros.
  2. Clique em Criar coletor.
  3. Forneça os seguintes detalhes:

    • Nome do coletor: forneça um nome significativo. Por exemplo, Compute-Logs-Sink.
    • Destino do coletor: selecione Cloud Storage .
    • Destino do sink: selecione "Cloud Storage" e insira o URI do bucket. Por exemplo, gs://<your-bucket-name>/compute-logs.
    • Filtro de registro: defina filtros para capturar registros do Google Cloud Compute da seguinte maneira:

      • Nome e tipo do registro:

        logName="*compute*"
        
      • Campos relacionados à rede (como endereços IP, portas):

        jsonPayload.connection.dest_ip="*" OR jsonPayload.connection.src_ip="*"
        
      • Detalhes da instância:

        jsonPayload.dest_instance.project_id="*"
        jsonPayload.src_instance.project_id="*"
        
      • Detalhes relacionados à segurança:

        jsonPayload.rule_details.action="ALLOW" OR jsonPayload.rule_details.action="BLOCK"
        
  4. Clique em Criar.

Configurar permissões do Cloud Storage

  1. Acesse 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. Forneça o papel roles/storage.admin no bucket.

Configurar um feed no Google SecOps para ingerir Google Cloud registros do Compute

  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, Google Cloud Registros de computação.
  4. Selecione Google Cloud Storage como o Tipo de origem.
  5. Selecione GCP Compute como o Tipo de registro.
  6. Clique em Pegar conta de serviço como a Conta de serviço do Chronicle.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do bucket do Cloud Storage: Google Cloud URL do bucket do Cloud Storage no formato gs://my-bucket/<value>.
    • URI Is A: selecione Directory which includes subdirectories.
    • Opções de exclusão da origem: selecione a opção de exclusão de acordo com sua preferência.

    • Namespace de recursos: o namespace de recursos.

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

  9. Clique em Próxima.

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

Tabela de mapeamento do UDM

Campo de registro Mapeamento de UDM Lógica
addr read_only_udm.principal.ip Mesclado à lista de endereços IP principal se o campo não estiver vazio ou "?".
jsonPayload.connection.dest_ip read_only_udm.target.ip Mesclado à lista de endereços IP de destino, se o campo existir.
jsonPayload.connection.dest_port read_only_udm.target.port Conversão para string, depois para número inteiro e mapeamento se nenhum erro ocorrer durante a conversão.
jsonPayload.connection.protocol read_only_udm.network.ip_protocol Convertido em string e depois em número inteiro. É usado para determinar o protocolo IP (TCP, UDP etc.) usando uma tabela de pesquisa e mapeado se nenhum erro ocorrer durante a conversão.
jsonPayload.connection.src_ip read_only_udm.principal.ip Mesclado à lista de endereços IP principal, se o campo existir.
jsonPayload.connection.src_port read_only_udm.principal.port Conversão para string, depois para número inteiro e mapeamento se nenhum erro ocorrer 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 Usada como uma 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 Analisado e mapeado para campos diferentes 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 mapear.
jsonPayload.rule_details.direction read_only_udm.network.direction Usado para determinar a direção da rede (INBOUND/OUTBOUND/UNKNOWN_DIRECTION) e mapear.
jsonPayload.rule_details.priority read_only_udm.security_result.priority_details Conversão em string e mapeamento 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 do rótulo 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 Usada como uma 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", ele será usado para construir 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 mapear.
timestamp read_only_udm.metadata.event_timestamp Mapeado diretamente.
tipo 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 mapear de acordo.
read_only_udm.metadata.event_type A lógica define o tipo de evento com base no campo "type" e em outras condições. Se nenhuma correspondência específica for encontrada, o padrão será "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 É definido condicionalmente como "VPC_NETWORK" se jsonPayload.instance.project_id ou jsonPayload.dest_vpc.project_id existir.
read_only_udm.target.resource.attribute.cloud.environment É definido condicionalmente 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 do campo "Domínio da conta" extraído do campo "kv_data".
read_only_udm.principal.user.user_display_name Mapeado do campo "Nome da conta" extraído do campo "kv_data".
read_only_udm.target.resource.name Mapeado do campo "Nome do objeto" extraído do campo "kv_data".
read_only_udm.target.resource.type Mapeado do campo "Tipo de objeto" extraído do campo "kv_data".
read_only_udm.principal.process.pid Mapeado do campo "ID do processo" extraído do campo "kv_data".
read_only_udm.target.user.windows_sid Mapeado do campo "ID de segurança" extraído do campo "kv_data".
read_only_udm.network.session_id Mapeado do campo "auid".

Alterações

2024-06-18

Melhoria:

  • O "file" foi mapeado para "principal.file.names".
  • "function" foi mapeado para "principal.resource.attribute.labels".
  • "Linha" foi mapeada para "principal.resource.attribute.labels".
  • O "carimbo de tempo" foi mapeado para "event_timestamp".

2023-02-24

Correção de bug:

  • Mapeamento adicionado para "asset_id" para facilitar a pesquisa na interface: "asset:resource.labels.instance_id" é mapeado para "principal.asset_id"

2022-06-16

Melhoria:

  • Mapeamento adicionado para os seguintes campos novos: jsonPayload.Message como syslog.
  • Process Name para principal.application.
  • ID do processo para principal.process.pid.
  • Domínio da conta para principal.administrative_domain.
  • Nome da conta para principal.user.user_display_name.
  • Nome do objeto para target.resource.name.
  • O tipo de objeto para target.resource.type.
  • ID de segurança para target.user.windows_sid.
  • addr para principal.ip.
  • auid para network.session_id.
  • "LINUX - %{type}" mapeado para registros do Linux e "WINDOWS event log" para o registro do Windows para metadata.product_event_type.
  • pid para target.process.pid.
  • acct para target.user.userid.
  • exe para target.process.command_line.
  • file_path para principal.process.file.full_path.
  • O mapeamento de desc foi alterado de metadata.description para security_result.description.

2022-05-23

Melhoria:

  • Mapeamento adicionado para os seguintes campos novos:
  • jsonPayload.message como syslog.
  • resource.labels.zone para principal.resource.attribute.cloud.availability_zone.
  • resource.labels.location para principal.location.name.
  • resource.labels.project_id para metadata.product_deployment_id.
  • resource.labels.instance_id para principal.resource.product_object_id.

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