CloudTrail 감사 로깅
"누가, 언제, 무엇을 했는지 모든 기록을 남기자"
학습 목표
- CloudTrail의 역할과 감사 로깅의 중요성을 이해한다
- CloudTrail 이벤트 기록(Event history)을 조회할 수 있다
- CloudTrail 추적(Trail)을 생성하여 S3에 로그를 영구 보관할 수 있다
- 특정 API 호출 이벤트를 검색하고 분석할 수 있다
이벤트 기록 & 추적
감사 로그 영구 보관
CloudTrail이란?
건물에 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). 별도 활성화 필요 | 건물 내부 활동 기록 |
| 항목 | 이벤트 기록 (Event history) | 추적 (Trail) |
|---|---|---|
| 비용 | 무료 | S3 저장 비용 발생 |
| 보관 기간 | 최근 90일만 | 무제한 (S3에 영구 보관) |
| 설정 | 자동 활성화 (별도 설정 불필요) | 직접 Trail 생성 필요 |
| 이벤트 종류 | 관리 이벤트만 | 관리 + 데이터 이벤트 가능 |
| 용도 | 빠른 조회, 최근 활동 확인 | 장기 보관, 컴플라이언스, 상세 분석 |
CloudTrail 이벤트 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 사용자 admin이 2024-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)
-
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을 확인할 수 있습니다. -
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}를 입력합니다. 나머지 설정은 기본값으로 두고 생성합니다. - 추적 이름:
-
추적 로그 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분 후 새로고침하세요. - S3 콘솔에서
-
특정 이벤트 검색
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 상세 정보(누가, 언제, 어디서)를 확인했다