如何导出Snowflake日志

如何导出Snowflake日志

SOC Prime Team
SOC Prime Team linkedin icon 关注

“Snowflake 日志”意指两种情况,导出方式对两者相同。可以是您的团队存储在 Snowflake 表中的安全数据。或者它可能是 Snowflake 自己的审计记录,如 LOGIN_HISTORY 和 QUERY_HISTORY 的 SNOWFLAKE.ACCOUNT_USAGE 视图。对于小量数据,使用 SnowSQL 以 JSON 输出运行查询。对于更大的数据,使用 FILE_FORMAT = (TYPE = JSON) 更新现有 stage 并使用 COPY INTO 卸载,然后用 GET 下载文件。

Snowflake 自己的日志在 2024 年引起了很多关注,当时攻击者利用被盗凭证登录到未强制执行 MFA 的客户账户。登录和查询历史记录现在是调查中的标准要求。Prime Core 具有超过 24,000 个独特的检测规则,映射到 676 个 MITRE ATT&CK 技术。下面是如何获取数据、清理数据,以及在 LogTotal 中免费调查数据的方法。

开始之前

访问 ACCOUNT_USAGE. 默认情况下,只有 ACCOUNTADMIN 可以读取这些视图。其他角色需要在 SNOWFLAKE 数据库或其数据库角色上授予 IMPORTED PRIVILEGES 权限。

延迟和保留。 ACCOUNT_USAGE 视图保存一年的历史记录,但可能会延迟几个小时。对于没有延迟的最近七天,可以使用 INFORMATION_SCHEMA.LOGIN_HISTORY 表函数作为替代。

仓库。 查询和卸载需要运行的仓库,并且会消耗积分。按时间过滤。

选项 1:使用 JSON 输出的 SnowSQL(小批量)

snowsql -q "SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
            WHERE EVENT_TIMESTAMP >= '2026-10-19' AND EVENT_TIMESTAMP < '2026-10-20'"
  -o output_format=json -o friendly=false -o timing=false > sf_logins_1019.json

jq -c '.[]' sf_logins_1019.json > sf_logins_1019.jsonl

选项 2:卸载到 stage(大批量导出)

COPY INTO @~/exports/login_history_1019/
FROM (
  SELECT OBJECT_CONSTRUCT(*)
  FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
  WHERE EVENT_TIMESTAMP >= '2026-10-19' AND EVENT_TIMESTAMP < '2026-10-20'
)
FILE_FORMAT = (TYPE = JSON COMPRESSION = NONE)
OVERWRITE = TRUE;

JSON 卸载需要一个列,这就是查询将每行包装在 OBJECT_CONSTRUCT(*) 中的原因。该函数会省略 NULL 字段。然后从您的用户阶段(@~)下载:

GET @~/exports/login_history_1019/ file:///tmp/sf_export/;

并用 cat /tmp/sf_export/* > sf_logins_1019.jsonl 将文件合并。您的安全表可以使用相同的模式。替换表名称及其时间戳列。

在登录历史中寻找什么

注意失败的登录(IS_SUCCESS = ‘NO’)以及没有第二因素的密码登录(SECOND_AUTHENTICATION_FACTOR 为空)。记录来自未知客户端 IP 和客户端类型的登录。然后跟踪这些会话到 QUERY_HISTORY 以查看读取了什么。

在 LogTotal 上上传、清理和审核

  1. 上传。 打开 logtotal.com 并拖入 .jsonl 文件。
  2. 清理。 
  3. 审核。 

当出现问题时

症状可能的原因Fix
对象不存在或未授权访问 ACCOUNT_USAGE角色缺少对 SNOWFLAKE 数据库的访问权限请求 IMPORTED PRIVILEGES 或数据库角色
今天的登录缺失ACCOUNT_USAGE 延迟使用 INFORMATION_SCHEMA.LOGIN_HISTORY 查找最近的事件
COPY INTO 关于列的错误JSON 卸载需要一个列用 OBJECT_CONSTRUCT(*) 包装行
JSON 中缺少字段OBJECT_CONSTRUCT 会省略 NULL 值预期结果;缺失意味着 NULL
GET 失败没有从 SnowSQL 或 Snowflake CLI 运行GET 从客户端运行,而不是从网页 UI

FAQ

我可以在网页界面上完成这项工作吗?

查询可以。网页界面下载不是 JSON 格式。上述客户端路线可以为您提供 JSON 行。

Snowflake 事件表呢?

事件表保存来自您自己功能和应用程序的日志和跟踪。像导出任何表一样导出它们。

加入 SOC Prime 的 Detection as Code 平台 以提高对与您的业务最相关的威胁的可见性。为了帮助您开始并带来即时价值,现在与 SOC Prime 专家预约会议。