AWS CloudTrail: 누가 무엇을 했는지 추적하는 감사 로깅
AWS CloudTrail로 모든 API 호출을 기록하고, 보안 감사와 규정 준수를 위한 로깅 전략을 알아봅니다.
관련 시험 도메인
- Domain 1: Design Secure Architectures
핵심 요약 (BLUF)
AWS CloudTrail은 AWS 계정의 모든 API 호출을 기록하는 감사 로깅 서비스로, "누가, 언제, 무엇을, 어디서" 했는지 추적합니다. 기본적으로 90일간 이벤트 기록을 제공하며, S3에 저장하면 무제한 보관이 가능합니다.
시험 팁
시험 핵심: "누가 했는지 추적 = CloudTrail", "성능 모니터링 = CloudWatch", "구성 변경 추적 = AWS Config"
CloudTrail이란?
AWS 계정에서 수행된 모든 API 호출을 기록하는 서비스입니다.
누가 EC2 인스턴스를 종료했나?
[CloudTrail 이벤트]:
- 사용자: arn:aws:iam::123456789012:user/john
- 작업: ec2:TerminateInstances
- 시간: 2026-01-28T14:30:00Z
- IP: 203.0.113.50
- 리전: ap-northeast-2
- 인스턴스: i-0abc1234def56789
이벤트 유형
3가지 이벤트
| 유형 | 설명 | 기본 기록 | 예시 |
|---|---|---|---|
| 관리 이벤트 | AWS 리소스 관리 작업 | ✅ 무료 | EC2 생성/삭제, IAM 정책 변경 |
| 데이터 이벤트 | 리소스 내 데이터 작업 | ❌ 유료 | S3 GetObject, Lambda Invoke |
| Insights 이벤트 | 비정상 활동 감지 | ❌ 유료 | API 호출량 급증 |
관리 이벤트 (Management Events)
관리 이벤트 예시:
- EC2 인스턴스 시작/중지/종료
- IAM 사용자 생성, 정책 변경
- VPC 생성, 보안 그룹 수정
- S3 버킷 생성/삭제
- RDS 인스턴스 생성
읽기 이벤트: DescribeInstances, ListBuckets
쓰기 이벤트: RunInstances, CreateBucket
→ 읽기/쓰기 별도 필터링 가능
데이터 이벤트 (Data Events)
데이터 이벤트 예시:
- S3: GetObject, PutObject, DeleteObject
- Lambda: Invoke
- DynamoDB: GetItem, PutItem
→ 대량 발생 가능 → 기본 비활성화
→ 필요한 버킷/함수만 선택적 활성화 권장
시험 팁
관리 vs 데이터 이벤트: 관리 이벤트는 기본 기록(무료). 데이터 이벤트(S3 객체 접근, Lambda 호출)는 별도 활성화 필요(유료).
추적 (Trail) 설정
추적 유형
추적 범위:
단일 리전 추적:
[ap-northeast-2만 기록] → [S3 버킷]
모든 리전 추적 (권장):
[모든 리전의 이벤트 기록] → [S3 버킷]
→ 새 리전 추가 시 자동 포함
조직 추적:
[모든 계정 + 모든 리전] → [관리 계정 S3 버킷]
→ Organizations 전체 감사
로그 저장
CloudTrail 로그 저장 옵션:
[CloudTrail]
│
├── [S3 버킷] ← 장기 보관 (필수)
│ ├── 서버 사이드 암호화 (SSE-S3 또는 SSE-KMS)
│ ├── 로그 파일 무결성 검증 (다이제스트 파일)
│ └── S3 수명주기로 Glacier 이동 가능
│
└── [CloudWatch Logs] ← 실시간 모니터링 (선택)
├── 메트릭 필터로 경보 설정
└── 특정 API 호출 시 즉시 알림
CloudTrail + CloudWatch Logs 연동
보안 모니터링 시나리오:
[CloudTrail] → [CloudWatch Logs]
│
├── 메트릭 필터: "루트 계정 로그인"
│ └── CloudWatch 경보 → SNS → 관리자 알림
│
├── 메트릭 필터: "보안 그룹 변경"
│ └── CloudWatch 경보 → SNS → 보안팀 알림
│
└── 메트릭 필터: "IAM 정책 변경"
└── CloudWatch 경보 → Lambda → 자동 롤백
CloudTrail Insights
비정상적인 API 활동을 자동으로 감지합니다.
정상 패턴:
EC2 RunInstances: 하루 평균 5회
비정상 감지:
EC2 RunInstances: 오늘 200회 호출!
→ CloudTrail Insights 이벤트 생성
→ 알림 전송
사용 사례:
- 비정상적인 리소스 프로비저닝
- IAM 작업 급증
- 서비스 제한 관련 활동 급증
로그 파일 무결성 검증
무결성 검증 활성화 시:
[CloudTrail 로그 파일]
│
▼
[다이제스트 파일 생성] (1시간마다)
│
▼
[SHA-256 해시 + RSA 서명]
→ 로그 파일이 변조되지 않았음을 검증
→ 규정 준수, 포렌식 분석에 필수
이벤트 기록 vs 추적
| 항목 | 이벤트 기록 (Event History) | 추적 (Trail) |
|---|---|---|
| 설정 | 기본 활성화 | 수동 생성 |
| 보존 | 90일 | S3에 무제한 |
| 이벤트 | 관리 이벤트만 | 관리 + 데이터 + Insights |
| 비용 | 무료 | S3 저장 비용 + 데이터 이벤트 비용 |
| 리전 | 현재 리전만 | 모든 리전 가능 |
시험 팁
90일 제한: 기본 이벤트 기록은 90일만 보관됩니다. 장기 보관이 필요하면 추적(Trail)을 생성하여 S3에 저장하세요.
보안 모범 사례
| 방법 | 설명 |
|---|---|
| 모든 리전 추적 | 사용하지 않는 리전의 비인가 활동도 감지 |
| S3 버킷 보호 | MFA Delete, 버킷 정책으로 삭제 방지 |
| 로그 암호화 | SSE-KMS로 암호화 |
| 무결성 검증 | 다이제스트 파일로 변조 탐지 |
| CloudWatch 연동 | 실시간 보안 경보 설정 |
| 별도 계정 저장 | 로그 전용 계정에 S3 버킷 배치 |
SAA-C03 시험 출제 포인트
- ✅ API 감사: "누가 리소스를 변경했는지 = CloudTrail"
- ✅ 이벤트 유형: "관리 이벤트 기본 무료, 데이터 이벤트 별도 활성화"
- ✅ 90일 제한: "장기 보관 = Trail + S3"
- ✅ 무결성 검증: "로그 변조 방지 = 다이제스트 파일"
- ✅ vs CloudWatch: "감사 = CloudTrail, 모니터링 = CloudWatch"
시험 팁
시험 문제 예시: "보안 감사를 위해 모든 AWS API 호출을 장기 보관하고, 루트 계정 로그인 시 즉시 알림을 받으려면?" → 정답: CloudTrail 추적 → S3 장기 보관 + CloudWatch Logs → 메트릭 필터 → 경보 → SNS 알림
자주 묻는 질문 (FAQ)
Q: CloudTrail은 무료인가요?
관리 이벤트의 첫 번째 추적(Trail)은 무료입니다. 추가 추적, 데이터 이벤트, Insights 이벤트는 과금됩니다. S3 저장 비용은 별도입니다.
Q: CloudTrail과 CloudWatch Logs를 모두 사용해야 하나요?
CloudTrail은 S3에 로그를 저장하고, CloudWatch Logs로 보내면 실시간 모니터링과 경보 설정이 가능합니다. 보안 모니터링이 중요한 환경에서는 둘 다 사용하는 것이 권장됩니다.
Q: 데이터 이벤트를 모든 S3 버킷에 활성화해야 하나요?
데이터 이벤트는 대량 발생하여 비용이 높을 수 있습니다. 민감한 데이터가 있는 버킷이나 규정 준수가 필요한 버킷에만 선택적으로 활성화하세요.
Q: CloudTrail 로그가 S3에 전달되기까지 얼마나 걸리나요?
일반적으로 API 호출 후 약 5~15분 이내에 S3 버킷에 로그가 전달됩니다. 실시간이 필요하면 CloudWatch Logs 연동을 사용하세요.
Q: Organizations의 모든 계정을 하나의 Trail로 감사할 수 있나요?
네. 관리 계정에서 조직 추적(Organization Trail)을 생성하면 모든 멤버 계정의 이벤트가 하나의 S3 버킷에 기록됩니다.