Notificações programáticas para descobertas do Trust Center

Os verificadores do Trust Center são executados em contas de clientes para revelar violações de segurança ou detectar ameaças potenciais como descobertas. As descobertas aparecem automaticamente no Snowsight. Um administrador do Trust Center também pode configurar notificações para que os usuários com endereços de e-mail verificados sejam notificados sobre as descobertas como mensagens de e-mail.

Esta versão preliminar lança o suporte para notificações adicionais, como webhooks (PagerDuty, Slack, Microsoft Teams) e filas (Amazon SNS, Azure Event Grid, Google Pub/Sub) para descobertas do Trust Center. As notificações são acionadas por um evento específico, como a geração de uma descoberta. O uso das integrações de notificação com o Trust Center permite receber notificações independentes do Snowsight, por meio de um serviço PagerDuty configurado pelo cliente, um tópico SNS ou outro ponto de extremidade.

Para obter mais informações, consulte CREATE NOTIFICATION INTEGRATION.

Configurar integrações de notificação para descobertas do Trust Center

Para configurar integrações de notificação para o Trust Center, siga estas etapas:

  1. Criar uma integração de notificação

  2. Conceder acesso à integração de notificação

  3. Definir as configurações de notificação para verificadores

  4. Executar o verificador

  5. Interpretar a carga útil da notificação

  6. Solucionar problemas de notificação

Criação de uma integração de notificação

Para permitir que o Trust Center envie notificações para um sistema de terceiros, execute o comando CREATE NOTIFICATION INTEGRATION.

Nota

Somente integrações de notificação de saída são compatíveis.

Para obter mais informações, consulte CREATE NOTIFICATION INTEGRATION.

Os exemplos a seguir mostram como criar integrações de notificação:

AWS SNS

CREATE NOTIFICATION INTEGRATION test_aws_int
  ENABLED = TRUE
  DIRECTION = OUTBOUND
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AWS_SNS
  AWS_SNS_TOPIC_ARN = 'arn:aws:sns:us-east-2:1234567890:sns-topic-name'
  AWS_SNS_ROLE_ARN = 'arn:aws:iam::1234567890:role/sns-access-role';

Webhook PagerDuty

O exemplo a seguir cria um webhook que precisa de um segredo.

Nota

O Trust Center preenche SNOWFLAKE_WEBHOOK_MESSAGE com a saída de notificação no formato JSON. Configure a integração de notificação para lidar com isso de maneira adequada.

CREATE OR REPLACE SECRET test_db.test_schema.integration_key
  TYPE = GENERIC_STRING
  SECRET_STRING = '1234567890abcdef1234567890abcdef';

CREATE OR REPLACE NOTIFICATION INTEGRATION test_pagerduty_int
  TYPE = WEBHOOK
  ENABLED = TRUE
  WEBHOOK_URL = 'https://events.pagerduty.com/v2/enqueue'
  WEBHOOK_SECRET = test_db.test_schema.integration_key
  WEBHOOK_BODY_TEMPLATE = '{
    "routing_key": "SNOWFLAKE_WEBHOOK_SECRET",
    "event_action": "trigger",
    "payload": {
        "summary": "Snowflake Trust Center Scanner Finding",
        "source": "Snowflake",
        "severity": "critical",
        "custom_details": SNOWFLAKE_WEBHOOK_MESSAGE
    }
  }'
  WEBHOOK_HEADERS = ('Content-Type'='application/json');

Conceder acesso à integração

Para permitir que o Trust Center use uma integração para enviar notificações, conceda ao aplicativo SNOWFLAKE o privilégio USAGE na integração de notificação. Por exemplo:

GRANT USAGE ON INTEGRATION test_pagerduty_int TO APPLICATION snowflake;

Se a integração depender de um segredo, como uma chave de integração para webhook PagerDuty, conceda os seguintes privilégios adicionais ao aplicativo SNOWFLAKE:

  • Privilégio READ no segredo

  • Privilégio USAGE no banco de dados que contém o segredo

  • Privilégio USAGE no esquema que contém o segredo

Por exemplo:

GRANT READ ON SECRET test_db.test_schema.integration_key TO APPLICATION snowflake;
GRANT USAGE ON DATABASE test_db TO APPLICATION snowflake;
GRANT USAGE ON SCHEMA test_db.test_schema TO APPLICATION snowflake;

Definir as configurações de notificação para um verificador

Você deve definir para cada verificador ou pacote de verificadores as descobertas que acionam uma notificação do webhook. Uma configuração NOTIFICATION_INTEGRATION contém essa definição. Para definir uma configuração NOTIFICATION_INTEGRATION para um verificador ou pacote de verificadores, use o procedimento armazenado SET_CONFIGURATION(). O valor da configuração é uma cadeia de caracteres que contém uma matriz de objetos JSON. Cada objeto especifica o seguinte:

Chave

Descrição

INTEGRATION_NAME

Nome da integração de notificação a ser usada.

SEVERITY_THRESHOLD

Nível de gravidade mínimo de uma descoberta que aciona uma notificação. Os valores válidos são LOW, MEDIUM, HIGH e CRITICAL. As notificações são enviadas somente para descobertas a partir desse nível de gravidade.

INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA

Opcional. Quando definido como TRUE, a notificação inclui detalhes da entidade, como nomes de usuário e endereços IP. O padrão é FALSE. Habilite este parâmetro somente se você aceitar o envio de informações confidenciais da conta para fora da sua conta Snowflake.

O exemplo a seguir define uma configuração de notificação para todos os verificadores no pacote CIS_BENCHMARKS:

CALL SNOWFLAKE.TRUST_CENTER.SET_CONFIGURATION(
  'NOTIFICATION_INTEGRATION',
  ARRAY_CONSTRUCT(
    OBJECT_CONSTRUCT(
      'SEVERITY_THRESHOLD', 'HIGH',
      'INTEGRATION_NAME', 'TEST_PAGERDUTY_INT',
      'INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA', 'TRUE'
    )
  )::VARCHAR,
  'CIS_BENCHMARKS'
);

O exemplo a seguir define uma configuração de notificação para um verificador específico (CIS_BENCHMARKS_CIS1_1) em um pacote de verificadores:

CALL SNOWFLAKE.TRUST_CENTER.SET_CONFIGURATION(
  'NOTIFICATION_INTEGRATION',
  ARRAY_CONSTRUCT(
    OBJECT_CONSTRUCT(
      'SEVERITY_THRESHOLD', 'HIGH',
      'INTEGRATION_NAME', 'TEST_PAGERDUTY_INT'
    )
  )::VARCHAR,
  'CIS_BENCHMARKS',
  'CIS_BENCHMARKS_CIS1_1'
);

É possível configurar várias integrações de notificação para o mesmo verificador ou pacote de verificadores. O exemplo a seguir configura o pacote de verificadores CIS_BENCHMARKS para que a integração com o Azure Event Grid receba notificações sobre descobertas CRITICAL, a integração com o PagerDuty receba notificações sobre descobertas HIGH ou CRITICAL e a integração com o AWS SNS receba notificações sobre descobertas de qualquer nível de gravidade:

CALL SNOWFLAKE.TRUST_CENTER.SET_CONFIGURATION(
  'NOTIFICATION_INTEGRATION',
  ARRAY_CONSTRUCT(
    OBJECT_CONSTRUCT(
      'SEVERITY_THRESHOLD', 'CRITICAL',
      'INTEGRATION_NAME', 'TEST_AZURE_EVENT_GRID_INT',
      'INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA', 'TRUE'
    ),
    OBJECT_CONSTRUCT(
      'SEVERITY_THRESHOLD', 'HIGH',
      'INTEGRATION_NAME', 'TEST_PAGERDUTY_INT'
    ),
    OBJECT_CONSTRUCT(
      'SEVERITY_THRESHOLD', 'LOW',
      'INTEGRATION_NAME', 'TEST_AWS_INT'
    )
  )::VARCHAR,
  'CIS_BENCHMARKS'
);

Para remover a configuração de notificação de um verificador, chame o procedimento armazenado UNSET_CONFIGURATION:

CALL SNOWFLAKE.TRUST_CENTER.UNSET_CONFIGURATION(
  'NOTIFICATION_INTEGRATION',
  'CIS_BENCHMARKS',
  'CIS_BENCHMARKS_CIS1_6'
);

Executar o verificador

O Trust Center é compatível com verificadores baseados em cronograma e verificadores orientados por evento. Depois de definir a configuração, você poderá executar um verificador sob demanda ou aguardar que ele seja executado de acordo com seu cronograma ou acionado por um evento.

Nota

  • Um verificador orientado por evento não envia notificação se não detectar nenhuma descoberta.

  • As notificações da integração de notificação são enviadas sobre a descoberta de um verificador somente quando o limite de gravidade é igual ou superior.

Para acionar manualmente um verificador, use um dos seguintes métodos:

  • Snowsight: navegue até Trust Center > Manage Scanners, selecione o menu de três pontos do verificador e escolha Run Scanner.

    Para obter mais informações, consulte Execução de um pacote de verificadores sob demanda.

  • SQL: Chame o procedimento armazenado EXECUTE_SCANNER. Por exemplo:

    CALL SNOWFLAKE.TRUST_CENTER.EXECUTE_SCANNER('CIS_BENCHMARKS', 'CIS_BENCHMARKS_CIS3_1');
    

Interpretar a saída da notificação

Quando um verificador do Trust Center é executado e produz descobertas que atendem ao limite de gravidade configurado, a mensagem de notificação contém um objeto JSON semelhante ao seguinte:

{
  "scanner_name": "<scanner_name>",
  "scanner_package_name": "<scanner_package_name>",
  "scanner_package_short_description": "<scanner_package_descr>",
  "scanner_short_description": "<scanner_descr>",
  "scanner_finish_time_unix_timestamp_ms": "<scanner_finish_time>",
  "scanner_finish_time_formatted": "<scanner_finish_time_as_date>",
  "findings": [
    {
      "event_id": "<event_id>",
      "finding_identifier": "<finding_identifier>",
      "finding_severity": "<finding_severity>",
      "at_risk_entities": [
        {
          "entity_detail": {},
          "entity_id": "<entity_id>",
          "entity_name": "<entity_name>",
          "entity_object_type": "<entity_object_type>"
        }
      ],
      "total_at_risk_count": "<total_at_risk_count>",
      "metadata": {},
      "note": "The list of at-risk entities has been truncated"
    }
  ]
}

Nota

A saída acima é um exemplo. A carga útil real pode ser diferente conforme a integração de notificação configurada. Os campos at_risk_entities e metadata são incluídos na mensagem de notificação somente quando INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA está habilitado.

O objeto JSON contém os seguintes pares chave-valor:

Chave

Descrição

scanner_name

Nome do verificador que produziu as descobertas.

scanner_package_name

Nome do pacote de verificadores que contém o verificador.

scanner_package_short_description

Breve descrição do pacote de verificadores.

scanner_short_description

Breve descrição do verificador.

scanner_finish_time_unix_timestamp_ms

Carimbo de data/hora Unix (em milissegundos) de quando o verificador terminou a execução.

scanner_finish_time_formatted

Data e hora em formato legível por humanos em que o verificador terminou a execução.

findings

Matriz de objetos de descoberta. Cada objeto de descoberta contém os campos a seguir.

Campo de descoberta

Descrição

event_id

Identificador exclusivo do evento.

finding_identifier

Identificador da descoberta. Pode ser usado para desduplicação.

finding_severity

Nível de gravidade da descoberta.

at_risk_entities

Matriz de objetos da entidade em risco. Cada entidade contém entity_detail, entity_id, entity_name e entity_object_type. Este campo pode ser excluído ou truncado.

total_at_risk_count

Número total de entidades em risco. Este campo pode ser excluído.

metadata

Metadados adicionais. A estrutura depende do verificador. Este campo pode ser excluído.

note

Uma nota indicando se a lista de entidades em risco foi truncada. Este campo está presente somente quando ocorre truncamento para atender às restrições de limite de tamanho. Se truncado, você pode recuperar a lista completa de entidades em risco consultando as descobertas do Trust Center.

Solucionar problemas de notificação

Se as notificações não forem entregues conforme o esperado, você poderá consultar o seguinte para examinar o fluxo de envio de notificações.

Para verificar as notificações enviadas pela plataforma de notificação:

SELECT * FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.NOTIFICATION_HISTORY());

Para conferir as notificações do verificador enviadas pelo Trust Center:

SELECT * FROM SNOWFLAKE.TRUST_CENTER.NOTIFICATION_HISTORY ORDER BY SENT_ON DESC;