Chapter 12

CloudTrail 감사 로깅

"누가, 언제, 무엇을 했는지 모든 기록을 남기자"

학습 목표

  • CloudTrail의 역할과 감사 로깅의 중요성을 이해한다
  • CloudTrail 이벤트 기록(Event history)을 조회할 수 있다
  • CloudTrail 추적(Trail)을 생성하여 S3에 로그를 영구 보관할 수 있다
  • 특정 API 호출 이벤트를 검색하고 분석할 수 있다
Chapter 12 - CloudTrail 감사 로깅 아키텍처
AWS 사용자
콘솔 / CLI / SDK
↓ API 호출
AWS 서비스
EC2, S3, IAM, RDS ...
↓ 모든 API 호출 기록
CloudTrail
ShopEasy-Trail
이벤트 기록 & 추적
↓ 로그 저장
S3 Bucket
shopeasy-cloudtrail-{ACCOUNT_ID}
감사 로그 영구 보관

CloudTrail이란?

비유로 이해하기: CloudTrail = 건물의 CCTV + 출입 기록

건물에 CCTV가 설치되어 있으면 누가 언제 어디를 출입했는지, 어떤 행동을 했는지 모든 것이 기록됩니다. 문제가 발생하면 영상을 되돌려 보면서 원인을 파악할 수 있습니다.

CloudTrail은 AWS 계정의 CCTV입니다. AWS에서 발생하는 모든 API 호출을 기록합니다. 누가 EC2를 시작했는지, 누가 S3 버킷을 삭제했는지, 누가 IAM 사용자를 만들었는지 - 모든 활동이 남습니다.

AWS CloudTrail은 AWS 계정에서 이루어지는 모든 API 호출을 기록하는 서비스입니다. 콘솔에서 클릭하든, CLI로 명령을 실행하든, SDK로 코드를 실행하든 - 모든 것이 API 호출이고, CloudTrail이 이를 기록합니다.

CloudTrail이 기록하는 정보

항목 설명 예시
누가 (Who) API를 호출한 사용자/역할 IAM 사용자 admin, EC2 Role
언제 (When) API 호출 시간 (UTC) 2024-12-15T09:30:00Z
무엇을 (What) 호출한 API 이름 RunInstances, CreateBucket
어디서 (Where) 요청을 보낸 IP 주소 203.0.113.50
결과 (Result) 요청 성공/실패 여부 Success, AccessDenied

왜 감사 로깅이 필요한가?

시나리오: ShopEasy에서 발생할 수 있는 상황들

  • 보안 사고 조사: "어제 밤에 누가 EC2 보안 그룹을 변경해서 DB가 외부에 노출되었다. 누가 했지?"
  • 컴플라이언스: "고객 데이터에 누가 접근했는지 감사 기록을 제출해야 한다"
  • 비인가 활동 탐지: "IAM 사용자가 권한 밖의 리소스에 접근을 시도했다"
  • 운영 디버깅: "S3 버킷이 갑자기 사라졌다. 누가 삭제한 거지?"
핵심 포인트

CloudTrail 없이는 AWS 계정에서 "무슨 일이 일어났는지"를 알 방법이 없습니다. 사후 분석, 보안 감사, 규정 준수 모두 CloudTrail에 의존합니다. AWS 계정을 만들면 가장 먼저 CloudTrail을 활성화하는 것이 보안 Best Practice입니다.

CloudTrail 핵심 개념

핵심 용어

용어 설명 비유
이벤트 (Event) 하나의 API 호출 기록. JSON 형태로 저장 CCTV 영상 한 장면
이벤트 기록 (Event history) 최근 90일간의 관리 이벤트를 무료로 조회. 별도 설정 불필요 CCTV 기본 녹화 (90일 보관)
추적 (Trail) 이벤트를 S3 버킷에 영구 저장하도록 설정. 90일 이상 보관 가능 CCTV 영상을 외장 하드에 백업
관리 이벤트 (Management events) 리소스 생성/변경/삭제 등 관리 작업 (예: RunInstances, CreateBucket) 건물 출입문 기록
데이터 이벤트 (Data events) 데이터 자체에 대한 작업 (예: S3 GetObject, Lambda Invoke). 별도 활성화 필요 건물 내부 활동 기록
이벤트 기록 vs 추적(Trail)
항목 이벤트 기록 (Event history) 추적 (Trail)
비용 무료 S3 저장 비용 발생
보관 기간 최근 90일만 무제한 (S3에 영구 보관)
설정 자동 활성화 (별도 설정 불필요) 직접 Trail 생성 필요
이벤트 종류 관리 이벤트만 관리 + 데이터 이벤트 가능
용도 빠른 조회, 최근 활동 확인 장기 보관, 컴플라이언스, 상세 분석

CloudTrail 이벤트 JSON 구조 (예시)

json
{
  "eventVersion": "1.08",
  "userIdentity": {
    "type": "IAMUser",
    "userName": "admin"
  },
  "eventTime": "2024-12-15T09:30:00Z",
  "eventSource": "ec2.amazonaws.com",
  "eventName": "RunInstances",
  "awsRegion": "ap-northeast-2",
  "sourceIPAddress": "203.0.113.50",
  "requestParameters": {
    "instanceType": "t2.micro",
    "imageId": "ami-0abcdef1234567890"
  },
  "responseElements": {
    "instancesSet": {
      "items": [{"instanceId": "i-0abcdef1234567890"}]
    }
  }
}
읽는 법

위 이벤트는 "IAM 사용자 admin2024-12-15 09:30에 IP 주소 203.0.113.50에서 ap-northeast-2 리전에 t2.micro EC2 인스턴스를 시작(RunInstances)했다"는 것을 의미합니다.

실습: CloudTrail 감사 로깅

사전 준비
  • 이전 챕터들에서 EC2, S3, IAM 등의 리소스를 생성한 상태여야 합니다 (CloudTrail에서 해당 이벤트를 확인할 수 있습니다)
  • AWS 계정 ID를 확인해 두세요 (콘솔 우측 상단 클릭 또는 aws sts get-caller-identity)
Hands-on Lab
  1. CloudTrail 이벤트 기록 확인

    CloudTrail의 이벤트 기록(Event history)에서 최근 활동을 확인합니다. 이벤트 기록은 별도 설정 없이 최근 90일간의 관리 이벤트를 무료로 제공합니다.

    • AWS 콘솔 → CloudTrail 서비스로 이동
    • 좌측 메뉴에서 이벤트 기록(Event history) 클릭
    • 이전 챕터에서 수행한 활동(EC2 생성, S3 버킷 생성, IAM 역할 생성 등)과 관련된 이벤트를 찾아보세요
    • 필터를 사용해 특정 이벤트를 검색해 보세요 (예: 이벤트 이름 = RunInstances)
    확인할 이벤트 예시
    • RunInstances - Chapter 02에서 EC2 인스턴스를 생성한 기록
    • CreateBucket - Chapter 05에서 S3 버킷을 생성한 기록
    • CreateRole - Chapter 04에서 IAM 역할을 생성한 기록

    AWS 콘솔 → CloudTrail → 이벤트 기록에서 상단 필터 드롭다운을 "이벤트 이름"으로 변경하고, RunInstances를 입력하면 EC2 인스턴스 생성 이벤트를 찾을 수 있습니다. 이벤트를 클릭하면 상세 JSON을 확인할 수 있습니다.

  2. CloudTrail 추적(Trail) 생성

    이벤트 기록은 90일만 보관됩니다. 추적(Trail)을 만들어 모든 관리 이벤트를 S3 버킷에 영구 보관하도록 설정합니다.

    • 추적 이름: ShopEasy-Trail
    • 스토리지 위치: 새 S3 버킷 생성 → shopeasy-cloudtrail-{ACCOUNT_ID}
    • 로그 파일 SSE-KMS 암호화: 활성화 (AWS 관리형 키 사용)
    • 관리 이벤트: 읽기/쓰기 = 모두
    왜 S3에 저장하나?

    이벤트 기록은 90일까지만 무료로 조회할 수 있습니다. 보안 사고 조사나 컴플라이언스 감사는 수개월~수년 전의 기록이 필요할 수 있으므로, Trail을 생성하여 S3에 영구 보관하는 것이 Best Practice입니다. S3에 저장된 로그는 S3 수명 주기 정책으로 비용을 관리할 수 있습니다.

    AWS 콘솔 → CloudTrail → 추적(Trails) → 추적 생성 클릭. 추적 이름에 ShopEasy-Trail 입력, "새 S3 버킷 생성"을 선택하고 버킷 이름에 shopeasy-cloudtrail-{ACCOUNT_ID}를 입력합니다. 나머지 설정은 기본값으로 두고 생성합니다.

  3. 추적 로그 S3 버킷 확인

    Trail이 생성되면 CloudTrail이 자동으로 로그 파일을 S3 버킷에 저장합니다. 실제로 로그가 쌓이는지 확인합니다.

    • S3 콘솔에서 shopeasy-cloudtrail-{ACCOUNT_ID} 버킷으로 이동
    • AWSLogs/{ACCOUNT_ID}/CloudTrail/ap-northeast-2/YYYY/MM/DD/ 경로로 이동하여 로그 파일 확인
    • 로그 파일은 .json.gz 형식으로 압축되어 저장됩니다
    참고: 로그가 보이지 않을 수 있습니다

    Trail을 생성한 직후에는 첫 번째 로그 파일이 S3에 도착하기까지 5~15분 정도 소요됩니다. 잠시 기다린 후 새로고침하여 확인하세요. CloudTrail은 약 5분 간격으로 로그 파일을 배치로 전달합니다.

    AWS 콘솔 → S3 → shopeasy-cloudtrail-{ACCOUNT_ID} 버킷 → AWSLogs/{ACCOUNT_ID}/CloudTrail/ap-northeast-2/ → 오늘 날짜 폴더. 파일이 없으면 5~10분 후 새로고침하세요.

  4. 특정 이벤트 검색

    CloudTrail 이벤트 기록에서 특정 API 호출을 검색하여, 누가 언제 어떤 작업을 했는지 상세 정보를 확인합니다.

    • 다음 이벤트 중 하나 이상을 검색해 보세요:
      • RunInstances - EC2 인스턴스 생성
      • CreateBucket - S3 버킷 생성
      • CreateTrail - 방금 만든 CloudTrail 추적 생성 기록
    • 검색된 이벤트를 클릭하여 상세 JSON을 확인하세요
    • JSON에서 userIdentity(누가), eventTime(언제), sourceIPAddress(어디서)를 확인하세요
    다양한 필터 활용

    이벤트 기록에서는 다양한 기준으로 필터링할 수 있습니다:

    • 이벤트 이름: 특정 API 호출을 검색 (예: RunInstances)
    • 사용자 이름: 특정 사용자의 활동을 추적
    • 리소스 유형: 특정 서비스의 이벤트만 조회 (예: AWS::EC2::Instance)
    • 이벤트 소스: 특정 AWS 서비스의 이벤트만 조회 (예: s3.amazonaws.com)

    CloudTrail → 이벤트 기록에서 필터 드롭다운을 "이벤트 이름"으로 변경 후 CreateTrail을 검색하면, 방금 Trail을 생성한 기록이 나옵니다. 이벤트를 클릭하여 JSON 상세 정보를 확인하세요.

확인 사항

아래 항목을 모두 완료했는지 체크하세요:

  • CloudTrail 이벤트 기록에서 최근 90일간의 관리 이벤트를 조회할 수 있다
  • 이전 챕터에서 수행한 활동(EC2 생성, S3 버킷 생성 등)의 이벤트를 확인했다
  • CloudTrail 추적 ShopEasy-Trail이 생성되었다
  • S3 버킷 shopeasy-cloudtrail-{ACCOUNT_ID}에 로그 파일이 저장되고 있다
  • 특정 이벤트를 검색하고, JSON 상세 정보(누가, 언제, 어디서)를 확인했다