Snowflake 로그를 내보내는 방법

Snowflake 로그를 내보내는 방법

SOC Prime Team
SOC Prime Team linkedin icon 팔로우

“Snowflake 로그”는 두 가지를 의미하며, 두 경우 모두 내보내기가 동일하게 작동합니다. 그것은 당신 팀이 Snowflake 테이블에 저장하는 보안 데이터일 수 있습니다. 또는 Snowflake 자체의 감사 로그, 즉 LOGIN_HISTORY와 QUERY_HISTORY와 같은 SNOWFLAKE.ACCOUNT_USAGE 뷰일 수 있습니다. 소규모 가져오기는 JSON 출력과 함께 SnowSQL에서 쿼리를 실행합니다. 더 큰 경우에는 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: SnowSQL과 JSON 출력 (소규모 가져오기)

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를 사용하세요
열에 대한 오류가 발생합니다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 전문가와의 회의를 예약하세요.