Cloud Trail 로그를 Data Query를 통해 조회
Object Storage에 저장된 Cloud Trail 로그를 Data Catalog와 Data Query를 통해 분석, 조회하는 방법을 안내합니다.
- 예상 소요 시간: 30분
- 사전 준비 사항
- Cloud Trail 로그를 저장할 Object Storage 버킷 생성
시나리오 소개
이 튜토리얼에서는 Cloud Trail 로그를 Object Storage에 저장한 뒤, Data Catalog와 Data Query를 활용해 SQL 기반으로 로그를 조회하는 방법을 단계별로 안내합니다.
주요 내용은 다음과 같습니다.
- Cloud Trail 로그를 gz 파일 형식으로 Object Storage 버킷에 저장 설정
- Data Catalog에서 로그 버킷과 연결된 데이터베이스 생성
- Data Query에서 테이블을 생성하고 로그 데이터 조회
- (부록 1) 프로젝트 이벤트 쿼리 예시
- (부록 2) 도메인 이벤트 쿼리 예시
- (부록 3) 쿼리 시 참고를 위한 이벤트 로그 목록
시작하기 전에
Cloud Trail 로그를 Data Query로 조회하려면 Object Storage 버킷이 먼저 생성되어 있어야 합니다. Object Storage 버킷 생성 가이드를 참고하여 버킷을 준비한 후 아래 단계를 진행하세요.
시작하기
Step 1. Cloud Trail 로그 저장 활성화
Cloud Trail 로그가 Object Storage에 자동으로 저장되도록 Cloud Trail 로그 저장 기능 활성화 가이드를 참고하여 로그 저장 설정을 합니다.
Data Catalog와 Data Query에서 로그를 분석하려면 파일 확장자를 반드시 gz로 선택해야 합니다. Object Storage 버킷에 gzip, zip 파일이 함께 저장될 경우 오류가 발생할 수 있습니다.
Step 2. Data Catalog 설정
Data Catalog 서비스에서 카탈로그와, 로그가 저장되고 있는 버킷과 연결된 데이터베이스를 생성합니다.
-
카카오클라우드 콘솔 > Analytics > Data Catalog 메뉴로 이동합니다.
-
카탈로그 메뉴에서 [카탈로그 생성] 버튼을 클릭합니다.
-
카탈로그 생성 팝업창에서 아래 정보를 입력한 후, [생성] 버튼을 클릭합니다.
구분 설정값 유형 Standard 카탈로그 이름 카탈로그 이름 (예: catalog)VPC 설정 카탈로그에 해당하는 네트워크 선택 (VPC-서브넷당 1개만 생성 가능) -
생성한 카탈로그(
catalog)를 클릭하여 데이터베이스 목록에서 [데이터베이스 생성] 버튼을 클릭합니다. -
데이터베이스 생성 팝업창에서 아래 정보를 입력한 후, [생성] 버튼을 클릭합니다.
구분 설정값 유형 Standard 데이터베이스 카탈로그 위에서 생성한 catalog선택이름 데이터베이스 이름 (예: cloudtrail)경로 - s3 연결: 체크
- 버킷 이름: Object Storage 버킷 이름 입력
- 디렉터리:trail/project_event(프로젝트 이벤트) 또는trail/domain_event(도메인 이벤트)속성 (선택) - 설명 (선택) - 참고Object Storage에 Cloud Trail 이벤트는 지정된 버킷의
trail폴더 아래 다음 구조로 저장됩니다.trail/
├── project_event/
│ └── date_id=yyyy-mm-dd/
│ └── hour_id=hh/
└── domain_event/
└── date_id=yyyy-mm-dd/
└── hour_id=hh/프로젝트 이벤트와 도메인 이벤트를 모두 조회하려면 각 디렉터리에 대해 데이터베이스를 각각 생성해야 합니다. 위 5단계를 반복하여
trail/project_event와trail/domain_event경로로 데이터베이스를 하나씩 만드세요.자세한 내용은 Cloud Trail 로그 저장 관리를 참고하세요.
Step 3. Data Query 조회
Data Catalog에서 생성한 데이터베이스를 통해 테이블을 만들고 로그 데이터를 조회합니다.
-
카카오클라우드 콘솔 > Analytics > Data Query > 쿼리 편집기 메뉴로 이동합니다.
-
아래와 같이 데이터 원본과 데이터베이스를 선택합니다.
구분 설정값 데이터 원본 Data Catalog에서 생성한 카탈로그 catalog선택데이터베이스 Data Catalog에서 생성한 데이터베이스 cloudtrail선택 -
우측의 쿼리 편집기에서 테이블을 생성합니다.
주의아래 테이블 생성 쿼리는
date_id=yyyy-mm-dd/hour_id=hh폴더 구조로 저장된 로그를 기준으로 합니다. 이전 구조(yyyy-mm-dd/trail_yyyy-mm-dd-hh.gz)로 저장된 기존 로그 파일은 테이블이 정상적으로 생성되지 않을 수 있습니다.[프로젝트 이벤트] 테이블 생성CREATE TABLE ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME} (
event_version varchar,
event_id varchar,
event_name varchar,
event_source varchar,
event_time varchar,
region varchar,
domain_id varchar,
domain_name varchar,
project_id varchar,
project_name varchar,
resource_name varchar,
resource_id varchar,
resource_type varchar,
user_id varchar,
user_name varchar,
user_agent varchar,
source_ip_address varchar,
other_additional_info varchar,
date_id varchar,
hour_id varchar
)
WITH (
external_location = 's3a://${BUCKET_NAME}/trail/project_event',
format = 'JSON',
partitioned_by = ARRAY['date_id', 'hour_id']
);환경변수 설명 CATALOG_NAME🖌︎ Data Catalog에서 생성한 카탈로그 이름 DATABASE_NAME🖌︎ Data Catalog에서 생성한 데이터베이스 이름 TABLE_NAME🖌︎ 테이블 이름 BUCKET_NAME🖌︎ 버킷 이름 [도메인 이벤트] 테이블 생성CREATE TABLE ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME} (
event_version varchar,
event_id varchar,
event_name varchar,
event_source varchar,
event_time varchar,
region varchar,
domain_id varchar,
domain_name varchar,
project_id varchar,
project_name varchar,
resource_name varchar,
resource_id varchar,
resource_type varchar,
user_id varchar,
user_name varchar,
user_agent varchar,
source_ip_address varchar,
other_additional_info varchar,
date_id varchar,
hour_id varchar
)
WITH (
external_location = 's3a://${BUCKET_NAME}/trail/domain_event',
format = 'JSON',
partitioned_by = ARRAY['date_id', 'hour_id']
);환경변수 설명 CATALOG_NAME🖌︎ Data Catalog에서 생성한 카탈로그 이름 DATABASE_NAME🖌︎ Data Catalog에서 생성한 데이터베이스 이름 TABLE_NAME🖌︎ 테이블 이름 BUCKET_NAME🖌︎ 버킷 이름 -
데이터 조회를 진행합니다.
데이터 조회SELECT *
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE date_id = '2026-04-26' AND hour_id = '01'; -- 파티션 컬럼으로 조회환경변수 설명 CATALOG_NAME🖌︎ Data Catalog에서 생성한 카탈로그 이름 DATABASE_NAME🖌︎ Data Catalog에서 생성한 데이터베이스 이름 TABLE_NAME🖌︎ 테이블 이름
조회 결과 예시
부록
부록 1. 프로젝트 이벤트 쿼리 예시
SELECT *
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE date_id = '2026-04-26'; -- 파티션 컬럼으로 조회
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
SELECT *
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE date_id = '2026-04-26' -- 파티션 컬럼으로 조회
AND event_source = 'Virtual Machine';
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
SELECT *
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE date_id = '2026-04-26' -- 파티션 컬럼으로 조회
AND event_source = 'Virtual Machine'
AND event_name LIKE '%Evacuate%'; -- Virtual Machine 서비스에서 Evacuate를 포함한 이벤트를 조회
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
SELECT *
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE date_id = '2026-04-26' -- 파티션 컬럼으로 조회
AND user_name = 'test@kakaoenterprise.com';
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
부록 2. 도메인 이벤트 쿼리 예시
SELECT *
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE date_id = '2026-04-26'; -- 파티션 컬럼으로 조회
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
SELECT event_time, user_name, event_name, source_ip_address
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE event_name = 'Console Login' -- Console Login 이벤트 조회
AND date_id = '2026-04-26'; -- 파티션 컬럼으로 조회
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
SELECT event_time, event_name, source_ip_address
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE user_name = 'test@kakaoenterprise.com'
AND date_id = '2026-04-26'
ORDER BY event_time DESC;
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
SELECT source_ip_address, COUNT(*) AS access_count
FROM ${CATALOG_NAME}.${DATABASE_NAME}.${TABLE_NAME}
WHERE date_id = '2026-04-26'
AND event_name = 'Console Login'
GROUP BY source_ip_address
ORDER BY access_count DESC;
| 환경변수 | 설명 |
|---|---|
| CATALOG_NAME🖌︎ | Data Catalog에서 생성한 카탈로그 이름 |
| DATABASE_NAME🖌︎ | Data Catalog에서 생성한 데이터베이스 이름 |
| TABLE_NAME🖌︎ | 테이블 이름 |
부록 3. 쿼리 시 참고를 위한 이벤트 로그 목록
이벤트 로그 정보
| 항목 | 설명 |
|---|---|
| event_version | 이벤트 버전 |
| event_id | 이벤트 ID |
| event_name | 이벤트 명 |
| event_source | 이벤트 자원(서비스 이름) |
| event_time | 이벤트 시간 |
| region | 리전 |
| domain_id | 도메인 ID |
| domain_name | 도메인 이름 |
| project_id | 프로젝트 ID |
| project_name | 프로젝트 이름 |
| resource_name | 자원 이름 |
| resource_id | 자원 ID |
| resource_type | 자원 타입 |
| user_id | 사용자 ID |
| user_name | 사용자 이름 |
| user_agent | 사용자의 브라우저, OS |
| source_ip_address | 사용자 IP |
| other_additional_info | 추가 정보 |