“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에서 업로드, 정리 및 검토
- 업로드. 열기 logtotal.com 그리고 .jsonl 파일을 드롭합니다.
- 정리.
- 검토.
문제가 발생했을 때
| 증상 | 가능한 원인 | 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 이벤트 테이블은 어떻게 하나요?
이벤트 테이블은 자체 함수 및 앱에서의 로그와 추적을 보관합니다. 모든 테이블과 동일한 방법으로 내보내십시오.