Notifications programmatiques des résultats du Centre de confiance

Les scanners du Centre de confiance sont exécutés dans les comptes clients afin de mettre en évidence les violations de sécurité ou de détecter les menaces potentielles sous forme de résultats. Les résultats apparaissent automatiquement dans Snowsight. Un administrateur du Centre de confiance peut également configurer les notifications afin que les utilisateurs disposant d’adresses e-mail vérifiées reçoivent des notifications sur les résultats sous forme d’e-mails.

Cet aperçu introduit la prise en charge de notifications supplémentaires telles que les webhooks (PagerDuty, Slack, Microsoft Teams) et files d’attente (Amazon SNS, Azure Event Grid, Google Pub/Sub) pour les résultats du Centre de confiance. Les notifications sont déclenchées par un événement spécifique, tel que la génération d’un résultat. L’utilisation d’intégrations de notification avec le Centre de confiance offre la possibilité de recevoir des notifications indépendantes de Snowsight, via un service PagerDuty configuré par le client, un sujet SNS ou un autre point de terminaison.

Pour plus d’informations, voir CREATE NOTIFICATION INTEGRATION.

Configurer les intégrations de notification pour les résultats du Centre de confiance

Pour configurer des intégrations de notification pour le Centre de confiance, procédez comme suit :

  1. Créer une intégration de notification

  2. Accorder l’accès à l’intégration de notification

  3. Configurer les paramètres de notification pour les scanners

  4. Exécuter le scanner

  5. Interpréter la charge utile de la notification

  6. Résoudre les problèmes de notification

Créer une intégration de notification

Pour permettre au Centre de confiance d’envoyer des notifications à un système tiers, exécutez la commande CREATE NOTIFICATION INTEGRATION.

Note

Seules les intégrations de notification sortantes sont prises en charge.

Pour plus d’informations, voir CREATE NOTIFICATION INTEGRATION.

Les exemples suivants montrent comment créer des intégrations de notification :

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

L’exemple suivant crée un webhook qui s’appuie sur un secret.

Note

Le Centre de confiance remplit le SNOWFLAKE_WEBHOOK_MESSAGE avec la sortie de notification en format JSON. Configurez votre intégration de notification pour traiter cela de manière appropriée.

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');

Accorder l’accès à l’intégration

Pour permettre au Centre de confiance d’utiliser une intégration pour envoyer des notifications, accordez le privilège USAGE sur l’intégration de notification à l’application SNOWFLAKE. Par exemple :

GRANT USAGE ON INTEGRATION test_pagerduty_int TO APPLICATION snowflake;

Si l’intégration s’appuie sur un secret, comme une clé d’intégration webhook PagerDuty, accordez les privilèges supplémentaires suivants à l’ application SNOWFLAKE :

  • Privilège READ sur le secret.

  • Privilège USAGE sur la base de données qui contient le secret

  • Privilège USAGE sur le schéma qui contient le secret

Par exemple :

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;

Configurer les paramètres de notification d’un scanner

Vous devez définir pour chaque scanner ou paquet de scanner les résultats qui déclenchent une notification webhook. La configuration NOTIFICATION_INTEGRATION contient cette définition. Pour définir la configuration NOTIFICATION_INTEGRATION d’un scanner ou d’un paquet de scanners, utilisez la procédure stockée SET_CONFIGURATION(). La valeur de la configuration est une chaîne contenant un tableau d’objets JSON. Chaque objet spécifie ce qui suit :

Clé

Description

INTEGRATION_NAME

Nom de l’intégration de notification à utiliser.

SEVERITY_THRESHOLD

Niveau de gravité minimum d’un résultat qui déclenche une notification. Les valeurs valides sont LOW, MEDIUM, HIGH et CRITICAL. Les notifications ne sont envoyées que pour les résultats correspondant à ou au-dessus de ce niveau de gravité.

INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA

En option. Lorsque définie sur TRUE, la notification comprend des détails sur l’entité tels que les noms des utilisateurs et les adresses IP. La valeur par défaut est FALSE. N’activez ce paramètre que si vous acceptez l’envoi d’informations de compte sensibles en dehors de votre compte Snowflake.

L’exemple suivant définit une configuration de notification pour tous les scanners dans le paquet de scanner 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'
);

L’exemple suivant définit une configuration de notification pour un scanner spécifique (CIS_BENCHMARKS_CIS1_1) dans un paquet de scanner :

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'
);

Vous pouvez configurer plusieurs intégrations de notification pour le même scanner ou le même paquet de scanner. L’exemple suivant configure le paquet de scanner CIS_BENCHMARKS pour que l’intégration Azure Event Grid reçoive des notifications pour les résultats CRITICAL, que l’intégration PagerDuty reçoive des notifications pour les résultats HIGH ou CRITICAL et que l’intégration AWS SNS reçoive des notifications pour les résultats de tout niveau de gravité :

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'
);

Pour supprimer la configuration de notification d’un scanner, appelez la procédure stockée UNSET_CONFIGURATION :

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

Exécuter le scanner

Le Centre de confiance prend en charge les scanners basés sur la programmation et les scanners basés sur les événements. Après avoir défini la configuration, vous pouvez exécuter un scanner à la demande ou attendre que le scanner s’exécute selon sa planification ou soit déclenché par un événement.

Note

  • Un scanner basé sur les événements n’envoie pas de notification s’il ne détecte aucun résultat.

  • Les notifications d’intégration ne sont envoyées pour les résultats d’un scanner que lorsque le seuil de gravité est atteint ou dépassé.

Pour déclencher manuellement un scanner, utilisez l’une des méthodes suivantes :

  • Snowsight : Accédez à Trust Center > Manage Scanners, sélectionnez le menu à trois points pour le scanner, puis sélectionnez Run Scanner.

    Pour plus d’informations, voir Exécuter un paquet de scanner à la demande.

  • SQL : Appelez la procédure stockée EXECUTE_SCANNER. Par exemple :

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

Interpréter la sortie de la notification

Lorsqu’un scanner du Centre de confiance s’exécute et produit des résultats qui atteignent le seuil de gravité configuré, le message de notification contient un objet JSON similaire au suivant :

{
  "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"
    }
  ]
}

Note

Ce qui précède est un exemple. La charge utile réelle diffère en fonction de l’intégration de notification configurée. Les champs at_risk_entities et metadata sont inclus dans le message de notification uniquement lorsque INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA est activé.

L’objet JSON contient les paires clés-valeurs suivantes :

Clé

Description

scanner_name

Nom du scanner qui a produit les résultats.

scanner_package_name

Nom du paquet de scanner contenant le scanner.

scanner_package_short_description

Description courte du paquet de scanner.

scanner_short_description

Description courte du scanner.

scanner_finish_time_unix_timestamp_ms

Horodatage Unix (en millisecondes) à la fin de l’exécution du scanner.

scanner_finish_time_formatted

Date et heure au format lisible par l’utilisateur indiquant la fin du cycle de fonctionnement du scanner.

findings

Tableau d’objets de recherche. Chaque objet de résultat contient les champs suivants :

Champ de résultats

Description

event_id

Identificateur unique de l’événement.

finding_identifier

Identificateur du résultat. Peut être utilisé à des fins de déduplication.

finding_severity

Niveau de gravité du résultat.

at_risk_entities

Tableau d’objets d’entité à risque. Chaque entité contient entity_detail, entity_id, entity_name et entity_object_type. Ce champ peut être exclu ou tronqué.

total_at_risk_count

Nombre total d’entités à risque. Ce champ peut être exclu.

metadata

Métadonnées supplémentaires. La structure dépend du scanner. Ce champ peut être exclu.

note

Une note indiquant si la liste des entités à risque a été tronquée. Ce champ n’est présent que lorsqu’une troncation se produit pour respecter les contraintes de limite de taille. Si elle est tronquée, vous pouvez récupérer la liste complète des entités à risque en interrogeant les résultats du Centre de confiance.

Résoudre les problèmes de notification

Si les notifications ne sont pas livrées comme prévu, vous pouvez interroger les éléments suivants pour examiner le flux d’envoi de notifications.

Pour vérifier les notifications envoyées via la plateforme de notification :

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

Pour vérifier les notifications de scanner envoyées via le Centre de confiance :

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