使用 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 步:创建扩展清单文件¶
创建一个清单文件,其中包含有关各种扫描器包和扫描器的信息和元数据:
创建清单文件。
清单文件具有以下要求:
清单文件的名称必须为
tc_extension_manifest.yml。tc_extension_manifest.yml文件必须存在于 Native Appmanifest.yml文件所在的命名暂存区上目录结构的根目录中。
清单文件列出了扫描器包属性以及扫描器包中包含的所有扫描器。
对清单文件使用以下定义:
manifest_version: '2.0' scanner_packages: - id: '' name: '' short_description: '' description: '' scanners: - id: '' name: '' short_description: '' description: '' type: 'VULNERABILITY' callback: schema: '' name: '' version: ''
清单文件具有以下属性:
属性
描述
最大字符数
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扫描器的回调部分。每个扫描器都必须有一个指定其
schema、name和version的callback部分。不适用
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'
第 2 步:创建扫描器¶
Create a versioned schema and a stored procedure that implements the scanner logic.
如果扫描器包包含多个扫描器,则为每个扫描器完成以下步骤,并对每个扫描器使用不同的版本化架构:
创建版本化架构来托管扫描器逻辑。
该架构的名称必须与 扩展清单文件 中为扫描器指定的架构名称一致。
例如,以下 SQL 语句创建了一个名为
security_essentials_mfa_required_for_users的版本化架构:CREATE OR ALTER VERSIONED SCHEMA security_essentials_mfa_required_for_users;
创建一个实施扫描器逻辑的存储过程。
以下示例在
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 -- $$;
验证存储过程是否为每种严重性和风险 ID 组合返回恰好一行。
返回的表必须具有以下列:
列
类型
描述
risk_idVARCHAR
风险的标识符。
risk_nameVARCHAR
风险的名称。
total_at_risk_countNUMBER
扫描器面临风险的实体总数。对于扫描器未检测到任何违规的情况,该值为
0。面临风险的实体的最大数量为 1,000,并且 数组 中所有值的最大组合大小为 128 MB。scanner_typeVARCHAR
目前,仅支持
VULNERABILITY扫描器类型。risk_descriptionVARCHAR
风险的描述。
suggested_actionVARCHAR
建议的补救措施。
impactVARCHAR
不解决风险可能产生的后果。
severityVARCHAR
风险的严重性级别。可能的值为 LOW、MEDIUM、HIGH 和 CRITICAL。
at_risk_entitiesOBJECT 值的 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– 必填字段,对应面临风险的实体的类型。例如:APPLICATION、TASK, NETWORK_POLICY、SECURITY_INTEGRATION、ROLE、PROCEDURE、QUERY、DRIVER、PARAMETER、TABLE、STAGE、DATA_MASKING_POLICY或ROW_ACCESS_POLICY。entity_detail– 描述实体的自定义数据。
数组的最大大小为 128 MB。
对于扫描器未检测到任何违规的情况,该值为空列表。
第 3 步:创建扩展¶
扩展 将扫描器包捆绑在 Native App 中,使其可供 Trust Center 访问,并配置权限以允许 Trust Center 调用所需的存储过程。
要创建扩展,请完成以下步骤:
按照 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;
包中的每个扫描器都需要这些权限。
按照 为应用程序创建清单文件 中的说明为扩展创建
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"
按照 Create and manage an application package 中的说明为扩展创建应用程序包。
按照 注册版本 中的说明注册应用程序包的版本。
要确认应用程序包是否已注册版本,您可以运行 SHOW VERSIONS IN APPLICATION PACKAGE。
按照 通过版本或补丁创建应用程序 中的说明创建基于注册版本的应用程序。
要确认是否已创建应用程序对象,您可以运行 SHOW APPLICATIONS。
第 4 步:授予权限¶
安装扩展后,通过完成以下步骤授予所需权限:
按照 使用 Snowsight 管理访问请求 中的说明授予扩展请求的权限。
要向 SNOWFLAKE 应用程序授予扩展的命名空间中的
trust_center_integration_role应用程序角色,请运行 GRANT APPLICATION ROLE 命令:GRANT APPLICATION ROLE <extension_name>.trust_center_integration_role TO APPLICATION snowflake;
例如,要向 SNOWFLAKE 应用程序授予
tc_extension.trust_center_integration_role应用程序角色,请运行以下命令:GRANT APPLICATION ROLE tc_extension.trust_center_integration_role TO APPLICATION snowflake;
第 5 步:注册扩展¶
您可以通过调用以下存储过程来注册或取消注册扩展:
要向 Trust Center 注册扩展,请完成以下步骤:
切换到被授予 SNOWFLAKE.TRUST_CENTER_ADMIN 应用程序角色的角色。
调用 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');
您可以通过查询 EXTENSIONS 视图 来显示有关已注册扩展的信息。
备注
要取消注册扩展,请调用 SNOWFLAKE.TRUST_CENTER.DEREGISTER_EXTENSION 存储过程。
确认扩展提供的扫描器包现在是否位于 Trust Center 扫描器包列表中,具体说明请参阅 查看可用的扫描器包。
第 6 步:测试扩展¶
授予权限并启用扫描器包后,测试扩展并通过查询 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图检查扫描器生成的结果。如果扫描器运行失败,您可以检查 ERROR_CODE 和 ERROR_MESSAGE 来调试扫描器故障。
您还可以使用 DATA_SHARING_USAGE 架构 中的视图监控 Trust Center 扩展的遥测数据。例如,您可以通过查询 APPLICATION_STATE 视图 来查找扩展已安装的实例数,也可以通过查询 LISTING_ACCESS_HISTORY 视图 来监控使用者对扩展的使用情况。
安装 Trust Center 扩展¶
您可以发现、安装和管理包含扫描器包的第三方扩展。
安装和管理第三方扫描器包¶
第 1 步:发现并安装扩展¶
您可以发现并安装已发布到 Snowflake Marketplace 或使用私密列表共享的 Trust Center 扩展。Trust Center 扩展可以包含一个或多个扫描器包。
要发现并安装扩展,请按照以下步骤操作:
切换到已被授予 SNOWFLAKE.TRUST_CENTER_ADMIN 应用程序角色的角色。
有关授予此角色的更多信息,请参阅 所需权限。
在导航菜单中,选择 Governance & security » Trust Center。
选择 Manage scanners 选项卡。
要查看账户可用的扩展列表,请选择 Extensions。
选择要安装的扩展。
扩展的 Snowflake Marketplace 页面将打开。
要访问列表,请选择 Get。
可选:对于 Application name,输入名称。
要安装扩展,请选择 Get。
安装完成后,会出现 Snowsight 通知,并且系统会向与您的账户关联的电子邮件地址发送一封电子邮件。
有关安装 Native Apps 的更多信息,请参阅 以使用者身份使用和管理 Snowflake Native Apps。
第 2 步:管理新的扫描器包¶
安装扩展时,您可以安装一个或多个扫描器包。要查看新安装的扫描器包,请完成以下步骤:
切换到已被授予 SNOWFLAKE.TRUST_CENTER_ADMIN 应用程序角色的角色。
有关授予此角色的更多信息,请参阅 所需权限。
在导航菜单中,选择 Governance & security » Trust Center。
选择 Manage scanners 选项卡。
在扫描器包列表中,会显示每个新扫描器包的以下信息:
NAME – 新扫描器包的名称。
SOURCE – 您安装的扩展的名称。
SCANNERS – 扫描器包中启用和禁用的扫描器数。
STATUS – 扫描器包的状态。默认情况下,新安装的扫描器包处于禁用状态。
要启用新的扫描器包,请完成以下步骤:
在扫描器包列表中,选择扫描器包。
在扫描器包页面上,选择 Enable package。
要授予新扫描器包所需的权限,请选择 Grant。
选择 Enable。
对要启用的每个新扫描器包重复这些步骤。
您可以像管理 Trust Center 中的其他扫描器包一样管理新的扫描器包。例如,您可以计划或禁用新的扫描器包。有关更多信息,请参阅 管理扫描器包。
您可以像管理其他扫描器一样管理新扫描器包中的扫描器。例如,您可以启用、禁用或计划扫描器。有关更多信息,请参阅 管理扫描器。
您还可以直接监控和管理与扩展关联的 Native App。有关更多信息,请参阅 管理应用程序。
您可以通过查询 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图来查看随扩展安装的扫描器包生成的结果。例如,以下查询返回随扩展安装的扫描器包的结果,该扩展具有 4486988721 的 extension_id:
SELECT * FROM snowflake.trust_center.findings WHERE extension_id = 4486988721;
要查找已注册扩展的标识符,请查询 EXTENSIONS 视图。
扩展安装和注册故障排除¶
如果对 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图的查询在 COMPLETION_STATUS 列中返回 FAILED,则扫描器执行出现故障。扫描器出现故障的一个可能原因是未授予扩展所需的权限。确保已向扩展授予 第 4 步:授予权限 中所述的权限。
授予所需权限后,再次运行扫描器包以生成新的结果。如果对 SNOWFLAKE.TRUST_CENTER.FINDINGS 视图的查询仍在 COMPLETION_STATUS 列中返回 FAILED,请联系 Snowflake 支持部门。