
AWS CloudTrail 완전 정복: 클라우드의 'CCTV'가 모든 행동을 기록하는 법
누가, 언제, 어디서, 무엇을 했는가 — CloudTrail은 AWS에서 일어나는 모든 API 호출을 기록하는 '블랙박스'다. 보안 사고 추적부터 규제 준수, 비용 분석까지 — CloudTrail이 왜 필수이고 어떻게 활용하는지를 실전 사례와 함께 풀어본다.

누가, 언제, 어디서, 무엇을 했는가 — CloudTrail은 AWS에서 일어나는 모든 API 호출을 기록하는 '블랙박스'다. 보안 사고 추적부터 규제 준수, 비용 분석까지 — CloudTrail이 왜 필수이고 어떻게 활용하는지를 실전 사례와 함께 풀어본다.
월요일 아침. 프로덕션 RDS 인스턴스가 사라졌다. 금요일 밤까지는 정상이었는데. 팀에 물어보면 "나는 안 했어"라는 답만 돌아온다.
이 질문들에 답하려면 모든 행동의 기록이 필요하다. 건물에 CCTV가 있어야 도둑을 찾을 수 있듯, 클라우드에는 모든 API 호출의 로그가 있어야 한다.
이것이 CloudTrail이다. AWS에서 일어나는 모든 것을 기록하는 서비스.
AWS CloudTrail은 AWS 계정에서 이루어지는 모든 API 호출과 이벤트를 기록하고 저장하는 서비스다. 2013년 11월 출시.
AWS에서 일어나는 모든 것은 결국 API 호출이다:
RunInstances API 호출PutObject API 호출PutItem API 호출ConsoleLogin 이벤트CloudTrail은 이 모든 API 호출을 JSON 형태로 기록한다.
| CCTV | CloudTrail | 설명 |
|---|---|---|
| 카메라 | 이벤트 수집 | 모든 출입(API 호출)을 촬영(기록) |
| 녹화 영상 | 이벤트 로그 (JSON) | 누가, 언제, 어디서, 무엇을 했는지 |
| DVR (저장 장치) | S3 버킷 | 로그를 장기 보관 |
| 모니터링 화면 | CloudTrail 콘솔 / Athena | 실시간 조회 및 분석 |
| 알람 | EventBridge + SNS | 특정 행동 감지 시 알림 |
누군가가 EC2 인스턴스를 종료했을 때의 기록:
{
"eventTime": "2026-03-07T03:15:22Z",
"eventSource": "ec2.amazonaws.com",
"eventName": "TerminateInstances",
"awsRegion": "ap-northeast-2",
"sourceIPAddress": "203.0.113.45",
"userIdentity": {
"type": "IAMUser",
"userName": "kim-developer",
"arn": "arn:aws:iam::123456789:user/kim-developer"
},
"requestParameters": {
"instancesSet": {
"items": [{ "instanceId": "i-0abc123def456" }]
}
},
"responseElements": {
"instancesSet": {
"items": [{
"instanceId": "i-0abc123def456",
"currentState": { "name": "shutting-down" }
}]
}
}
}
이 한 건의 로그에서 알 수 있는 것:
"누가 서버를 삭제했어?"의 답이 3초 만에 나온다.
CloudTrail이 탄생한 배경에는 규제 준수(Compliance) 요구가 있다.
SOX법(Sarbanes-Oxley, 2002): 미국의 기업 회계 개혁법. 기업의 모든 재무 관련 IT 시스템에 대한 접근 로그와 변경 기록을 유지해야 한다.
PCI DSS: 신용카드 데이터를 다루는 기업은 시스템 접근에 대한 감사 추적(audit trail) 을 유지해야 한다.
HIPAA: 의료 데이터를 다루는 기업은 데이터 접근에 대한 로깅이 의무.
한국 전자금융감독규정: 금융기관은 정보시스템에 대한 접근 기록을 5년간 보관해야 한다.
이런 규제들은 공통적으로 **"누가, 언제, 무엇을 했는지 증명할 수 있어야 한다"**를 요구한다. CloudTrail은 이 요구의 AWS 구현이다.
| 유형 | 기록 내용 | 예시 | 기본 활성화 | 비용 |
|---|---|---|---|---|
| 관리 이벤트 | 리소스의 생성·수정·삭제 | EC2 시작, S3 버킷 생성, IAM 정책 변경 | ✓ (90일 무료) | 무료 (첫 Trail) |
| 데이터 이벤트 | 데이터 수준의 읽기·쓰기 | S3 객체 Get/Put, Lambda 함수 호출 | ✗ (수동 활성화) | 유료 |
| Insights 이벤트 | 비정상 API 패턴 | "평소보다 100배 많은 EC2 생성 요청" | ✗ (수동 활성화) | 유료 |
2019년 Capital One 사고(이 시리즈에서 반복 등장)에서, 공격자 Paige Thompson의 행동은 CloudTrail에 모두 기록되어 있었다.
CloudTrail 로그를 통해 수사관이 파악한 것:
CloudTrail이 없었다면 공격 범위를 파악하는 것조차 불가능했을 것이다. FBI 수사에서 CloudTrail 로그가 핵심 증거로 사용됐다.
2020년 SolarWinds 공급망 공격 이후, 영향을 받은 기업들이 "공격자가 우리 AWS에서 뭘 했는가?"를 확인하는 데 CloudTrail을 사용했다. 공격자의 AWS API 호출 기록을 추적하여 피해 범위를 특정했다.
"이 S3 버킷에 누가 접근했는가?"
-- CloudTrail Lake 쿼리
SELECT
eventTime,
userIdentity.arn AS who,
sourceIPAddress AS from_ip,
eventName AS action,
requestParameters
FROM events
WHERE eventSource = 's3.amazonaws.com'
AND requestParameters LIKE '%sensitive-bucket%'
AND eventTime > '2026-03-01'
ORDER BY eventTime DESC
"갑자기 EC2 비용이 올라갔는데, 누가 인스턴스를 만들었지?"
SELECT
eventTime,
userIdentity.userName AS who,
requestParameters
FROM events
WHERE eventName = 'RunInstances'
AND eventTime BETWEEN '2026-03-01' AND '2026-03-07'
ORDER BY eventTime DESC
GitHub에 AWS 키가 노출됐다. 해당 키로 어떤 작업이 이루어졌는지 즉시 확인:
SELECT
eventTime,
eventName,
awsRegion,
sourceIPAddress,
errorCode
FROM events
WHERE userIdentity.accessKeyId = 'AKIAIOSFODNN7EXAMPLE'
ORDER BY eventTime DESC
감사관이 "지난 6개월간 프로덕션 DB에 누가 접근했는가?"를 요청할 때:
CloudTrail 로그를 S3에 장기 보관하고, Athena 또는 CloudTrail Lake로 쿼리하여 접근 기록을 즉시 제출.
| CloudTrail | CloudWatch Logs | |
|---|---|---|
| 기록 대상 | AWS API 호출 | 앱/시스템 로그 |
| 예시 | "kim이 EC2를 삭제했다" | "서버에서 OOM 에러 발생" |
| 활성화 | 기본 활성화 (관리 이벤트) | 직접 설정 필요 |
| 저장 | S3 또는 CloudTrail Lake | CloudWatch Logs 그룹 |
| 분석 | Athena, CloudTrail Lake | Logs Insights |
| 주 사용자 | 보안팀, 감사팀 | 개발팀, 운영팀 |
1. 조직 전체 Trail 생성
모든 리전, 모든 계정의 이벤트를 하나의 S3 버킷에 수집:
aws cloudtrail create-trail \
--name organization-trail \
--s3-bucket-name my-cloudtrail-logs \
--is-multi-region-trail \
--is-organization-trail \
--enable-log-file-validation
--enable-log-file-validation은 로그 파일의 위변조를 감지하는 기능. 공격자가 자신의 흔적을 삭제하려 해도 감지할 수 있다.
2. S3 버킷 보호
CloudTrail 로그가 저장되는 S3 버킷은 특별히 보호해야 한다:
3. EventBridge 알림 설정
위험한 행동을 실시간으로 감지:
{
"source": ["aws.cloudtrail"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventName": [
"DeleteTrail",
"StopLogging",
"CreateUser",
"AttachUserPolicy"
]
}
}
"CloudTrail 자체를 끄려는 시도", "새 IAM 사용자 생성", "정책 변경" — 이런 이벤트를 즉시 감지하여 Slack/이메일로 알림.
| 항목 | 비용 | 비고 |
|---|---|---|
| 관리 이벤트 (첫 Trail) | 무료 | 계정당 1개 Trail |
| 관리 이벤트 (추가 Trail) | $2.00/100,000 이벤트 | |
| 데이터 이벤트 | $0.10/100,000 이벤트 | S3 Get/Put, Lambda 호출 등 |
| Insights 이벤트 | $0.35/100,000 분석 이벤트 | 비정상 패턴 감지 |
| CloudTrail Lake 저장 | 0.005/GB/월 | SQL 직접 쿼리 가능 |
| S3 저장 | $0.025/GB/월 | 장기 보관은 Glacier로 |
AWS는 자체 서비스 운영에도 CloudTrail과 동일한 원리의 감사 로깅을 사용한다. 2019년 AWS Nitro System을 발표할 때, "AWS 직원조차 고객 인스턴스의 메모리에 접근할 수 없으며, 모든 접근 시도가 로깅된다"고 강조했다.
Goldman Sachs는 CloudTrail을 활용하여 모든 AWS 리소스 접근을 감사한다. 규제 당국의 감사 요청 시, CloudTrail 로그에서 특정 기간의 접근 기록을 즉시 추출하여 제출한다.
Netflix는 CloudTrail 이벤트를 실시간으로 분석하는 자체 보안 도구 Security Monkey (현재 Repokid로 진화)를 운영한다. 비정상적 IAM 활동을 자동으로 감지하고, 과도한 권한을 자동으로 축소한다.
기존에는 CloudTrail → S3 → Athena로 쿼리해야 했다. CloudTrail Lake는 이벤트를 직접 SQL로 쿼리할 수 있는 관리형 데이터 레이크다:
CloudTrail Insights는 평소의 API 호출 패턴을 학습하고, 비정상적인 패턴을 자동으로 감지한다:
보안의 세계에서 가장 무서운 것은 **"무슨 일이 일어났는지 모르는 것"**이다.
해킹을 당했는데 CloudTrail이 없으면:
이 시리즈에서 다룬 모든 보안 서비스의 관계:
| 서비스 | 역할 | 비유 |
|---|---|---|
| IAM | 누가 무엇을 할 수 있는가 정의 | 출입증 시스템 |
| VPC | 네트워크를 격리하여 접근 경로 제한 | 건물의 벽과 문 |
| CloudTrail | 모든 행동을 기록 | CCTV |
| CloudWatch | 시스템 상태를 모니터링하고 알람 | 센서와 경보기 |
| WAF | 웹 공격을 차단 | 보안 검색대 |
| Guardrails | AI 출력을 필터링 | AI 감시관 |
IAM이 "예방"이라면, CloudTrail은 "탐지와 증거"다. 예방이 100% 완벽할 수는 없다. 그래서 탐지와 증거 수집이 필요하다.
코어닷투데이의 AWS 환경에서 CloudTrail은 항상 켜져 있다. 모든 API 호출이 기록되고, 위험한 행동은 즉시 알림이 오고, 로그는 변경 불가능한 상태로 장기 보관된다. "누가 언제 무엇을 했는가"에 대한 답은 항상 3초 안에 나온다. 그것이 안심하고 잠들 수 있는 보안의 기초다.