收集 Snowflake 日志
本文档介绍了如何将 Snowflake 日志注入到 Google Security Operations。您可以使用两种方法配置提取:Cloud Storage V2(推荐)或 Amazon S3 V2。这两种方法在 Snowflake 端使用相同的机制:一个预定任务将账号使用情况数据卸载到外部暂存区,而 Google SecOps 通过 Feed 读取导出的文件。
Snowflake 是一个云数据平台,可将账号活动记录存储在 SNOWFLAKE.ACCOUNT_USAGE 架构中。LOGIN_HISTORY 视图会记录身份验证尝试,包括客户端 IP 地址、身份验证因素和失败原因。QUERY_HISTORY 视图会记录账号中执行的每条语句,包括用户、角色、仓库和触及的对象。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 拥有 Snowflake 访问权限,并具有可创建存储集成(默认情况下只有
ACCOUNTADMIN具有此权限)、数据库、仓库、暂存区和任务的角色 - 对于 Cloud Storage V2:已启用 Cloud Storage API 的项目,以及创建存储桶、创建 Identity and Access Management (IAM) 角色和管理存储桶 IAM 政策的权限 Google Cloud
- 对于 Amazon S3 V2:具有 AWS 特权访问权限,可创建 S3 存储桶、IAM 政策、IAM 角色和 IAM 用户
授予对 Snowflake 账号使用情况数据的访问权限
SNOWFLAKE.ACCOUNT_USAGE 视图只能由 ACCOUNTADMIN 读取,直到明确授予访问权限为止。为导出操作创建专用角色,并向其授予涵盖此文档导出视图的两个数据库角色。
- 登录 Snowflake 并打开工作表。
创建导出角色,并向其授予对账号使用情况视图的读取权限,如下所示:
USE ROLE ACCOUNTADMIN; CREATE ROLE IF NOT EXISTS SECOPS_EXPORTER; GRANT DATABASE ROLE SNOWFLAKE.SECURITY_VIEWER TO ROLE SECOPS_EXPORTER; GRANT DATABASE ROLE SNOWFLAKE.GOVERNANCE_VIEWER TO ROLE SECOPS_EXPORTER;创建导出所用的数据库、架构和仓库,并按如下方式向角色授予这些对象:
CREATE DATABASE IF NOT EXISTS SECOPS_EXPORT; CREATE SCHEMA IF NOT EXISTS SECOPS_EXPORT.ACTIVITY; CREATE WAREHOUSE IF NOT EXISTS SECOPS_EXPORT_WH WITH WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE INITIALLY_SUSPENDED = TRUE; GRANT USAGE ON DATABASE SECOPS_EXPORT TO ROLE SECOPS_EXPORTER; GRANT USAGE, CREATE STAGE, CREATE TABLE, CREATE PROCEDURE, CREATE TASK, CREATE FILE FORMAT ON SCHEMA SECOPS_EXPORT.ACTIVITY TO ROLE SECOPS_EXPORTER; GRANT USAGE, OPERATE ON WAREHOUSE SECOPS_EXPORT_WH TO ROLE SECOPS_EXPORTER; GRANT EXECUTE TASK ON ACCOUNT TO ROLE SECOPS_EXPORTER; GRANT ROLE SECOPS_EXPORTER TO USER <YOUR_USER>;- 将
<YOUR_USER>替换为导出操作的 Snowflake 用户。
- 将
方法 1:Cloud Storage V2(推荐)
创建 Cloud Storage 存储桶
- 前往 Google Cloud 控制台。
- 选择您的项目或创建一个新项目。
- 在导航菜单中,依次前往 Cloud Storage > 存储桶。
- 点击创建存储分区。
提供以下配置详细信息:
设置 值 为存储桶命名 输入一个全局唯一的名称(例如 snowflake-activity-logs)位置类型 根据您的需求进行选择(区域级、双区域级、多区域级) 位置 选择位置(例如 us-central1)存储类别 标准(建议用于频繁访问的日志) 访问权限控制 均匀(推荐) 保护工具 可选:启用对象版本控制或保留政策 点击创建。
为 Snowflake 创建自定义 Cloud Storage 角色
- 在 Google Cloud 控制台中,前往 IAM 和管理 > 角色。
- 点击 Create role。
- 提供以下配置详细信息:
- 标题:输入
Snowflake Unload - ID:输入
snowflake_unload - 角色发布阶段:选择正式版
- 标题:输入
- 点击添加权限,然后添加以下权限:
storage.buckets.getstorage.objects.createstorage.objects.deletestorage.objects.list
点击创建。
为 Cloud Storage 创建 Snowflake 存储集成
在 Snowflake 工作表中,按如下方式创建存储集成:
USE ROLE ACCOUNTADMIN; CREATE STORAGE INTEGRATION SECOPS_GCS_INT TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'GCS' ENABLED = TRUE STORAGE_ALLOWED_LOCATIONS = ('gcs://snowflake-activity-logs/snowflake/'); GRANT USAGE ON INTEGRATION SECOPS_GCS_INT TO ROLE SECOPS_EXPORTER;- 将
snowflake-activity-logs替换为您的存储分区名称。
- 将
检索 Snowflake 为集成创建的服务账号,如下所示:
DESC STORAGE INTEGRATION SECOPS_GCS_INT;复制
STORAGE_GCP_SERVICE_ACCOUNT属性的值。该值的格式如下:service-account-id@project1-123456.iam.gserviceaccount.com
向 Snowflake 服务账号授予对相应存储桶的访问权限
- 在 Google Cloud 控制台中,前往 Cloud Storage > 存储桶。
- 点击您创建的存储桶(例如
snowflake-activity-logs)。 - 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:粘贴
STORAGE_GCP_SERVICE_ACCOUNT值 - 分配角色:选择 Snowflake Unload
- 添加主账号:粘贴
- 点击保存。
创建文件格式和外部临时存储区
在 Snowflake 工作表中,创建文件格式和写入存储桶的暂存区,如下所示:
USE ROLE SECOPS_EXPORTER; USE SCHEMA SECOPS_EXPORT.ACTIVITY; CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT TYPE = JSON; CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE URL = 'gcs://snowflake-activity-logs/snowflake/' STORAGE_INTEGRATION = SECOPS_GCS_INT FILE_FORMAT = SECOPS_JSON_FORMAT;
创建导出状态表
导出操作会跟踪在每个视图中读取了多少数据。如果没有该水印,每次运行都会重新导出整个视图,并且会再次提取相同的事件。
创建状态表并按如下方式为其提供初始数据:
CREATE TABLE IF NOT EXISTS SECOPS_EXPORT_STATE ( VIEW_NAME STRING NOT NULL, LAST_EXPORTED TIMESTAMP_LTZ NOT NULL, WINDOW_END TIMESTAMP_LTZ ); INSERT INTO SECOPS_EXPORT_STATE (VIEW_NAME, LAST_EXPORTED) SELECT 'LOGIN_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP()) UNION ALL SELECT 'QUERY_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP());
创建导出过程
创建用于卸载两个视图并推进水位标记的程序,如下所示:
CREATE OR REPLACE PROCEDURE SECOPS_EXPORT_ACTIVITY() RETURNS STRING LANGUAGE SQL AS $$ BEGIN UPDATE SECOPS_EXPORT_STATE SET WINDOW_END = DATEADD('hour', -3, CURRENT_TIMESTAMP()); COPY INTO @SECOPS_EXPORT_STAGE/login_history/ FROM ( SELECT OBJECT_CONSTRUCT( 'application', 'snowflake', 'log_type', 'login_history', 'EVENT_TIMESTAMP', EVENT_TIMESTAMP, 'EVENT_TYPE', EVENT_TYPE, 'USER_NAME', USER_NAME, 'CLIENT_IP', CLIENT_IP, 'REPORTED_CLIENT_TYPE', REPORTED_CLIENT_TYPE, 'REPORTED_CLIENT_VERSION', REPORTED_CLIENT_VERSION, 'FIRST_AUTHENTICATION_FACTOR', FIRST_AUTHENTICATION_FACTOR, 'SECOND_AUTHENTICATION_FACTOR', SECOND_AUTHENTICATION_FACTOR, 'IS_SUCCESS', IS_SUCCESS, 'ERROR_CODE', ERROR_CODE, 'ERROR_MESSAGE', ERROR_MESSAGE) FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY WHERE EVENT_TIMESTAMP > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY') AND EVENT_TIMESTAMP <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY') ) FILE_FORMAT = (TYPE = JSON) INCLUDE_QUERY_ID = TRUE; UPDATE SECOPS_EXPORT_STATE SET LAST_EXPORTED = WINDOW_END WHERE VIEW_NAME = 'LOGIN_HISTORY'; COPY INTO @SECOPS_EXPORT_STAGE/query_history/ FROM ( SELECT OBJECT_CONSTRUCT( 'application', 'snowflake', 'log_type', 'query_history', 'START_TIME', START_TIME, 'END_TIME', END_TIME, 'QUERY_ID', QUERY_ID, 'QUERY_TYPE', QUERY_TYPE, 'EXECUTION_STATUS', EXECUTION_STATUS, 'ERROR_MESSAGE', ERROR_MESSAGE, 'USER_NAME', USER_NAME, 'ROLE_NAME', ROLE_NAME, 'WAREHOUSE_NAME', WAREHOUSE_NAME, 'WAREHOUSE_SIZE', WAREHOUSE_SIZE, 'DATABASE_NAME', DATABASE_NAME, 'SCHEMA_NAME', SCHEMA_NAME, 'SESSION_ID', SESSION_ID, 'BYTES_SCANNED', BYTES_SCANNED, 'ROWS_PRODUCED', ROWS_PRODUCED, 'TOTAL_ELAPSED_TIME', TOTAL_ELAPSED_TIME) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE START_TIME > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY') AND START_TIME <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY') ) FILE_FORMAT = (TYPE = JSON) INCLUDE_QUERY_ID = TRUE; UPDATE SECOPS_EXPORT_STATE SET LAST_EXPORTED = WINDOW_END WHERE VIEW_NAME = 'QUERY_HISTORY'; RETURN 'Export completed'; END; $$;
该程序中的每个元素都有其存在的原因:
- 窗口关闭时间比当前时间晚 3 小时。Snowflake 会以最长 2 小时的延迟时间填充
LOGIN_HISTORY,并以最长 45 分钟的延迟时间填充QUERY_HISTORY,因此,如果窗口现在结束,则会跳过视图尚未物化的行。因此,事件会在发生后大约三个小时到达 Google SecOps。缩短延迟时间会牺牲完整性来换取新鲜度。 WINDOW_END会在卸载之前写入表中,因此COPY INTO语句使用的值与写回LAST_EXPORTED的值相同。在第二个语句中重新计算当前时间会跳过两者之间发生的所有事情。- 每个
LAST_EXPORTED更新都在其自己的COPY INTO语句之后运行。如果卸载失败,该过程会停止,水印会保持在原来的位置,并且下一次运行会重复该窗口,而不是跳过它。 INCLUDE_QUERY_ID = TRUE会向每个文件名添加 UUID。如果没有此参数,未卸载的文件会被命名为data_0_0_0,并且重复导出到同一路径会发生冲突,Snowflake 将此情况记录为暂存区中重复数据的来源。
安排导出任务
按如下方式创建并启动任务:
CREATE OR REPLACE TASK SECOPS_EXPORT_TASK WAREHOUSE = SECOPS_EXPORT_WH SCHEDULE = 'USING CRON 0 * * * * UTC' AS CALL SECOPS_EXPORT_ACTIVITY(); ALTER TASK SECOPS_EXPORT_TASK RESUME;运行一次任务以验证设置,而无需等待安排,如下所示:
EXECUTE TASK SECOPS_EXPORT_TASK;检查运行结果以及到达该阶段的文件,如下所示:
SELECT NAME, STATE, ERROR_MESSAGE, SCHEDULED_TIME FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME => 'SECOPS_EXPORT_TASK')) ORDER BY SCHEDULED_TIME DESC LIMIT 5; LIST @SECOPS_EXPORT_STAGE;
检索 Google SecOps 服务账号
Google SecOps 使用唯一的服务账号从您的 Cloud Storage 存储桶中读取数据。您必须向此服务账号授予对您的存储桶的访问权限。
- 前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Snowflake activity logs)。 - 选择 Google Cloud Storage V2 作为来源类型。
- 选择 Snowflake 作为日志类型。
- 点击获取服务账号。
系统会显示一个唯一的服务账号电子邮件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com复制此电子邮件地址,以便在下一步中使用。
点击下一步。
为以下输入参数指定值:
存储桶网址:输入带有前缀路径的 Cloud Storage 存储桶 URI:
gs://snowflake-activity-logs/snowflake/
来源删除选项:根据您的偏好选择删除选项:
- 永不删除文件:永不从源中删除文件(建议用于测试)。
- 删除已转移的文件和空目录:在成功完成提取后,从来源位置删除文件和空目录。
文件存在时间上限:包含在过去指定天数内修改过的文件(默认值为 180 天)
资源命名空间:资源命名空间
注入标签:要应用于此 Feed 中事件的标签
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
向 Google SecOps 服务账号授予 IAM 权限
Google SecOps 服务账号需要拥有 Cloud Storage 存储桶的两个角色:Storage Object Viewer 用于读取日志对象,以及一个存储桶级角色用于读取存储桶元数据。
- 前往 Cloud Storage > 存储桶。
- 点击您的存储桶名称。
- 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址
- 分配角色:选择以下两个角色:
- Storage Object Viewer:读取日志对象。
- Storage Legacy Bucket Reader:读取存储桶元数据。如果您选择了删除已转移的文件和空目录删除选项,请改为选择存储旧版存储桶写入者,该角色也会授予删除权限。
- 点击保存。
方法 2:Amazon S3 V2
如果日志必须存储在 Amazon S3 中,请使用此方法。除了存储集成和暂存区之外,Snowflake 端完全相同,因此方法 1 中的导出过程和任务可以原封不动地重复使用。
配置 Amazon S3 存储桶
- 按照以下用户指南创建 Amazon S3 存储桶:创建存储桶。
- 保存相应存储桶的名称和区域,以供日后参考。例如
snowflake-activity-logs。
配置 Snowflake AWS IAM 政策
- 登录 AWS 管理控制台。
- 搜索并选择 IAM。
- 选择账号设置。
- 在端点列表中的 Security Token Service (STS) 下,找到您的账号所在的 Snowflake 区域。
- 如果 STS 状态为“非活跃”,请将切换开关移至活跃。
- 选择政策。
- 选择创建政策。
- 在政策编辑器中,选择 JSON。
复制并粘贴以下政策,该政策会向 Snowflake 授予将数据卸载到某个存储桶和文件夹路径所需的权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::snowflake-activity-logs/snowflake/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::snowflake-activity-logs", "Condition": { "StringLike": { "s3:prefix": [ "snowflake/*" ] } } } ] }点击下一步。
输入政策名称(例如
snowflake_access)和可选的说明。点击创建政策。
配置 Snowflake AWS IAM 角色
- 在 IAM 中,选择 Roles。
- 点击 Create role。
- 选择 AWS account(AWS 账号)作为可信实体类型。
- 选择其他 AWS 账号。
- 在账号 ID 字段中,暂时输入您自己的 AWS 账号 ID。您稍后可以修改信任关系,并向 Snowflake 授予访问权限。
- 选择需要外部 ID 选项。
- 输入占位 ID,例如
0000。您稍后会将其替换为存储集成功能的外部 ID。 - 点击下一步。
- 选择您之前创建的 IAM 政策。
- 点击下一步。
- 输入角色名称和说明。
- 点击 Create role。
- 在角色摘要页面上,复制并保存角色 ARN 值。
为 Amazon S3 创建 Snowflake 存储集成
在 Snowflake 工作表中,按如下方式创建存储集成:
USE ROLE ACCOUNTADMIN; CREATE STORAGE INTEGRATION SECOPS_S3_INT TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'S3' ENABLED = TRUE STORAGE_AWS_ROLE_ARN = '<IAM_ROLE_ARN>' STORAGE_ALLOWED_LOCATIONS = ('s3://snowflake-activity-logs/snowflake/'); GRANT USAGE ON INTEGRATION SECOPS_S3_INT TO ROLE SECOPS_EXPORTER;- 将
<IAM_ROLE_ARN>替换为您保存的角色 ARN。
- 将
按如下方式检索 Snowflake 为集成创建的 AWS 身份:
DESC INTEGRATION SECOPS_S3_INT;复制并保存以下属性的值,如下所示:
- STORAGE_AWS_IAM_USER_ARN
- STORAGE_AWS_EXTERNAL_ID
向 Snowflake IAM 用户授予对相应存储桶的访问权限
- 前往 AWS 管理控制台。
- 依次选择 IAM > 角色。
- 选择您之前创建的角色。
- 选择信任关系标签页。
- 点击修改信任政策。
使用
DESC INTEGRATION输出值更新政策文档,如下所示:{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<STORAGE_AWS_IAM_USER_ARN>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<STORAGE_AWS_EXTERNAL_ID>" } } } ] }点击更新政策。
创建文件格式、暂存对象和导出对象
在 Snowflake 工作表中,创建文件格式和写入存储桶的暂存区,如下所示:
USE ROLE SECOPS_EXPORTER; USE SCHEMA SECOPS_EXPORT.ACTIVITY; CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT TYPE = JSON; CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE URL = 's3://snowflake-activity-logs/snowflake/' STORAGE_INTEGRATION = SECOPS_S3_INT FILE_FORMAT = SECOPS_JSON_FORMAT;完全按照方法 1 中的说明,在创建导出状态表、创建导出过程和安排导出任务部分中创建状态表、过程和任务。这些语句按名称引用阶段,因此无需更改。
为 Google SecOps 配置 AWS IAM
- 登录 AWS 管理控制台。
- 按照以下用户指南创建用户:创建 IAM 用户。
- 选择创建的用户。
- 选择安全凭证标签页。
- 在访问密钥部分中,点击创建访问密钥。
- 选择第三方服务作为用例。
- 点击下一步。
- 可选:添加说明标记。
- 点击创建访问密钥。
- 点击下载 .csv 文件以保存访问密钥和密钥,供日后参考。
- 点击完成。
- 选择权限标签页。
- 在权限政策部分中,点击添加权限。
- 选择添加权限。
- 选择直接附加政策。
- 搜索并选择 AmazonS3FullAccess 政策。
- 点击下一步。
- 点击添加权限。
在 Google SecOps 中配置 Feed 以注入 Snowflake 日志
- 前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Snowflake activity logs)。 - 选择 Amazon S3 V2 作为来源类型。
- 选择 Snowflake 作为日志类型。
- 点击下一步。
为以下输入参数指定值,如下所示:
- S3 URI:
s3://snowflake-activity-logs/snowflake/ - 来源删除选项:根据您的偏好选择删除选项
- 文件存在时间上限:包含在过去指定天数内修改过的文件(默认值为 180 天)
- 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥
- 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥
- 资源命名空间:资源命名空间
- 注入标签:要应用于此 Feed 中事件的标签
- S3 URI:
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
column4_label |
additional.fields |
已合并 |
column7_label |
additional.fields |
已合并 |
first_authentication_factor_label |
additional.fields |
已合并 |
host_list |
additional.fields |
已合并 |
query_text_label |
additional.fields |
已合并 |
query_type_label |
additional.fields |
已合并 |
roleIds_list |
additional.fields |
已合并 |
roleNames_list |
additional.fields |
已合并 |
rolecount_label |
additional.fields |
已合并 |
user_count_label |
additional.fields |
已合并 |
has_principal |
extensions.auth.type |
已映射:true → AUTHTYPE_UNSPECIFIED |
START_TIME |
metadata.event_timestamp |
解析为 yyyy-MM-dd HH:mm:ss.SSS Z |
column2 |
metadata.event_timestamp |
解析为 yyyy-MM-dd HH:mm:ss.SSS Z |
column20 |
metadata.event_timestamp |
解析为 yyyy-MM-dd HH:mm:ss.SSS Z |
ts |
metadata.event_timestamp |
解析为 ISO8601 |
event_type |
metadata.event_type |
直接映射 |
has_principal |
metadata.event_type |
映射:true → NETWORK_CONNECTION、true → STATUS_UPDATE、true → USER_LOGIN |
has_principal_user |
metadata.event_type |
已映射:true → USER_UNCATEGORIZED |
column10 |
metadata.product_event_type |
直接映射 |
QUERY_ID |
metadata.product_log_id |
直接映射 |
column1 |
metadata.product_log_id |
直接映射 |
column6 |
metadata.product_version |
直接映射 |
SESSION_ID |
network.http.session_id |
直接映射 |
RECEIVED_BYTES |
network.received_bytes |
已重命名/已映射 |
BYTES_SENT_OVER_THE_NETWORK |
network.sent_bytes |
已重命名/已映射 |
SENT_BYTES |
network.sent_bytes |
已重命名/已映射 |
APPLICATION |
principal.application |
直接映射 |
data.user_name |
principal.asset.hostname |
直接映射 |
CLIENT_IP |
principal.asset.ip |
已合并 |
IP |
principal.asset.ip |
已合并 |
column5 |
principal.asset.ip |
已合并 |
SOURCE_REGION |
principal.cloud.availability_zone |
直接映射 |
SOURCE_CLOUD |
principal.cloud.environment |
映射:(?i)azure → MICROSOFT_AZURE、(?i)amazon → AMAZON_WEB_SERVICES、(?i)google … |
data.user_name |
principal.hostname |
直接映射 |
CLIENT_IP |
principal.ip |
已合并 |
IP |
principal.ip |
已合并 |
column5 |
principal.ip |
已合并 |
OS |
principal.platform |
映射:(?i)Linux → LINUX、(?i)windows → WINDOWS、(?i)mac/ios → MAC |
OS_VERSION |
principal.platform_version |
直接映射 |
SOURCE_CLOUD_label |
principal.resource.attribute.labels |
已合并 |
roles |
principal.user.attribute.roles |
已合并 |
data.role_name |
principal.user.role_name |
直接映射 |
column9 |
principal.user.user_display_name |
直接映射 |
USER_NAME |
principal.user.userid |
直接映射 |
column10 |
principal.user.userid |
直接映射 |
column3 |
principal.user.userid |
直接映射 |
EXECUTION_STATUS |
security_result.action |
已映射:(?i)success → action,(?i)fail → security_result_action_block |
STATUS |
security_result.action |
已映射:(?i)success → action,(?i)fail → action |
action |
security_result.action |
已合并 |
security_result_action_block |
security_result.action |
已合并 |
OCSP_MODE |
security_result.action_details |
直接映射 |
column11 |
security_result.action_details |
直接映射 |
column3 |
security_result.action_details |
直接映射 |
BYTES_DELETED_label |
security_result.detection_fields |
已合并 |
BYTES_READ_FROM_RESULT_label |
security_result.detection_fields |
已合并 |
BYTES_SCANNED_label |
security_result.detection_fields |
已合并 |
BYTES_SPILLED_TO_LOCAL_STORAGE_label |
security_result.detection_fields |
已合并 |
BYTES_SPILLED_TO_REMOTE_STORAGE_label |
security_result.detection_fields |
已合并 |
BYTES_WRITTEN_TO_RESULT_label |
security_result.detection_fields |
已合并 |
BYTES_WRITTEN_label |
security_result.detection_fields |
已合并 |
CHILD_QUERIES_WAIT_TIME_label |
security_result.detection_fields |
已合并 |
CLUSTER_NUMBER_label |
security_result.detection_fields |
已合并 |
COMPILATION_TIME_label |
security_result.detection_fields |
已合并 |
CREDITS_USED_CLOUD_SERVICES_label |
security_result.detection_fields |
已合并 |
DATABASE_ID_label |
security_result.detection_fields |
已合并 |
DATABASE_NAME_label |
security_result.detection_fields |
已合并 |
END_TIME_label |
security_result.detection_fields |
已合并 |
ERROR_MESSAGE_label |
security_result.detection_fields |
已合并 |
EXECUTION_TIME_label |
security_result.detection_fields |
已合并 |
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS_label |
security_result.detection_fields |
已合并 |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES_label |
security_result.detection_fields |
已合并 |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS_label |
security_result.detection_fields |
已合并 |
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES_label |
security_result.detection_fields |
已合并 |
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS_label |
security_result.detection_fields |
已合并 |
INBOUND_DATA_TRANSFER_BYTES_label |
security_result.detection_fields |
已合并 |
IS_CLIENT_GENERATED_STATEMENT_label |
security_result.detection_fields |
已合并 |
LIST_EXTERNAL_FILES_TIME_label |
security_result.detection_fields |
已合并 |
OUTBOUND_DATA_TRANSFER_BYTES_label |
security_result.detection_fields |
已合并 |
PARTITIONS_SCANNED_label |
security_result.detection_fields |
已合并 |
PARTITIONS_TOTAL_label |
security_result.detection_fields |
已合并 |
PERCENTAGE_SCANNED_FROM_CACHE_label |
security_result.detection_fields |
已合并 |
QUERY_ACCELERATION_BYTES_SCANNED_label |
security_result.detection_fields |
已合并 |
QUERY_ACCELERATION_PARTITIONS_SCANNED_label |
security_result.detection_fields |
已合并 |
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR_label |
security_result.detection_fields |
已合并 |
QUERY_HASH_VERSION_label |
security_result.detection_fields |
已合并 |
QUERY_HASH_label |
security_result.detection_fields |
已合并 |
QUERY_LOAD_PERCENT_label |
security_result.detection_fields |
已合并 |
QUERY_PARAMETERIZED_HASH_VERSION_label |
security_result.detection_fields |
已合并 |
QUERY_TAG_label |
security_result.detection_fields |
已合并 |
QUERY_TYPE_label |
security_result.detection_fields |
已合并 |
QUEUED_OVERLOAD_TIME_label |
security_result.detection_fields |
已合并 |
QUEUED_PROVISIONING_TIME_label |
security_result.detection_fields |
已合并 |
QUEUED_REPAIR_TIME_label |
security_result.detection_fields |
已合并 |
RELEASE_VERSION_label |
security_result.detection_fields |
已合并 |
ROLE_TYPE_label |
security_result.detection_fields |
已合并 |
ROWS_DELETED_label |
security_result.detection_fields |
已合并 |
ROWS_INSERTED_label |
security_result.detection_fields |
已合并 |
ROWS_PRODUCED_label |
security_result.detection_fields |
已合并 |
ROWS_UNLOADED_label |
security_result.detection_fields |
已合并 |
ROWS_UPDATED_label |
security_result.detection_fields |
已合并 |
ROWS_WRITTEN_TO_RESULT_label |
security_result.detection_fields |
已合并 |
SCHEMA_ID_label |
security_result.detection_fields |
已合并 |
SCHEMA_NAME_label |
security_result.detection_fields |
已合并 |
TOTAL_ELAPSED_TIME_label |
security_result.detection_fields |
已合并 |
TRANSACTION_BLOCKED_TIME_label |
security_result.detection_fields |
已合并 |
TRANSACTION_ID_label |
security_result.detection_fields |
已合并 |
WAREHOUSE_ID_label |
security_result.detection_fields |
已合并 |
WAREHOUSE_NAME_label |
security_result.detection_fields |
已合并 |
WAREHOUSE_SIZE_label |
security_result.detection_fields |
已合并 |
WAREHOUSE_TYPE_label |
security_result.detection_fields |
已合并 |
authentication_factor_label |
security_result.detection_fields |
已合并 |
column4_label |
security_result.detection_fields |
已合并 |
column6_label |
security_result.detection_fields |
已合并 |
column7_label |
security_result.detection_fields |
已合并 |
column8_label |
security_result.detection_fields |
已合并 |
event_id_label |
security_result.detection_fields |
已合并 |
event_type_label |
security_result.detection_fields |
已合并 |
is_success_label |
security_result.detection_fields |
已合并 |
python_compiler_label |
security_result.detection_fields |
已合并 |
python_runtime_label |
security_result.detection_fields |
已合并 |
python_version_label |
security_result.detection_fields |
已合并 |
reported_client_type_label |
security_result.detection_fields |
已合并 |
reported_client_version_label |
security_result.detection_fields |
已合并 |
tracing_label |
security_result.detection_fields |
已合并 |
EXECUTION_STATUS |
security_result.summary |
直接映射 |
STATUS |
security_result.summary |
直接映射 |
column17 |
security_result.summary |
直接映射 |
TARGET_REGION |
target.cloud.availability_zone |
直接映射 |
TARGET_CLOUD |
target.cloud.environment |
映射:(?i)azure → MICROSOFT_AZURE、(?i)amazon → AMAZON_WEB_SERVICES、(?i)google … |
TARGET_CLOUD_label |
target.resource.attribute.labels |
已合并 |
column2_label |
target.resource.attribute.labels |
已合并 |
column7_label |
target.resource.attribute.labels |
已合并 |
USER_NAME |
target.user.userid |
直接映射 |
column4 |
target.user.userid |
直接映射 |
| 不适用 | extensions.auth.type |
常量:AUTHTYPE_UNSPECIFIED |
| 不适用 | metadata.event_type |
常量:NETWORK_CONNECTION |
| 不适用 | metadata.product_name |
常量:SNOWFLAKE |
| 不适用 | metadata.vendor_name |
常量:SNOWFLAKE |
| 不适用 | principal.cloud.environment |
常量:MICROSOFT_AZURE |
| 不适用 | principal.platform |
常量:LINUX |
| 不适用 | target.cloud.environment |
常量:MICROSOFT_AZURE |