감사 로그란?
Databricks의 감사 로그(Audit Logs) 는 플랫폼에서 발생하는 모든 사용자 활동과 시스템 이벤트를 기록합니다. “누가, 언제, 무엇을, 어디서” 했는지를 추적할 수 있어 보안 모니터링, 규정 준수, 사고 조사에 필수적입니다.💡 기본 개념은 보안 개요의 “감사 로그” 섹션에서 소개했습니다. 이 문서에서는 감사 테이블의 구조, 실전 쿼리, 대시보드 구축을 상세히 다룹니다.
system.access.audit 테이블 구조
감사 로그는system.access.audit 시스템 테이블에 저장됩니다.
주요 컬럼
| 컬럼 | 타입 | 설명 |
|---|---|---|
| event_time | TIMESTAMP | 이벤트 발생 시각 |
| event_date | DATE | 이벤트 발생 날짜 (파티션 키) |
| workspace_id | BIGINT | 이벤트가 발생한 워크스페이스 ID |
| service_name | STRING | 서비스 이름 (예: notebook, clusters, unityCatalog) |
| action_name | STRING | 수행된 작업 (예: runCommand, create, delete) |
| user_identity | STRUCT | 사용자 정보 (이메일, IP 등) |
| user_identity.email | STRING | 작업을 수행한 사용자/SP의 이메일 |
| source_ip_address | STRING | 요청 출발 IP 주소 |
| request_params | MAP | 요청 파라미터 (테이블 이름, 쿼리 등) |
| response | STRUCT | 응답 정보 (상태 코드, 에러 메시지) |
| response.status_code | INT | HTTP 응답 코드 |
| response.error_message | STRING | 에러 메시지 (실패 시) |
| audit_level | STRING | 감사 수준 (ACCOUNT_LEVEL 또는 WORKSPACE_LEVEL) |
주요 service_name 값
| service_name | 설명 |
|---|---|
accounts | 계정 관리 (사용자 추가, 그룹 변경) |
clusters | 클러스터 생성, 시작, 종료 |
notebook | 노트북 생성, 실행, 수정 |
jobs | Job 생성, 실행, 스케줄 |
unityCatalog | UC 객체 관리 (테이블, 권한 등) |
databrickssql | SQL 웨어하우스 쿼리 실행 |
iamRole | IAM 관련 이벤트 |
secrets | Secret 접근 |
주요 감사 쿼리
1. 로그인 실패 이벤트
2. 데이터 접근 이력
3. 권한 변경 추적
4. 비정상 접근 패턴 탐지
5. 클러스터 생성/삭제 이력
6. Secret 접근 이력
7. 야간/주말 비정상 활동
감사 대시보드 구축
핵심 위젯 구성
감사 대시보드에 포함할 핵심 위젯은 다음과 같습니다.| 위젯 | 쿼리 목적 | 시각화 유형 |
|---|---|---|
| 일별 이벤트 추이 | 전체 감사 이벤트 수 추이 | 라인 차트 |
| 로그인 실패 현황 | 실패한 인증 시도 | 숫자 카운터 + 테이블 |
| 서비스별 활동 | 서비스별 이벤트 분포 | 파이 차트 |
| Top 활동 사용자 | 가장 활발한 사용자 | 바 차트 |
| 권한 변경 로그 | 최근 GRANT/REVOKE | 테이블 |
| 비정상 접근 | 야간/과다 접근 | 테이블 + 알림 |
일별 이벤트 추이 쿼리
서비스별 활동 분포
알림 설정
Databricks SQL 알림(Alert)을 설정하여 보안 이벤트를 실시간 감지할 수 있습니다.알림 1: 로그인 실패 급증
알림 2: 관리자 권한 변경
알림 3: 대량 데이터 다운로드
감사 로그 보존 정책
| 항목 | 설명 |
|---|---|
| 기본 보존 기간 | 시스템 테이블은 365일간 데이터를 보존합니다 |
| 장기 보존 | 규제 요건에 따라 별도 테이블에 복제하여 장기 보존합니다 |
| 외부 SIEM | Splunk, Sentinel 등 SIEM 도구로 감사 로그를 전송할 수 있습니다 |
쿼리 성능 최적화
감사 테이블은 대규모 데이터를 포함하므로, 쿼리 성능을 위해 다음 사항을 지켜야 합니다.| 원칙 | 설명 |
|---|---|
| event_date 필터 필수 | event_date 파티션 키를 항상 WHERE 절에 포함합니다 |
| service_name 필터 | 특정 서비스만 조회하면 스캔 범위가 줄어듭니다 |
| LIMIT 사용 | 탐색적 쿼리에는 LIMIT을 설정합니다 |
| 집계 우선 | 상세 조회 전 COUNT/GROUP BY로 규모를 파악합니다 |
모범 사례
| 원칙 | 설명 |
|---|---|
| 대시보드 구축 | 핵심 보안 지표를 시각화하는 감사 대시보드를 운영합니다 |
| 알림 설정 | 로그인 실패, 권한 변경 등 주요 이벤트에 알림을 설정합니다 |
| 장기 보존 | 규제 요건에 따라 감사 로그를 장기 보존합니다 |
| 정기 리뷰 | 월간 보안 리뷰에서 감사 로그를 분석합니다 |
| SIEM 연동 | 기존 보안 도구(Splunk, Sentinel)와 연동합니다 |
| event_date 필터 | 쿼리 시 반드시 날짜 필터를 포함합니다 |
정리
| 핵심 개념 | 설명 |
|---|---|
| system.access.audit | 모든 감사 이벤트가 저장되는 시스템 테이블입니다 |
| service_name | 이벤트가 발생한 서비스를 식별합니다 |
| action_name | 수행된 작업을 식별합니다 |
| user_identity | 누가 작업을 수행했는지 기록합니다 |
| 알림 | SQL Alert로 보안 이벤트를 실시간 감지합니다 |
| 장기 보존 | 규제 요건에 따라 별도 테이블에 복제합니다 |