使用 Trust Center 扩展

要将解决方案与 Trust Center 集成,安全合作伙伴可以使用 Snowflake Native App Framework 创建提供一个或多个附加扫描器包的应用程序。这些应用程序称为 Trust Center 扩展

您可以创建 Trust Center 扩展来定制安全、隐私、治理和合规性解决方案,以更好地满足您的要求,然后在您的组织中共享这些扩展。您还可以创建可更广泛使用的扩展,并在特定 Snowflake 账户或 Snowflake Marketplace 上将其列出。有关更多信息,请参阅 开发 Trust Center 扩展

用户可以发现、安装和管理包含扫描器包的第三方扩展。有关更多信息,请参阅 安装 Trust Center 扩展

访问控制要求

要创建和管理 Trust Center 扩展,具有 ACCOUNTADMIN 角色 的用户必须向您的角色授予以下权限:

  • SNOWFLAKE.TRUST_CENTER_ADMIN 应用程序角色

  • CREATE APPLICATION PACKAGE

  • CREATE APPLICATION

开发 Trust Center 扩展

您可以使用扫描器包开发和部署 Trust Center 扩展。您可以使用 Native App 版本控制 对 Trust Center 扩展进行版本控制:扩展还使用 Native App 权限模型 访问任何数据或元数据,例如客户账户中的表或 Account Usage 视图。

先决条件

在使用扫描器包开发扩展之前,请满足以下先决条件:

  • 了解如何开发 Native App

  • 了解如何创建和使用 Snowflake 存储过程

  • 创建或识别可充当扩展提供商账户的 Snowflake 账户。每个 Native App 都需要一个提供商账户。

创建扫描器包清单和扫描器

第 1 步:创建扩展清单文件

创建一个清单文件,其中包含有关各种扫描器包和扫描器的信息和元数据:

  1. 创建清单文件。

    清单文件具有以下要求:

    • 清单文件的名称必须为 tc_extension_manifest.yml

    • tc_extension_manifest.yml 文件必须存在于 Native App manifest.yml 文件所在的命名暂存区上目录结构的根目录中。

    清单文件列出了扫描器包属性以及扫描器包中包含的所有扫描器。

    对清单文件使用以下定义:

    manifest_version: '2.0'
    scanner_packages:
    - id: ''
      name: ''
      short_description: ''
      description: ''
      scanners:
        - id: ''
          name: ''
          short_description: ''
          description: ''
          type: 'VULNERABILITY'
          callback:
            schema: ''
            name: ''
            version: ''
    
    Copy

    清单文件具有以下属性:

    属性

    描述

    最大字符数

    manifest_version

    目前,仅 2.0 有效。

    不适用

    scanner_packages.id

    扫描器包的唯一标识符,提供商必须在扫描器包的生命周期内保留该标识符。仅支持 ASCII 字母数字和下划线字符。客户应用于扫描器包的所有配置都将使用此 ID 持久保存在 Trust Center 中。

    25

    scanner_packages.name

    扫描器包的名称。

    30

    scanner_packages.short_description

    扫描器包的简短描述。

    150

    scanner_packages.description

    扫描器包的描述。

    700

    scanner_packages.scanners.id

    扫描器的唯一标识符,提供商必须在扫描器的生命周期内保留该标识符。仅支持 ASCII 字母数字和下划线字符。客户应用到扫描器的所有配置都将使用此 ID 持久保存在 Trust Center 中。

    25

    scanner_packages.scanners.name

    扫描器的名称。

    30

    scanner_packages.scanners.short_description

    扫描器的简短描述。

    150

    scanner_packages.scanners.description

    扫描器的详细描述。

    1,500

    scanner_packages.scanners.type

    扫描器的类型。目前仅支持 VULNERABILITY

    ---

    scanner_packages.scanners.callback

    扫描器的回调部分。每个扫描器都必须有一个指定其 schemanameversioncallback 部分。

    不适用

    scanner_packages.scanners.callback.schema

    存储过程的架构。架构必须存在于 setup_script.sql 文件中。有关此文件的更多信息,请参阅 第 3 步:创建扩展

    不适用

    scanner_packages.scanners.callback.name

    存储过程的名称。以下要求适用于存储过程:

    • 目前,它必须命名为 scan

    • 此处定义的存储过程名称必须存在于 callback.schema 中指定的架构下的 setup_script.sql 文件中。

    不适用

    scanner_packages.scanners.callback.version

    存储过程的版本。目前仅支持 1.0

    不适用

以下示例显示了清单文件的内容:

manifest_version: '2.0'
scanner_packages:
  - id: 'se_extension'
    name: 'Security Extension'
    short_description: 'Enhances security features and capabilities.'
    description: 'This extension provides additional security features and capabilities to the platform.'
    scanners:
      - id: 'es_check'
        name: 'NA event sharing check'
        short_description: 'Checks for NA event sharing configurations.'
        description: 'This scanner checks for event sharing configurations in the North America region.'
        type: 'VULNERABILITY'
        callback:
          schema: 'security_essentials_na_consumer_es_check'
          name: 'scan'
          version: '1.0'
      - id: 'se_mfa'
        name: 'MFA Required for Users'
        short_description: 'Ensures that MFA is required for all users.'
        description: 'This scanner checks that Multi-Factor Authentication (MFA) is enforced for all users in the system.'
        type: 'VULNERABILITY'
        callback:
          schema: 'security_essentials_mfa_required_for_users_check'
          name: 'scan'
          version: '1.0'
      - id: 'se_client'
        name: 'Client Security'
        short_description: 'Ensures that client security best practices are followed.'
        description: 'This scanner checks that client security best practices are enforced for all clients in the system.'
        type: 'VULNERABILITY'
        callback:
          schema: 'security_essentials_client_security'
          name: 'scan'
          version: '1.0'
      - id: 'cis_1_4'
        name: 'Extension CIS 1_4'
        short_description: 'Checks for compliance with CIS Benchmark 1.4.'
        description: 'This scanner checks for compliance with the CIS Benchmark 1.4, ensuring that security best practices are followed.'
        type: 'VULNERABILITY'
        callback:
          schema: 'security_essentials_cis1_4'
          name: 'scan'
          version: '1.0'
      - id: 'cis_3_1'
        name: 'Extension CIS 3_1'
        short_description: 'Checks for compliance with CIS Benchmark 3.1.'
        description: 'This scanner checks for compliance with the CIS Benchmark 3.1, ensuring that security best practices are followed.'
        type: 'VULNERABILITY'
        callback:
          schema: 'security_essentials_cis3_1'
          name: 'scan'
          version: '1.0'
Copy

第 2 步:创建扫描器

Create a versioned schema and a stored procedure that implements the scanner logic.

如果扫描器包包含多个扫描器,则为每个扫描器完成以下步骤,并对每个扫描器使用不同的版本化架构:

  1. 创建版本化架构来托管扫描器逻辑。

    该架构的名称必须与 扩展清单文件 中为扫描器指定的架构名称一致。

    例如,以下 SQL 语句创建了一个名为 security_essentials_mfa_required_for_users 的版本化架构:

    CREATE OR ALTER VERSIONED SCHEMA security_essentials_mfa_required_for_users;
    
    Copy
  2. 创建一个实施扫描器逻辑的存储过程。

    以下示例在 security_essentials_mfa_required_for_users 架构中创建了一个名为 scan 的存储过程:

    CREATE OR REPLACE PROCEDURE security_essentials_mfa_required_for_users.scan(
        run_id VARCHAR)
      RETURNS TABLE(
        risk_id VARCHAR,
        risk_name VARCHAR,
        total_at_risk_count NUMBER,
        scanner_type VARCHAR,
        risk_description VARCHAR,
        suggested_action VARCHAR,
        impact VARCHAR,
        severity VARCHAR,
        at_risk_entities ARRAY
      )
      LANGUAGE SQL
      AS
      $$
        -- Scanning logic --
      $$;
    
    Copy

    验证存储过程是否为每种严重性和风险 ID 组合返回恰好一行。

    返回的表必须具有以下列:

    类型

    描述

    risk_id

    VARCHAR

    风险的标识符。

    risk_name

    VARCHAR

    风险的名称。

    total_at_risk_count

    NUMBER

    扫描器面临风险的实体总数。对于扫描器未检测到任何违规的情况,该值为 0。面临风险的实体的最大数量为 1,000,并且 数组 中所有值的最大组合大小为 128 MB。

    scanner_type

    VARCHAR

    目前,仅支持 VULNERABILITY 扫描器类型。

    risk_description

    VARCHAR

    风险的描述。

    suggested_action

    VARCHAR

    建议的补救措施。

    impact

    VARCHAR

    不解决风险可能产生的后果。

    severity

    VARCHAR

    风险的严重性级别。可能的值为 LOW、MEDIUM、HIGH 和 CRITICAL。

    at_risk_entities

    OBJECT 值的 ARRAY

    数组中的 OBJECT 值具有以下结构:

    [
      {
        "entity_id": <id>,
        "entity_name": "<name>",
        "entity_object_type": "<type>",
        "entity_detail": {
          ..., -- custom data
        }
      },
      ...
    ]
    

    OBJECT 值包含以下键值对:

    • entity_id – 可选字段,对应面临风险的实体的 ID。

    • entity_name – 必填字段,对应面临风险的实体的名称。

    • entity_object_type – 必填字段,对应面临风险的实体的类型。例如:APPLICATIONTASK, NETWORK_POLICYSECURITY_INTEGRATIONROLEPROCEDUREQUERYDRIVERPARAMETERTABLESTAGEDATA_MASKING_POLICYROW_ACCESS_POLICY

    • entity_detail – 描述实体的自定义数据。

    数组的最大大小为 128 MB。

    对于扫描器未检测到任何违规的情况,该值为空列表。

第 3 步:创建扩展

扩展 将扫描器包捆绑在 Native App 中,使其可供 Trust Center 访问,并配置权限以允许 Trust Center 调用所需的存储过程。

要创建扩展,请完成以下步骤:

  1. 按照 Create the setup script 中的说明为扩展创建 setup_script.sql 文件。

    setup_script.sql 文件中,创建一个名为 trust_center_integration_role 的应用程序角色。

    然后,向该应用程序角色授予对 版本化架构和存储过程 的所需权限。

    以下示例展示了如何创建应用程序角色 trust_center_integration_role,然后授予所需的权限:

    CREATE APPLICATION ROLE IF NOT EXISTS trust_center_integration_role;
    
    GRANT USAGE ON SCHEMA security_essentials_mfa_required_for_users
      TO APPLICATION ROLE trust_center_integration_role;
    
    GRANT USAGE ON PROCEDURE security_essentials_mfa_required_for_users.scan(VARCHAR)
      TO APPLICATION ROLE trust_center_integration_role;
    
    Copy

    包中的每个扫描器都需要这些权限。

  2. 按照 为应用程序创建清单文件 中的说明为扩展创建 manifest.yml 文件。

    以下示例展示了 Trust Center 扩展的 manifest.yml 文件的内容:

    manifest_version: 1
    artifacts:
      setup_script: setup_script.sql
      readme: README.md
    privileges:
      - IMPORTED PRIVILEGES ON SNOWFLAKE DB:
        description: "Required access to SNOWFLAKE.ACCOUNT_USAGE views to scan for vulnerabilities"
    
    Copy
  3. 按照 Create and manage an application package 中的说明为扩展创建应用程序包。

  4. 按照 注册版本 中的说明注册应用程序包的版本。

    要确认应用程序包是否已注册版本,您可以运行 SHOW VERSIONS IN APPLICATION PACKAGE

  5. 按照 通过版本或补丁创建应用程序 中的说明创建基于注册版本的应用程序。

    要确认是否已创建应用程序对象,您可以运行 SHOW APPLICATIONS

第 4 步:授予权限

安装扩展后,通过完成以下步骤授予所需权限:

  1. 按照 使用 Snowsight 管理访问请求 中的说明授予扩展请求的权限。

  2. 要向 SNOWFLAKE 应用程序授予扩展的命名空间中的 trust_center_integration_role 应用程序角色,请运行 GRANT APPLICATION ROLE 命令:

    GRANT APPLICATION ROLE <extension_name>.trust_center_integration_role
      TO APPLICATION snowflake;
    
    Copy

    例如,要向 SNOWFLAKE 应用程序授予 tc_extension.trust_center_integration_role 应用程序角色,请运行以下命令:

    GRANT APPLICATION ROLE tc_extension.trust_center_integration_role
      TO APPLICATION snowflake;
    
    Copy

第 5 步:注册扩展

您可以通过调用以下存储过程来注册或取消注册扩展:

要向 Trust Center 注册扩展,请完成以下步骤:

  1. 切换到被授予 SNOWFLAKE.TRUST_CENTER_ADMIN 应用程序角色的角色。

  2. 调用 SNOWFLAKE.TRUST_CENTER.REGISTER_EXTENSION 存储过程。

    要查看有关扩展的详细信息,您可以运行 SHOW APPLICATIONS 命令。应用程序包或列表标识符位于 列中。

    例如,要注册已从名为 my_tc_package 的应用程序包安装的扩展 tc_extension,请调用存储过程:

    CALL SNOWFLAKE.TRUST_CENTER.REGISTER_EXTENSION(
      'APPLICATION PACKAGE',
      'my_tc_package',
      'tc_extension');
    
    Copy

    您可以通过查询 EXTENSIONS 视图 来显示有关已注册扩展的信息。

    备注

    要取消注册扩展,请调用 SNOWFLAKE.TRUST_CENTER.DEREGISTER_EXTENSION 存储过程。

  3. 确认扩展提供的扫描器包现在是否位于 Trust Center 扫描器包列表中,具体说明请参阅 查看可用的扫描器包

第 6 步:测试扩展

授予权限并启用扫描器包后,测试扩展并通过查询 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图检查扫描器生成的结果。如果扫描器运行失败,您可以检查 ERROR_CODEERROR_MESSAGE 来调试扫描器故障。

您还可以使用 DATA_SHARING_USAGE 架构 中的视图监控 Trust Center 扩展的遥测数据。例如,您可以通过查询 APPLICATION_STATE 视图 来查找扩展已安装的实例数,也可以通过查询 LISTING_ACCESS_HISTORY 视图 来监控使用者对扩展的使用情况。

安装 Trust Center 扩展

您可以发现、安装和管理包含扫描器包的第三方扩展。

安装和管理第三方扫描器包

第 1 步:发现并安装扩展

您可以发现并安装已发布到 Snowflake Marketplace 或使用私密列表共享的 Trust Center 扩展。Trust Center 扩展可以包含一个或多个扫描器包。

要发现并安装扩展,请按照以下步骤操作:

  1. 登录 Snowsight

  2. 切换到已被授予 SNOWFLAKE.TRUST_CENTER_ADMIN 应用程序角色的角色。

    有关授予此角色的更多信息,请参阅 所需权限

  3. 在导航菜单中,选择 Governance & security » Trust Center

  4. 选择 Manage scanners 选项卡。

  5. 要查看账户可用的扩展列表,请选择 Extensions

  6. 选择要安装的扩展。

    扩展的 Snowflake Marketplace 页面将打开。

  7. 要访问列表,请选择 Get

  8. 可选:对于 Application name,输入名称。

  9. 要安装扩展,请选择 Get

安装完成后,会出现 Snowsight 通知,并且系统会向与您的账户关联的电子邮件地址发送一封电子邮件。

有关安装 Native Apps 的更多信息,请参阅 以使用者身份使用和管理 Snowflake Native Apps

第 2 步:管理新的扫描器包

安装扩展时,您可以安装一个或多个扫描器包。要查看新安装的扫描器包,请完成以下步骤:

  1. 登录 Snowsight

  2. 切换到已被授予 SNOWFLAKE.TRUST_CENTER_ADMIN 应用程序角色的角色。

    有关授予此角色的更多信息,请参阅 所需权限

  3. 在导航菜单中,选择 Governance & security » Trust Center

  4. 选择 Manage scanners 选项卡。

    在扫描器包列表中,会显示每个新扫描器包的以下信息:

    • NAME – 新扫描器包的名称。

    • SOURCE – 您安装的扩展的名称。

    • SCANNERS – 扫描器包中启用和禁用的扫描器数。

    • STATUS – 扫描器包的状态。默认情况下,新安装的扫描器包处于禁用状态。

  5. 要启用新的扫描器包,请完成以下步骤:

    1. 在扫描器包列表中,选择扫描器包。

    2. 在扫描器包页面上,选择 Enable package

    3. 要授予新扫描器包所需的权限,请选择 Grant

    4. 选择 Enable

    对要启用的每个新扫描器包重复这些步骤。

您可以像管理 Trust Center 中的其他扫描器包一样管理新的扫描器包。例如,您可以计划或禁用新的扫描器包。有关更多信息,请参阅 管理扫描器包

您可以像管理其他扫描器一样管理新扫描器包中的扫描器。例如,您可以启用、禁用或计划扫描器。有关更多信息,请参阅 管理扫描器

您还可以直接监控和管理与扩展关联的 Native App。有关更多信息,请参阅 管理应用程序

您可以通过查询 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图来查看随扩展安装的扫描器包生成的结果。例如,以下查询返回随扩展安装的扫描器包的结果,该扩展具有 4486988721extension_id

SELECT * FROM snowflake.trust_center.findings WHERE extension_id = 4486988721;
Copy

要查找已注册扩展的标识符,请查询 EXTENSIONS 视图

有关 Trust Center 结果的更多信息,请参阅 Findings查看安全风险

扩展安装和注册故障排除

如果对 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图的查询在 COMPLETION_STATUS 列中返回 FAILED,则扫描器执行出现故障。扫描器出现故障的一个可能原因是未授予扩展所需的权限。确保已向扩展授予 第 4 步:授予权限 中所述的权限。

授予所需权限后,再次运行扫描器包以生成新的结果。如果对 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图的查询仍在 COMPLETION_STATUS 列中返回 FAILED,请联系 Snowflake 支持部门。

语言: 中文