Snowflakeログをエクスポートする方法

Snowflakeログをエクスポートする方法

SOC Prime Team
SOC Prime Team linkedin icon フォローする

「Snowflake ログ」は、2 つのことを意味し、どちらの場合もエクスポートは同じように機能します。それはチームが Snowflake テーブルに保存するセキュリティデータである場合もあれば、Snowflake 自体の監査トレイル、たとえば LOGIN_HISTORY や QUERY_HISTORY などの SNOWFLAKE.ACCOUNT_USAGE ビューである場合もあります。小規模なデータ取得の場合は、SnowSQL で JSON 出力を使用してクエリを実行します。それ以上のサイズの場合は、FILE_FORMAT = (TYPE = JSON) を使用してステージに COPY INTO し、GET を使用してファイルをダウンロードします。

Snowflake 自体のログは、2024 年に多くの注目を集めました。攻撃者が盗んだ資格情報を使用して、MFA を強制していない顧客アカウントにログインしたためです。ログインとクエリ履歴は現在、調査での標準的な要求となっています。Prime Core には、676 の MITRE ATT&CK テクニックにマッピングされた 24,000 を超えるユニークな検出ルールがあります。以下は、データを取得し、無害化し、LogTotal で無料で調査する方法です。

始める前に

アクセス ACCOUNT_USAGE. デフォルトでは、これらのビューを読むことができるのは ACCOUNTADMIN のみです。他の役割は、SNOWFLAKE データベースまたはそのいずれかのデータベースロールに IMPORTED PRIVILEGES 付与が必要です。

レイテンシーと保持期間。 ACCOUNT_USAGE ビューは 1 年分の履歴を保持していますが、数時間の遅延があります。遅延のない過去 7 日間の情報は、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: ステージへのアンロード(大規模なエクスポート)

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 アンロードには 1 つの列が必要です行を OBJECT_CONSTRUCT(*) でラップします
JSON にフィールドが欠落OBJECT_CONSTRUCT は NULL 値をドロップします想定内; 欠如は NULL を意味します
GET が失敗SnowSQL または Snowflake CLI から実行されていませんGET はクライアントから実行され、Web UI からではありません

FAQ

Web インターフェースでこれを実行できますか?

クエリはできます。Web インターフェースからのダウンロードは JSON ではありません。上記のクライアントルートで JSON ラインが得られます。

Snowflake のイベントテーブルについてはどうですか?

イベントテーブルには、自分の関数やアプリのログやトレースが保持されます。それらを他のテーブルと同じようにエクスポートします。

SOC PrimeのDetection as Codeプラットフォームに参加し ビジネスに最も関連性のある脅威に対する可視性を向上させましょう。開始して即座に価値をもたらすためには、今すぐSOC Primeの専門家とのミーティングを予約してください。