Como ativar notificações de chat em tempo real

Visão geral

O Security Command Center oferece notificações de descobertas em tempo real no Google Cloud console. Este guia descreve como usar Google Cloud serviços e APIs de terceiros para estender essa funcionalidade e receber notificações quase em tempo real no Slack. Ao concluir o guia, você recebe alertas sobre novas descobertas em serviços de terceiros configurados sem fazer login no Google Cloud console, o que permite uma triagem mais rápida de vulnerabilidades e ameaças. Saiba mais sobre os diferentes tipos de vulnerabilidades e ameaças no Security Command Center.

Topologia

Neste guia, você criará a configuração ilustrada no diagrama a seguir.

Fluxo de trabalho de notificações quase em tempo real (clique para ampliar)
Fluxo de trabalho de notificações quase em tempo real para o Security Command Center (clique para ampliar)

Objetivos

Neste guia, você:

  1. Configurar um tópico do Pub/Sub
  2. Configurar o Slack
  3. Escrever código em funções do Cloud Run
  4. Configurar o Pub/Sub e as funções do Cloud Run para enviar notificações ao Slack sempre que uma nova descoberta de gravidade alta ou crítica for gravada no Security Command Center.
  5. Resolver problemas de notificação

Custos

Este tutorial usa componentes faturáveis do Google Cloud, incluindo:

  • Pub/Sub
  • Cloud Run functions
  • Cloud Build

Use a calculadora de preços para gerar uma estimativa de custo com base na projeção de uso.

Antes de começar

Para concluir este guia, você precisa ter os seguintes papéis de gerenciamento de identidade e acesso (IAM):

  • Administrador da organização (roles/resourcemanager.organizationAdmin)
  • Administrador da Central de segurança (roles/securitycenter.admin)
  • Administrador de segurança (roles/iam.securityAdmin)
  • Um papel com a permissão serviceusage.services.use, como proprietário (roles/owner), editor (roles/editor) ou um papel personalizado
  • Criar contas de serviço (roles/iam.serviceAccountCreator)
  • Editor do Pub/Sub (roles/pubsub.editor)
  • Administrador da conta de faturamento (roles/billing.admin)

Os papéis do IAM para o Security Command Center podem ser concedidos no nível da organização, da pasta ou do projeto. A capacidade de ver, editar, criar ou atualizar descobertas, recursos e fontes de segurança depende do nível a que você tem acesso. Para saber mais sobre os papéis do Security Command Center, consulte Controle de acesso.

Como configurar um projeto

Conclua as etapas a seguir para criar ou selecionar um projeto.

  1. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Instale a Google Cloud CLI.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Instale a Google Cloud CLI.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

Tempo estimado: leva aproximadamente uma hora para configurar e testar notificações de um único serviço.

Como configurar um tópico do Pub/Sub

O Pub/Sub é um serviço de mensagens em tempo real que permite que as mensagens sejam enviadas e recebidas entre aplicativos independentes. Saiba mais sobre o Pub/Sub.

Nesta seção, você configura o Security Command Center para publicar descobertas em um tópico do Pub/Sub.

Para configurar e inscrever-se em um tópico do Pub/Sub, faça o seguinte:

  1. Especifique seu Google Cloud projeto em uma variável de ambiente.

    export PROJECT_ID=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do seu projeto.

  2. Especifique sua Google Cloud organização em uma variável de ambiente.

    export ORG_ID=ORG_ID
    

    Substitua ORG_ID pelo ID da organização.

  3. Defina o ID do projeto para os comandos gcloud.

    gcloud config set project PROJECT_ID
    
  4. Crie o tópico do Pub/Sub em que as notificações são publicadas.

    gcloud pubsub topics create scc-critical-and-high-severity-findings-topic
    
  5. Especifique o tópico em uma variável de ambiente.

    export TOPIC=projects/$PROJECT_ID/topics/scc-critical-and-high-severity-findings-topic
    
  6. Crie a assinatura que notifica as funções do Cloud Run para enviar uma mensagem de chat quando as mensagens forem publicadas no tópico.

    gcloud pubsub subscriptions create scc-critical-and-high-severity-findings-sub \
      --topic scc-critical-and-high-severity-findings-topic
    
  7. Configure o Security Command Center para publicar notificações no tópico. Qualquer filtro compatível com a API ListFindings pode ser usado.

    O filtro a seguir publica notificações para descobertas ativas de gravidade alta e crítica no local global. Saiba mais sobre como filtrar descobertas.

     gcloud scc notifications create scc-critical-high-severity \
         --pubsub-topic=$TOPIC \
         --organization=$ORG_ID \
         --location=global \
         --filter '(severity="HIGH" OR severity="CRITICAL") AND state="ACTIVE"'
    

Em seguida, crie ou configure seu aplicativo de chat para receber notificações do Pub/Sub.

Como configurar um app de mensagens

Nesta seção, descrevemos como usar o Pub/Sub e as funções do Cloud Run ou as funções do Cloud Run (1ª geração) para ativar notificações quase em tempo real para o Slack.

Para enviar notificações a um canal do Slack, faça o seguinte: * Crie um novo aplicativo do Slack com privilégios suficientes para postar mensagens em um canal público do Slack. * Crie e implante uma função do Cloud Run que publica mensagens de chat no Slack quando as notificações são recebidas do Pub/Sub.

### Crie um novo aplicativo do Slack

Nesta seção, você cria um novo aplicativo do Slack para receber notificações.

  1. Acesse Apps da API Slack. A página é aberta em uma nova guia.
  2. Faça login ou Crie uma conta.

  3. Selecione Criar um app.

  4. Defina o Nome do app como SCC Finding Notifier.

  5. Selecione o Espaço de trabalho do Slack em desenvolvimento em que você quer que o bot do Slack publique mensagens e clique em Criar aplicativo.

  6. No painel de navegação, selecione OAuth e permissões.

  7. Navegue até a seção Escopos. Os escopos se dividem em duas categorias:

    • Escopos do token do bot
    • Escopos do token do usuário
  8. Para este exercício, não é necessário adicionar um escopo de token de usuário. Em "Escopos do token do bot", clique em Adicionar um escopo do OAuth e digite:

    • chat:write
    • chat:write.public
  9. Acesse a parte de cima da página OAuth e permissões e clique em Instalar aplicativo no espaço de trabalho.

  10. Na caixa de diálogo de confirmação, clique em Permitir.

  11. Copie o Token de acesso do OAuth do usuário de bot para usá-lo na Função do Cloud.

    Em seguida, implante uma função do Cloud Run para enviar notificações a um grupo do Slack.

    Criar a função do Cloud Run do Slack

    Nesta seção, você implantará uma função para enviar notificações à sua conta do Slack. O exemplo de código nesta seção é escrito em Python, mas é possível usar qualquer linguagem compatível com as funções do Cloud Run.

  12. No Google Cloud console do, acesse a página Serviços das funções do Cloud Run.

    Acessar Serviços

  13. Selecione o ID do projeto que contém o tópico do Pub/Sub.

  14. Clique em Escrever uma função e preencha os campos:

    1. Em Nome do serviço, insira slack-chat-high-and-critical-findings.
    2. Em Região, selecione a região onde você quer armazenar o serviço.
    3. Em Ambiente de execução, selecione a versão do Python a ser usada para executar a função.
  15. Clique em Adicionar gatilho e selecione Gatilho do Pub/Sub.

  16. Insira os detalhes do tópico do Pub/Sub que você criou em Como configurar um tópico do Pub/Sub e clique em Salvar gatilho.

  17. Clique em Criar. Os detalhes do serviço são exibidos.

  18. No painel Origem da guia Origem, clique em requirements.txt.

  19. No editor de código, adicione requests e functions-framework==3.*:

     requests
     functions-framework==3.*
    
  20. No painel Origem, clique em main.py.

  21. No editor de código, substitua o código pelo seguinte:

      import base64
      import json
      import requests
      import functions_framework
    
      TOKEN = "BOT_ACCESS_TOKEN"
    
      @functions_framework.cloud_event
      def send_slack_chat_notification(cloud_event):
    
          pubsub_message = base64.b64decode(cloud_event.data["message"]["data"]).decode('utf-8').strip()
          message_json = json.loads(pubsub_message)
    
          finding = message_json['finding']
    
          requests.post("https://slack.com/api/chat.postMessage", data={
              "token": TOKEN,
              "channel": "#SLACK_CHANNEL_NAME",
              "text": f"A high severity finding {finding['category']} was detected."
          })
    

    Substitua:

    • BOT_ACCESS_TOKEN: o Token de acesso do OAuth do usuário de bot criado pelo aplicativo Slack.
    • SLACK_CHANNEL_NAME: o canal do Slack em que você quer enviar as notificações.
  22. No campo Ponto de entrada da função, insira o nome da função no exemplo de código: send_slack_chat_notification.

  23. Clique em Salvar e implantar novamente. Se uma marca de seleção verde aparecer ao lado do nome da função, ela terá sido implantada com sucesso. Esse processo pode levar alguns minutos.

Se as etapas anteriores foram concluídas sem erros, a configuração está concluída e você começa a receber notificações. Não se esqueça:

  • Você recebe uma mensagem de chat separada para cada descoberta crítica ou de alta gravidade. A frequência ou o número de notificações depende dos recursos dentro da organização.
  • As notificações são publicadas e enviadas quase em tempo real. No entanto, a imediação de mensagens não é garantida, e vários fatores podem causar atrasos, incluindo problemas com o Slack.

Para alterar o fluxo de trabalho de notificações, faça o seguinte:

  • Para atualizar os destinatários, atualize a função do Cloud Run.
  • Altere quais descobertas acionam as notificações atualizando o filtro do tópico do Pub/Sub.

Notificações de teste

Para testar se as notificações estão configuradas corretamente, siga estas instruções para alternar as descobertas de alta gravidade entre estados ativos e inativos.

  1. Acesse a página Descobertas do Security Command Center.
    Acessar a página Descobertas
  2. Selecione sua organização, se solicitado.
  3. No painel Filtros rápidos, role para baixo até a seção Gravidade e selecione Alta ou Crítico. O painel Resultados da consulta de descobertas é atualizado para mostrar descobertas apenas da gravidade selecionada.
  4. No painel Resultados da consulta de descobertas, selecione uma descoberta marcando a caixa ao lado do nome dela.
  5. No menu Alterar estado ativo na barra de ações Resultados da consulta de descobertas, selecione Inativas. Se a consulta de descobertas atual mostrar apenas descobertas ativas, a descoberta será removida dos resultados da consulta.
  6. No painel Filtros rápidos, role para baixo até a seção Estado e mude as seleções para que apenas Inativo seja selecionado. O painel Resultados da consulta de descobertas é atualizado para mostrar somente descobertas inativas.
  7. No painel Resultados da consulta de descobertas, selecione a descoberta que você marcou como inativa.
  8. No menu Alterar estado ativo na barra de ações Resultados da consulta de descobertas, selecione Ativas.
  9. Verifique suas mensagens do Slack. Uma mensagem semelhante às imagens a seguir será exibida:

Notificação do Slack

Solução de problemas

Se as mensagens de chat não estiverem sendo enviadas ou recebidas, siga estas etapas para identificar e resolver possíveis problemas.

1. Check [Stackdriver
logs](https://console.cloud.google.com/projectselector2/logs/viewer) for
your Cloud Run function to determine whether the function is being
invoked. If it is not being invoked, ensure that notifications are set up
correctly.

1. If the Cloud Run function is being invoked, then it might be
crashing. Check for errors in Cloud Run functions using
[Google Cloud console Error Reporting]
(https://console.developers.google.com/errors).

Limpar

Para evitar cobranças na sua Google Cloud conta pelos recursos usados neste tutorial, exclua o projeto que contém os recursos ou mantenha o projeto e exclua os recursos individuais.

Excluir o projeto

  1. No Google Cloud console, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
  3. Na caixa de diálogo, digite o ID do projeto e clique em Desligar para excluir o projeto.

Como excluir recursos individuais

  1. Exclua a configuração de notificação:

    gcloud scc notifications delete scc-critical-high-severity \
        --organization=ORG_ID \
        --location=global
    

    Substitua ORG_ID pelo ID da organização.

    Para manter a configuração e pausar temporariamente as notificações, comente as chamadas send ou post na função do Cloud Run.

  2. Exclua a função do Cloud Run:

    1. Acessar as funções do Cloud Run.
      Acessar as funções do Cloud Run
    2. Clique na caixa de seleção ao lado do objeto a ser excluído.
    3. Clique em Excluir .
  3. Exclua a conta de serviço:

    1. Acessar a página Contas de serviço.
      Acessar a página Contas de serviço
    2. Selecione um projeto.
    3. Selecione a conta de serviço que você quer excluir e clique em Excluir .

A seguir