記錄、追蹤與稽核

Snowflake 管理、治理與協作

Emily Melhuish

Technical Curriculum Developer, Snowflake

稽核難題

  • 過去 90 天內誰取用了信用評分?
  • 指定清晨時段有哪些預存程序執行過?
  • 有登入來自公司網路以外嗎?
  • 問題提出前,紀錄就必須已存在

audit_icon.png

Snowflake 管理、治理與協作

什麼是 Event Tables?

  • 擷取由 Snowflake 物件發出的 log 與 trace 資料——包含預存程序、Snowpark 函式、UDFs
  • 建立方式如同一般資料表,之後用 ALTER_ACCOUNT 啟用
  • 從那刻起會自動寫入 log 與 trace 訊息
  • 用標準 SQL 查詢——不需外部記錄工具

event_table_simple.png

Snowflake 管理、治理與協作

日誌等級(Log Levels)

 

Level Description
TRACE 每次函式進入與離開——最細粒度
DEBUG 疑難排解細節
INFO 正常執行的里程碑——建議用於正式環境
WARN 未中止執行的非預期狀況
ERROR 失敗
FATAL 導致執行中止的嚴重失敗
Snowflake 管理、治理與協作

追蹤(Tracing)

  • 擷取多步驟流程的執行路徑
  • 顯示步驟之間的連結,而非僅個別訊息
  • 記錄每個步驟的順序與耗時
  • Trace 資料與 log 資料寫入同一個 event table

tracing_v2.png

Snowflake 管理、治理與協作

用 LOGIN_HISTORY 進行稽核

SELECT user_name,
       event_timestamp,
       client_ip,
       authentication_method,
       error_code,
       error_message
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE event_timestamp >= DATEADD('day', -90, CURRENT_TIMESTAMP())
  AND client_ip NOT LIKE '203.0.113.%'
ORDER BY event_timestamp DESC;
Snowflake 管理、治理與協作

用 QUERY_HISTORY 稽核

SELECT user_name,
       role_name,
       warehouse_name,
       query_text,
       start_time,
       end_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE start_time >= DATEADD('day', -90, CURRENT_TIMESTAMP())
  AND query_text ILIKE '%credit_scores%'
ORDER BY start_time DESC;
Snowflake 管理、治理與協作

完整的稽核軌跡

 

Source What it captures Audit question answered
Event table 預存程序、Snowpark 函式產生的日誌與追蹤 平台做了什麼?
LOGIN_HISTORY 每次登入嘗試:使用者、IP、方法、錯誤 誰從哪裡連進來?有失敗嗎?
QUERY_HISTORY 每個 SQL 陳述:使用者、角色、倉儲、查詢文字 碰觸了哪些資料?由誰執行?
Snowflake 管理、治理與協作

一起來練習吧!

Snowflake 管理、治理與協作

Preparing Video For Download...