Trust Center 发现结果的程序化通知

Trust Center 扫描器 会在客户账户中运行,以发现安全违规行为或检测潜在威胁并将其记录为发现结果。发现结果会自动显示在 Snowsight 中。Trust Center 管理员还可以 配置通知,以便拥有经过验证的电子邮件地址的用户以电子邮件形式接收有关发现结果的通知。

此预览版新增了对 Trust Center 发现结果的其他通知方式支持,例如 Webhook(PagerDuty、Slack、Microsoft Teams)和队列(Amazon SNS、Azure 事件网格、Google Pub/Sub)。通知会由特定事件触发,例如生成发现结果时。将通知集成与 Trust Center 结合使用后,您可以通过客户配置的 PagerDuty 服务、SNS 主题或其他终端,在不依赖 Snowsight 的情况下接收通知。

有关更多信息,请参阅 CREATE NOTIFICATION INTEGRATION

为 Trust Center 发现结果配置通知集成

要为 Trust Center 配置通知集成,请执行以下步骤:

  1. 创建通知集成

  2. 授予对通知集成的访问权限

  3. 配置扫描器的通知设置

  4. 运行扫描器

  5. 解释通知有效负载

  6. 对通知问题进行故障排除

创建通知集成

要使 Trust Center 能够向第三方系统发送通知,请运行 CREATE NOTIFICATION INTEGRATION 命令。

备注

仅支持出站通知集成。

有关更多信息,请参阅 CREATE NOTIFICATION INTEGRATION

以下示例展示了如何创建通知集成:

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

PagerDuty Webhook

以下示例创建了一个依赖于密钥的 Webhook。

备注

Trust Center 会以 JSON 格式的通知输出填充 SNOWFLAKE_WEBHOOK_MESSAGE。请相应配置通知集成,以正确处理这些内容。

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

授予对集成的访问权限

要使 Trust Center 能够使用集成发送通知,请授予 SNOWFLAKE 应用程序在通知集成上的 USAGE 权限。例如:

GRANT USAGE ON INTEGRATION test_pagerduty_int TO APPLICATION snowflake;

如果集成依赖于密钥(例如 PagerDuty Webhook 集成密钥),请向 SNOWFLAKE 应用程序授予以下附加权限:

  • 密钥的 READ 权限

  • 包含密钥的数据库的 USAGE 权限

  • 包含密钥的模式的 USAGE 权限

例如:

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;

配置扫描器的通知设置

您必须为每个扫描器或扫描器包定义触发 Webhook 通知的发现结果。NOTIFICATION_INTEGRATION 配置包含此定义。要为扫描器或扫描器包设置 NOTIFICATION_INTEGRATION 配置,请使用 SET_CONFIGURATION() 存储过程。配置值是包含 JSON 对象数组的字符串。每个对象指定以下内容:

描述

INTEGRATION_NAME

要使用的通知集成的名称。

SEVERITY_THRESHOLD

触发通知的发现结果的最低严重性级别。有效值为 LOWMEDIUMHIGHCRITICAL。仅针对等于或高于此严重性级别的发现结果发送通知。

INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA

可选。当设置为 TRUE 时,通知将包含实体详细信息,例如用户名和 IP 地址。默认为 FALSE。仅当您接受在 Snowflake 账户之外发送敏感账户信息时,才启用此参数。

以下示例为 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'
);

以下示例为扫描器包内的特定扫描器 (CIS_BENCHMARKS_CIS1_1) 设置通知配置:

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

您可以为同一个扫描器或扫描器包配置多个通知集成。以下示例配置 CIS_BENCHMARKS 扫描器包,以便 Azure 事件网格集成接收 CRITICAL 发现结果的通知,PagerDuty 集成接收 HIGHCRITICAL 发现结果的通知,且 AWS SNS 集成接收任何严重性级别的发现结果通知:

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

要移除扫描器的通知配置,请调用 UNSET_CONFIGURATION 存储过程:

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

运行扫描器

Trust Center 支持 基于计划的扫描器事件驱动的扫描器。设置配置后,您可以按需运行扫描器,或等待扫描器按其计划运行或由事件触发。

备注

  • 如果事件驱动的扫描器未检测到任何发现结果,则不会发送通知。

  • 仅当达到或超过严重性阈值时,才会针对扫描器发现结果发送通知集成通知。

要手动触发扫描器,请使用以下方法之一:

  • Snowsight:导航到 Trust Center > Manage Scanners,选择扫描器的三点菜单,然后选择 Run Scanner

    有关更多信息,请参阅 按需运行扫描器包

  • SQL:调用 EXECUTE_SCANNER 存储过程。例如:

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

解释通知输出

当 Trust Center 扫描器运行并产生满足配置严重性阈值的发现结果时,通知消息包含类似于以下内容的 JSON 对象:

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

备注

以上仅为示例。实际有效负载因配置的通知集成而异。仅当启用 INCLUDE_AT_RISK_ENTITIES_AND_FINDING_METADATA 时,通知消息中才会包含 at_risk_entitiesmetadata 字段。

该 JSON 对象包含以下键值对:

描述

scanner_name

生成发现结果的扫描器名称。

scanner_package_name

包含该扫描器的扫描器包名称。

scanner_package_short_description

扫描器包的简短描述。

scanner_short_description

扫描器的简短描述。

scanner_finish_time_unix_timestamp_ms

扫描器运行完成时的 Unix 时间戳(以毫秒为单位)。

scanner_finish_time_formatted

扫描器运行完成时的人类可读格式日期和时间。

findings

发现结果对象的数组。每个发现结果对象包含以下字段。

发现结果字段

描述

event_id

事件的唯一标识符。

finding_identifier

发现结果的标识符。可用于删除重复项。

finding_severity

发现结果的严重性级别。

at_risk_entities

风险实体对象的数组。每个实体包含 entity_detailentity_identity_nameentity_object_type。此字段可能会被排除或截断。

total_at_risk_count

风险实体的总数。此字段可能会被排除。

metadata

其他元数据。结构取决于扫描器。此字段可能会被排除。

note

关于风险实体列表是否已被截断的注释。仅当为了满足大小限制约束而发生截断时,此字段才会出现。如果已被截断,您可以通过查询 Trust Center 发现结果来检索风险实体的完整列表。

对通知问题进行故障排除

如果通知未按预期送达,您可以查询以下内容以检查通知发送流程。

要检查通过通知平台发送的通知,请执行以下操作:

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

要检查通过 Trust Center 发送的扫描器通知,请执行以下操作:

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