본문으로 건너뛰기

Cloud Trail 로그를 Data Query를 통해 조회

Object Storage에 저장된 Cloud Trail 로그를 Data CatalogData Query를 통해 분석, 조회하는 방법을 안내합니다.

기본 정보

시나리오 소개

이 튜토리얼에서는 Cloud Trail 로그를 Object Storage에 저장한 뒤, Data CatalogData 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 서비스에서 카탈로그와, 로그가 저장되고 있는 버킷과 연결된 데이터베이스를 생성합니다.

  1. 카카오클라우드 콘솔 > Analytics > Data Catalog 메뉴로 이동합니다.

  2. 카탈로그 메뉴에서 [카탈로그 생성] 버튼을 클릭합니다.

  3. 카탈로그 생성 팝업창에서 아래 정보를 입력한 후, [생성] 버튼을 클릭합니다.

    구분설정값
    유형Standard 카탈로그
    이름카탈로그 이름 (예: catalog)
    VPC 설정카탈로그에 해당하는 네트워크 선택 (VPC-서브넷당 1개만 생성 가능)
  4. 생성한 카탈로그(catalog)를 클릭하여 데이터베이스 목록에서 [데이터베이스 생성] 버튼을 클릭합니다.

  5. 데이터베이스 생성 팝업창에서 아래 정보를 입력한 후, [생성] 버튼을 클릭합니다.

    구분설정값
    유형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_eventtrail/domain_event 경로로 데이터베이스를 하나씩 만드세요.

    자세한 내용은 Cloud Trail 로그 저장 관리를 참고하세요.

Step 3. Data Query 조회

Data Catalog에서 생성한 데이터베이스를 통해 테이블을 만들고 로그 데이터를 조회합니다.

  1. 카카오클라우드 콘솔 > Analytics > Data Query > 쿼리 편집기 메뉴로 이동합니다.

  2. 아래와 같이 데이터 원본과 데이터베이스를 선택합니다.

    구분설정값
    데이터 원본Data Catalog에서 생성한 카탈로그 catalog 선택
    데이터베이스Data Catalog에서 생성한 데이터베이스 cloudtrail 선택
  3. 우측의 쿼리 편집기에서 테이블을 생성합니다.

    주의

    아래 테이블 생성 쿼리는 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🖌 버킷 이름
  4. 데이터 조회를 진행합니다.

    데이터 조회
    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. 프로젝트 이벤트 쿼리 예시

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🖌 테이블 이름
2. 특정 자원에 대한 이벤트만 조회
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🖌 테이블 이름
3. 특정 이벤트만 조회 (예: VM Evacuation 이벤트)
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🖌 테이블 이름
4. 특정 사용자 이벤트 조회
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. 도메인 이벤트 쿼리 예시

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🖌 테이블 이름
2. 특정 이벤트 이름 기준 필터 (예: Console Login)
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🖌 테이블 이름
3. 특정 사용자 로그만 필터
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🖌 테이블 이름
4. IP별 로그인 카운트
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추가 정보