Como ativar notificações de chat em tempo real

Visão geral

O Security Command Center fornece notificações em tempo real das descobertas no consoleGoogle Cloud . Este guia descreve como usar os serviços do Google Cloud 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 console do Google Cloud , 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. Configure o Slack.
  3. Escrever código no Cloud Run functions.
  4. Configure 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

Neste tutorial, usamos 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 conta do Google Cloud . Se você começou a usar o Google Cloudagora, 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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    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 o projeto do Google Cloud em uma variável de ambiente.

    export PROJECT_ID=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do 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 são 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"' \
         --deletion-notifications-enabled
    

    Adicione a flag --deletion-notifications-enabled para receber notificações sobre eventos de exclusão de descobertas devido a políticas de retenção. A notificação contém o campo deletedFinding: true definido. Verifique se as funções ou o aplicativo do Cloud Run analisam o atributo deletedFinding para que os alertas reflitam corretamente as exclusões de descobertas. Para desativar as notificações de exclusão, atualize o NotificationConfig e defina a flag --no-deletion-notifications-enabled.

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

Como configurar um app de mensagens

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

Para enviar notificações a um canal do Slack, faça o seguinte:

  • Crie um novo aplicativo 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 poste mensagens de chat no Slack quando notificações forem 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 "Bot Token Scopes", clique em Add a OAuth Scope e digite:

    • chat:write
    • chat:write.public
  9. Acesse a parte de cima da página OAuth e permissões e clique em Instalar app no Workspace.

  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.

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

    Acessar Serviços

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

  3. 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 onde você quer armazenar o serviço.
    3. Em Ambiente de execução, selecione a versão do Python que será usada para executar a função.
  4. Clique em Adicionar gatilho e selecione Gatilho do Pub/Sub.

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

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

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

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

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

  10. 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 OAuth do usuário do bot que você criou com o app Slack.
    • SLACK_CHANNEL_NAME: o canal do Slack em que você quer enviar as notificações.
  11. No campo Ponto de entrada da função, insira o nome da função no exemplo de código: send_slack_chat_notification.

  12. Clique em Salvar e reimplantar. Se uma marca de seleção verde aparecer ao lado do nome da função, ela foi 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ê vai começar a receber notificações. Observações importantes:

  • 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 imediatez das 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:

  • Atualize sua função do Cloud Run para mudar os destinatários.
  • 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, acesse a seção Gravidade e selecione Alta ou Crítica. 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, acesse 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 apenas 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. Confira suas mensagens do Slack. Uma mensagem semelhante à imagem 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. Verifique os registros do Stackdriver da função do Cloud Run para determinar se ela está sendo invocada. Se ele não estiver sendo invocado, verifique se as notificações estão configuradas corretamente.

  2. Se a função do Cloud Run estiver sendo invocada, ela poderá falhar. Verifique se há erros nas funções do Cloud Run usando o Error Reporting do consoleGoogle Cloud .

Limpar

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

Excluir o projeto

  1. No console Google Cloud , 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 Encerrar para excluí-lo.

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 sua configuração e pausar temporariamente as notificações, adicione um comentário às chamadas send ou post na sua função do Cloud Run.

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

    1. Acesse 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