Integrar o Pub/Sub ao Google SecOps

Este documento explica como integrar o Pub/Sub ao Google Security Operations.

Casos de uso

A integração do Pub/Sub é compatível com os seguintes casos de uso:

  • Ingestão automatizada de alertas: recupere continuamente registros de segurança, alertas e telemetria publicados em tópicos do Pub/Sub para ingerir no Google SecOps como casos.

  • Orquestração de segurança centralizada: consolide o roteamento de eventos de segurança pelo Pub/Sub de sistemas de nuvem e de terceiros para acionar playbooks de resposta automatizada.

Antes de começar

Antes de configurar a integração do Pub/Sub no Google SecOps, conclua as seguintes etapas de pré-requisito:

  1. Crie uma conta de serviço.

  2. Conceda os papéis necessários do Identity and Access Management à sua conta de serviço.

  3. Escolha e configure um dos seguintes métodos de autenticação:

Criar uma conta de serviço

  1. No console Google Cloud , acesse IAM e administrador > Contas de serviço.

    Acessar a página "Contas de serviço"

  2. Clique em addCriar conta de serviço.

  3. Forneça um nome e uma descrição e clique em Concluído. Anote o endereço de e-mail da conta de serviço.

Conceder papéis do IAM

Ao conceder permissões, a integração pode visualizar e extrair mensagens das suas assinaturas. Para atribuir a função padrão, siga estas etapas:

  1. No Google Cloud console, acesse o IAM

    Acessar IAM

  2. Localize sua conta de serviço e clique em Editar principal (edit).

  3. Clique em Adicionar outro papel e selecione Leitor do Pub/Sub (roles/pubsub.viewer).

  4. Clique em Salvar.

Configurar credenciais da Identidade da carga de trabalho

A Identidade da carga de trabalho é a abordagem recomendada porque usa tokens de acesso de curta duração com a identidade temporária de conta de serviço.

Identificar a identidade exclusiva da instância

Para estabelecer uma conexão, é necessário conceder à sua instância do Google SecOps permissão para personificar sua conta de serviço.

  1. No Google SecOps, acesse Central de conteúdo > Integrações de resposta.

  2. Selecione a integração do Pub/Sub e insira o e-mail da sua conta de serviço em E-mail da Identidade da carga de trabalho.

  3. Clique em Salvar > Teste. O teste vai falhar.

  4. Clique em close_small ao lado do botão Testar e localize o e-mail de identidade que começa com gke-init-python@... ou soar-python@....

  5. Copie esse endereço de e-mail exclusivo.

Autorize a identidade da instância em Google Cloud

  1. No console Google Cloud , acesse IAM e administrador > Contas de serviço.

    Acessar a página "Contas de serviço"

  2. Selecione a conta de serviço de destino e acesse Permissões > Conceder acesso.

  3. Cole o endereço de e-mail exclusivo em Principais novos e atribua o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator).

Conceder acesso ao projeto de cota

A autenticação com uma identidade da carga de trabalho requer um Quota Project ID para rastrear o uso da API e o faturamento.

  1. No console do Google Cloud , acesse IAM para o projeto usado como projeto de cota.

    Acessar IAM

  2. Encontre sua conta de serviço e clique em Editar principal (edit).

  3. Clique em Adicionar outro papel e selecione Consumidor do Service Usage (roles/serviceusage.serviceUsageConsumer).

  4. Clique em Salvar.

Configurar uma chave JSON

Arquivos de chaves secretas estáticos e de longa duração exigem rotação manual. Use esse método apenas se a autenticação da Identidade da carga de trabalho não estiver disponível.

  1. No console Google Cloud , acesse IAM e administrador > Contas de serviço e selecione sua conta de serviço.

    Acessar a página "Contas de serviço"

  2. Acesse a guia Chaves e clique em Adicionar chave > Criar nova chave.

  3. Selecione JSON e clique em Criar. O navegador faz o download do arquivo JSON no computador.

Parâmetros de integração

A integração do Pub/Sub exige os seguintes parâmetros:

Parâmetro Descrição
Workload Identity Email

Opcional.

O endereço de e-mail do cliente da sua conta de serviço.

Configure esse parâmetro apenas se você estiver fazendo a autenticação usando uma Identidade da carga de trabalho. Se configurado, também é necessário fornecer um Quota Project ID e Service Account JSON File Content será ignorado.

Service Account JSON File Content

Opcional.

Todo o conteúdo do arquivo JSON da chave da conta de serviço.

Configure esse parâmetro para autenticação de chave da conta de serviço.

Quota Project ID

Opcional.

O ID do projeto usado para faturamento e uso da API.

Esse parâmetro é obrigatório ao usar a autenticação de identidade da carga de trabalho.

Se nenhum valor for fornecido, a integração vai extrair o ID das credenciais da conta de serviço.

Project ID

Opcional.

O ID do projeto a ser segmentado no Pub/Sub.

Se nenhum valor for fornecido, a integração vai extrair o ID das credenciais da conta de serviço.

Verify SSL

Obrigatório.

Valida o certificado SSL para a conexão com o servidor. Ativado por padrão.

Para instruções sobre como configurar uma integração no Google SecOps, consulte Configurar integrações.

Você pode fazer mudanças mais tarde, se necessário. Depois de configurar uma instância de integração, você pode usá-la em playbooks. Para mais informações sobre como configurar e oferecer suporte a várias instâncias, consulte Suporte a várias instâncias.

Ações

Para mais informações sobre ações, consulte Responder a ações pendentes da sua mesa de trabalho e Realizar uma ação manual.

Ping

Use a ação "Ping" para testar a conectividade com o Pub/Sub.

Essa ação não é executada em entidades do Google SecOps.

Entradas de ação

Nenhuma.

Saídas da ação

A ação Ping fornece as seguintes saídas:

Tipo de saída da ação Disponibilidade
Anexo do Painel de Casos Indisponível
Link do Painel de Casos Indisponível
Tabela do Painel de Casos Indisponível
Tabela de enriquecimento Indisponível
Resultado JSON Indisponível
Mensagens de saída Disponível
Resultado do script Disponível
Mensagens de saída

A ação Ping pode retornar as seguintes mensagens de saída:

Mensagem de resposta Descrição da mensagem
Successfully connected to the Pub/Sub server with the provided connection parameters! A ação foi concluída.
Failed to connect to the Pub/Sub server! Error is ERROR_REASON

A ação falhou.

Verifique a conexão com o servidor, os parâmetros de entrada ou as credenciais.

Resultado do script

A tabela a seguir lista o valor da saída do resultado do script ao usar a ação Ping:

Nome do resultado do script Valor
is_success True ou False

Conectores

Para instruções detalhadas sobre como configurar um conector no Google SecOps, consulte Ingerir seus dados (conectores).

Pub/Sub: conector de mensagens

Na plataforma Google SecOps, o conector do Pub/Sub – Messages é chamado de conector do PubSub – Messages.

Use o conector de mensagens do Pub/Sub para recuperar mensagens do Pub/Sub.

Mapeamento de gravidade JSON

Para mapear a gravidade do alerta, especifique qual campo o Conector de mensagens do Pub/Sub usa para receber o valor da gravidade no parâmetro Severity Mapping JSON. A resposta do conector pode conter tipos de valores, como integer, float e string.

O conector de mensagens do Pub/Sub lê os valores integer e float e os mapeia de acordo com as configurações do Google SecOps. A tabela a seguir mostra o mapeamento dos valores de integer para a gravidade no Google SecOps:

Número inteiro Gravidade mapeada
100 Critical
De 80 a 100 High
De 60 a 80 Medium
De 40 a 60 Low
Menos de 40 Informational

Se a resposta contiver o valor string, o conector do Pub/Sub – Messages vai exigir mais configuração.

Inicialmente, o valor padrão aparece assim:

{
    "Default": 60
}

Se os valores necessários para o mapeamento estiverem localizados na chave JSON event_severity, eles poderão ser os seguintes:

  • "Malicious"
  • "Benign"
  • "Unknown"

Para analisar os valores de chave JSON event_severity e garantir que o objeto JSON tenha um formato correto, configure o parâmetro Severity Mapping JSON da seguinte maneira:

{
    "event_severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

O valor "Default" é obrigatório.

Quando há várias correspondências para o mesmo objeto JSON, o conector de mensagens do Pub/Sub prioriza a primeira chave de objeto JSON.

Para trabalhar com campos que contêm valores integer ou float, configure a chave e uma string vazia no parâmetro Severity Mapping JSON:

{
  "Default":"60",
  "integer_field": "",
  "float_field": ""
}

Entradas de conector

O conector de mensagens do Pub/Sub exige os seguintes parâmetros:

Parâmetro Descrição
Product Field Name Obrigatório

O nome do campo em que o nome do produto é armazenado.

O valor padrão é Product Name.

Event Field Name Obrigatório

O nome do campo usado para determinar o nome do evento (subtipo).

O valor padrão é event_type.

Environment Field Name Opcional

O nome do campo em que o nome do ambiente é armazenado.

Se o campo de ambiente não for encontrado, ele será definido como o ambiente padrão.

O valor padrão é "".

Environment Regex Pattern Opcional

Um padrão de expressão regular a ser executado no valor encontrado no campo Environment Field Name. Com esse parâmetro, é possível manipular o campo "environment" usando a lógica de expressão regular.

Use o valor padrão .* para extrair o valor Environment Field Name bruto necessário.

Se o padrão de expressão regular for nulo ou vazio, ou se o valor do ambiente for nulo, o resultado final será o ambiente padrão.

PythonProcessTimeout Obrigatório

O limite de tempo em segundos para o processo do Python que executa o script atual.

O valor padrão é 60.

Service Account JSON File Content Opcional

O conteúdo do arquivo JSON da chave da conta de serviço.

É possível configurar esse parâmetro ou o Workload Identity Email.

Para configurar esse parâmetro, forneça o conteúdo completo do arquivo JSON da chave da conta de serviço que você baixou ao criar uma conta de serviço.

Para o conector Pub/Sub – Messages, a autenticação com o arquivo JSON da chave da conta de serviço tem prioridade sobre a federação de identidade da carga de trabalho.

Workload Identity Email Opcional

O endereço de e-mail do cliente da sua conta de serviço.

É possível configurar esse parâmetro ou o Service Account JSON File Content.

Para representar contas de serviço com a federação de identidade da carga de trabalho, conceda o papel Service Account Token Creator à sua conta de serviço.

Project ID Opcional

O ID do projeto a ser usado no conector.

Quota Project ID Opcional

O ID do projeto Google Cloud que você usa para APIs Google Cloud e faturamento. Para usar esse parâmetro, conceda o papel Service Usage Consumer à sua conta de serviço. Para mais informações sobre os papéis do IAM, consulte Controle de acesso com o IAM.

A integração anexa esse valor de parâmetro a todas as solicitações de API.

Subscription ID Obrigatório

O ID da assinatura do Pub/Sub.

Case Name Template Opcional

Um nome de caso personalizado.

Ao configurar esse parâmetro, o conector adiciona uma nova chave chamada custom_case_name ao evento do Google SecOps.

É possível fornecer marcadores de posição no seguinte formato: [name of the field].

Exemplo: Phishing - [event_mailbox]

Para marcadores de posição, o conector usa o primeiro evento do Google SecOps. O conector só processa chaves que contêm o valor de string. Para configurar esse parâmetro, especifique campos de evento sem prefixos.

Alert Name Template Obrigatório

Um nome de alerta personalizado.

É possível fornecer marcadores de posição no seguinte formato: [name of the field].

Exemplo: Phishing - [event_mailbox].

Para marcadores de posição, o conector usa o primeiro evento do Google SecOps. O conector só processa chaves que contêm o valor de string. Se você não fornecer um valor ou usar um modelo inválido, o conector usará um valor substituto no seguinte formato: CONNECTOR_NAME - Alert. Para configurar esse parâmetro, especifique campos de evento sem prefixos.

Rule Generator Template Obrigatório

Um gerador de regras personalizadas.

É possível fornecer marcadores de posição no seguinte formato: [name of the field].

Exemplo: Phishing - [event_mailbox].

Para marcadores de posição, o conector usa o primeiro evento do Google SecOps. O conector só processa chaves que contêm o valor de string. Se você não fornecer um valor ou usar um modelo inválido, o conector usará um valor substituto no seguinte formato: CONNECTOR_NAME - Rule Generator. Para configurar esse parâmetro, especifique campos de evento sem prefixos.

Timestamp Field Obrigatório

O nome do campo para definir o carimbo de data/hora do alerta do Google SecOps.

Se o carimbo de data/hora não usar o formato de hora da época Unix, defina o formato no parâmetro Timestamp Format.

O valor padrão é message_publishTime.

Timestamp Format Opcional

O formato do carimbo de data/hora da mensagem.

O conector precisa do carimbo de data/hora para processar a mensagem corretamente. Se o carimbo de data/hora não usar o formato de hora da época Unix e você não configurar um formato de carimbo de data/hora, o conector vai falhar.

O valor padrão é %Y-%m-%dT%H:%M:%S.%fZ.

Severity Mapping JSON Obrigatório

O objeto JSON que define como o conector extrai o nível de gravidade da mensagem.

O valor padrão é:

    {
      "Default": "60"
    }
    

Para mais informações sobre o mapeamento de gravidade, consulte Mapeamento de gravidade JSON.

Unique ID Field Opcional

O nome do campo para confirmar se a mensagem é exclusiva. É possível usar a palavra-chave reservada pubsub_message_id para extrair o ID de mensagem nativo do Pub/Sub. Se você não definir um valor ou o campo não for encontrado, o conector vai gerar um hash SHA-256 e usá-lo como um identificador para a mensagem.

Max Messages To Fetch Obrigatório

O número máximo de mensagens a serem processadas em cada iteração do conector.

O valor padrão é 100.

Disable Overflow Opcional

Se selecionado, o conector vai ignorar o mecanismo de estouro do Google SecOps durante a criação de alertas.

Essa opção é selecionada por padrão.

Verify SSL Obrigatório

Se selecionada, a integração verifica se o certificado SSL para conexão com o Pub/Sub é válido.

Essa opção é selecionada por padrão.

Proxy Server Address Opcional

O endereço do servidor proxy a ser usado.

Proxy Username Opcional

O nome de usuário do proxy para autenticação.

Proxy Password Opcional

A senha do proxy para autenticação.

Regras do conector

O conector de mensagens do Pub/Sub é compatível com proxies.

Eventos do conector

O exemplo a seguir mostra a saída JSON de um evento do Google SecOps gerado pelo Conector de mensagens do Pub/Sub:

{
   "notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
   "finding": {
       "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
       "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
       "resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
       "state": "ACTIVE",
       "category": "OPEN_NETBIOS_PORT",
       "externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
       "sourceProperties": {
           "Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
           "ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
           "Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
           "ScannerName": "FIREWALL_SCANNER",
           "ResourcePath": [
               "projects/PROJECT_ID/",
               "folders/FOLDER_ID/",
               "folders/FOLDER_ID/",
               "organizations/ORGANIZATION_ID/"
           ],
           "ExposedService": "NetBIOS",
           "OpenPorts": {
               "TCP": [
                   137.0,
                   138.0,
                   139.0
               ],
               "UDP": [
                   137.0,
                   138.0,
                   139.0
               ]
           },
           "compliance_standards": {
               "iso": [
                   {
                       "ids": [
                           "A.13.1.1"
                       ]
                   }
               ],
               "pci": [
                   {
                       "ids": [
                           "1.2.1"
                       ]
                   }
               ],
               "nist": [
                   {
                       "ids": [
                           "SC-7"
                       ]
                   }
               ]
           },
           "ReactivationCount": 4.0
       },
       "securityMarks": {
           "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
           "marks": {
               "peter": "e2e1"
           }
       },
       "eventTime": "2024-08-30T14:44:37.973090Z",
       "createTime": "2024-06-24T07:08:54.777Z",
       "propertyDataTypes": {
           "ResourcePath": {
               "listValues": {
                   "propertyDataTypes": [
                       {
                           "primitiveDataType": "STRING"
                       }
                   ]
               }
           },
           "ReactivationCount": {
               "primitiveDataType": "NUMBER"
           },
           "Explanation": {
               "primitiveDataType": "STRING"
           },
           "ExposedService": {
               "primitiveDataType": "STRING"
           },
           "ScannerName": {
               "primitiveDataType": "STRING"
           }
       }
   }
}

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