S3는 사실상 무한히 확장되는 객체 저장소이자, AWS에서 가장 흔한 데이터 유출 사고의 현장이다. "공개로 잘못 설정된 S3 버킷"은 보안 헤드라인의 단골이다. 보안 시험 관점에서 S3 데이터 보호는 두 축으로 나뉜다 — **저장 데이터 암호화(encryption at rest)**와 접근 통제·노출 방지. 오늘은 암호화·무결성·노출 방지 메커니즘을, 내일(day3)은 접근 통제 정책의 심화를 다룬다.
📚 사례: 2019년 Capital One 침해는 "S3 데이터 보호"가 암호화 하나로 끝나지 않음을 보여 준다. 공격자는 애플리케이션의 SSRF 취약점으로 EC2 인스턴스 메타데이터(IMDSv1)에서 역할의 임시 자격증명을 얻었고, 그 정상적인 자격증명으로 S3에서 데이터를 읽어 갔다. 버킷은 공개도 아니었고 저장 데이터는 암호화되어 있었지만, 정당한 권한을 가진 주체로 위장한 요청이었기 때문에 암호화가 아무것도 막지 못했다. 서버측 암호화(SSE)는 디스크·백업 매체 도난과 AWS 내부 물리 계층을 방어하는 통제이지, 인가된 API 호출을 막는 통제가 아니다. 이 구분을 못 하면 "데이터가 암호화되어 있었는데 왜 유출됐나"라는 질문에 답할 수 없다. 실제 방어선은 (1) 역할 권한 최소화, (2) IMDSv2 강제, (3) SSE-KMS 키 정책으로 복호화 주체 제한, (4) VPC 엔드포인트 조건으로 접근 경로 제한이라는 네 겹이다.