收集 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 读取,直到明确授予访问权限为止。为导出操作创建专用角色,并向其授予涵盖此文档导出视图的两个数据库角色。

  1. 登录 Snowflake 并打开工作表。
  2. 创建导出角色,并向其授予对账号使用情况视图的读取权限,如下所示:

    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;
    
  3. 创建导出所用的数据库、架构和仓库,并按如下方式向角色授予这些对象:

    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 用户。

创建 Cloud Storage 存储桶

  1. 前往 Google Cloud 控制台。
  2. 选择您的项目或创建一个新项目。
  3. 在导航菜单中,依次前往 Cloud Storage > 存储桶。
  4. 点击创建存储分区。
  5. 提供以下配置详细信息:

    设置 值
    为存储桶命名 输入一个全局唯一的名称(例如 snowflake-activity-logs)
    位置类型 根据您的需求进行选择(区域级、双区域级、多区域级)
    位置 选择位置(例如 us-central1)
    存储类别 标准(建议用于频繁访问的日志)
    访问权限控制 均匀(推荐)
    保护工具 可选:启用对象版本控制或保留政策
  6. 点击创建。

为 Snowflake 创建自定义 Cloud Storage 角色

  1. 在 Google Cloud 控制台中,前往 IAM 和管理 > 角色。
  2. 点击 Create role。
  3. 提供以下配置详细信息:
    • 标题:输入 Snowflake Unload
    • ID:输入 snowflake_unload
    • 角色发布阶段:选择正式版
  4. 点击添加权限,然后添加以下权限:
    • storage.buckets.get
    • storage.objects.create
    • storage.objects.delete
    • storage.objects.list
  5. 点击创建。

为 Cloud Storage 创建 Snowflake 存储集成

  1. 在 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 替换为您的存储分区名称。
  2. 检索 Snowflake 为集成创建的服务账号,如下所示:

    DESC STORAGE INTEGRATION SECOPS_GCS_INT;
    
  3. 复制 STORAGE_GCP_SERVICE_ACCOUNT 属性的值。该值的格式如下:

    service-account-id@project1-123456.iam.gserviceaccount.com
    

向 Snowflake 服务账号授予对相应存储桶的访问权限

  1. 在 Google Cloud 控制台中,前往 Cloud Storage > 存储桶。
  2. 点击您创建的存储桶(例如 snowflake-activity-logs)。
  3. 前往权限标签页。
  4. 点击授予访问权限。
  5. 提供以下配置详细信息:
    • 添加主账号:粘贴 STORAGE_GCP_SERVICE_ACCOUNT 值
    • 分配角色:选择 Snowflake Unload
  6. 点击保存。

创建文件格式和外部临时存储区

  1. 在 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;
    

创建导出状态表

导出操作会跟踪在每个视图中读取了多少数据。如果没有该水印,每次运行都会重新导出整个视图,并且会再次提取相同的事件。

  1. 创建状态表并按如下方式为其提供初始数据:

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

创建导出过程

  1. 创建用于卸载两个视图并推进水位标记的程序,如下所示:

    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 将此情况记录为暂存区中重复数据的来源。

安排导出任务

  1. 按如下方式创建并启动任务:

    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;
    
  2. 运行一次任务以验证设置,而无需等待安排,如下所示:

    EXECUTE TASK SECOPS_EXPORT_TASK;
    
  3. 检查运行结果以及到达该阶段的文件,如下所示:

    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 存储桶中读取数据。您必须向此服务账号授予对您的存储桶的访问权限。

  1. 前往 SIEM 设置 > Feed。
  2. 点击添加新 Feed。
  3. 点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 Snowflake activity logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型。
  6. 选择 Snowflake 作为日志类型。
  7. 点击获取服务账号。
  8. 系统会显示一个唯一的服务账号电子邮件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. 复制此电子邮件地址,以便在下一步中使用。

  10. 点击下一步。

  11. 为以下输入参数指定值:

    • 存储桶网址:输入带有前缀路径的 Cloud Storage 存储桶 URI:

      gs://snowflake-activity-logs/snowflake/
      
    • 来源删除选项:根据您的偏好选择删除选项:

      • 永不删除文件:永不从源中删除文件(建议用于测试)。
      • 删除已转移的文件和空目录:在成功完成提取后,从来源位置删除文件和空目录。
    • 文件存在时间上限:包含在过去指定天数内修改过的文件(默认值为 180 天)

    • 资源命名空间:资源命名空间

    • 注入标签:要应用于此 Feed 中事件的标签

  12. 点击下一步。

  13. 在最终确定界面中查看新的 Feed 配置,然后点击提交。

向 Google SecOps 服务账号授予 IAM 权限

Google SecOps 服务账号需要拥有 Cloud Storage 存储桶的两个角色:Storage Object Viewer 用于读取日志对象,以及一个存储桶级角色用于读取存储桶元数据。

  1. 前往 Cloud Storage > 存储桶。
  2. 点击您的存储桶名称。
  3. 前往权限标签页。
  4. 点击授予访问权限。
  5. 提供以下配置详细信息:
    • 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址
    • 分配角色:选择以下两个角色:
      • Storage Object Viewer:读取日志对象。
      • Storage Legacy Bucket Reader:读取存储桶元数据。如果您选择了删除已转移的文件和空目录删除选项,请改为选择存储旧版存储桶写入者,该角色也会授予删除权限。
  6. 点击保存。

方法 2:Amazon S3 V2

如果日志必须存储在 Amazon S3 中,请使用此方法。除了存储集成和暂存区之外,Snowflake 端完全相同,因此方法 1 中的导出过程和任务可以原封不动地重复使用。

配置 Amazon S3 存储桶

  1. 按照以下用户指南创建 Amazon S3 存储桶:创建存储桶。
  2. 保存相应存储桶的名称和区域,以供日后参考。例如 snowflake-activity-logs。

配置 Snowflake AWS IAM 政策

  1. 登录 AWS 管理控制台。
  2. 搜索并选择 IAM。
  3. 选择账号设置。
  4. 在端点列表中的 Security Token Service (STS) 下,找到您的账号所在的 Snowflake 区域。
  5. 如果 STS 状态为“非活跃”,请将切换开关移至活跃。
  6. 选择政策。
  7. 选择创建政策。
  8. 在政策编辑器中,选择 JSON。
  9. 复制并粘贴以下政策,该政策会向 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/*"
                        ]
                    }
                }
            }
        ]
    }
    
  10. 点击下一步。

  11. 输入政策名称(例如 snowflake_access)和可选的说明。

  12. 点击创建政策。

配置 Snowflake AWS IAM 角色

  1. 在 IAM 中,选择 Roles。
  2. 点击 Create role。
  3. 选择 AWS account(AWS 账号)作为可信实体类型。
  4. 选择其他 AWS 账号。
  5. 在账号 ID 字段中,暂时输入您自己的 AWS 账号 ID。您稍后可以修改信任关系,并向 Snowflake 授予访问权限。
  6. 选择需要外部 ID 选项。
  7. 输入占位 ID,例如 0000。您稍后会将其替换为存储集成功能的外部 ID。
  8. 点击下一步。
  9. 选择您之前创建的 IAM 政策。
  10. 点击下一步。
  11. 输入角色名称和说明。
  12. 点击 Create role。
  13. 在角色摘要页面上,复制并保存角色 ARN 值。

为 Amazon S3 创建 Snowflake 存储集成

  1. 在 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。
  2. 按如下方式检索 Snowflake 为集成创建的 AWS 身份:

    DESC INTEGRATION SECOPS_S3_INT;
    
  3. 复制并保存以下属性的值,如下所示:

    • STORAGE_AWS_IAM_USER_ARN
    • STORAGE_AWS_EXTERNAL_ID

向 Snowflake IAM 用户授予对相应存储桶的访问权限

  1. 前往 AWS 管理控制台。
  2. 依次选择 IAM > 角色。
  3. 选择您之前创建的角色。
  4. 选择信任关系标签页。
  5. 点击修改信任政策。
  6. 使用 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>"
                    }
                }
            }
        ]
    }
    
  7. 点击更新政策。

创建文件格式、暂存对象和导出对象

  1. 在 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;
    
  2. 完全按照方法 1 中的说明,在创建导出状态表、创建导出过程和安排导出任务部分中创建状态表、过程和任务。这些语句按名称引用阶段,因此无需更改。

为 Google SecOps 配置 AWS IAM

  1. 登录 AWS 管理控制台。
  2. 按照以下用户指南创建用户:创建 IAM 用户。
  3. 选择创建的用户。
  4. 选择安全凭证标签页。
  5. 在访问密钥部分中,点击创建访问密钥。
  6. 选择第三方服务作为用例。
  7. 点击下一步。
  8. 可选:添加说明标记。
  9. 点击创建访问密钥。
  10. 点击下载 .csv 文件以保存访问密钥和密钥,供日后参考。
  11. 点击完成。
  12. 选择权限标签页。
  13. 在权限政策部分中,点击添加权限。
  14. 选择添加权限。
  15. 选择直接附加政策。
  16. 搜索并选择 AmazonS3FullAccess 政策。
  17. 点击下一步。
  18. 点击添加权限。

在 Google SecOps 中配置 Feed 以注入 Snowflake 日志

  1. 前往 SIEM 设置 > Feed。
  2. 点击添加新 Feed。
  3. 在下一页上,点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 Snowflake activity logs)。
  5. 选择 Amazon S3 V2 作为来源类型。
  6. 选择 Snowflake 作为日志类型。
  7. 点击下一步。
  8. 为以下输入参数指定值,如下所示:

    • S3 URI:s3://snowflake-activity-logs/snowflake/
    • 来源删除选项:根据您的偏好选择删除选项
    • 文件存在时间上限:包含在过去指定天数内修改过的文件(默认值为 180 天)
    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥
    • 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥
    • 资源命名空间:资源命名空间
    • 注入标签:要应用于此 Feed 中事件的标签
  9. 点击下一步。

  10. 在最终确定界面中查看新的 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

更新日志

查看相应解析器的更新日志

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。