Amazon S3: 보안, 스토리지 클래스, 복제와 성능
S3의 객체 구조, 버전 관리, 복제, 스토리지 클래스, 접근 제어와 암호화를 안전한 설계 기준으로 정리합니다.
목차 10 SECTIONS +
S3의 데이터 모델
Amazon S3는 객체 스토리지다. 버킷 안에 객체를 저장하며 각 객체는 키, 값, 메타데이터, 선택적인 태그와 버전 ID로 구성된다.
- 버킷 이름은 전역에서 고유하고 버킷은 특정 AWS 리전에 생성된다.
- 키의
/는 콘솔에서 폴더처럼 보이지만 실제 파일 시스템 디렉터리는 아니다. - 단일 객체 크기는 최대 5TB이며, 큰 객체는 멀티파트 업로드를 사용한다.
- S3는 새 객체의 PUT과 DELETE를 포함해 강력한 읽기 후 쓰기 일관성을 제공한다.
버전 관리와 삭제 보호
버전 관리를 활성화하면 같은 키의 이전 버전을 보존한다. 실수로 덮어쓰거나 삭제했을 때 복구에 유용하지만, 이전 버전도 저장 비용이 발생하므로 수명 주기 정책을 함께 설계한다.
- 일반 DELETE는 현재 버전을 지우는 대신 delete marker를 추가한다.
- 특정 버전을 완전히 삭제하려면 version ID를 지정해야 한다.
- MFA Delete는 버전 상태 변경과 영구 삭제에 추가 보호를 제공하지만 운영 방식과 제약을 먼저 확인한다.
- S3 Object Lock은 WORM 보존이 필요한 객체에 Governance 또는 Compliance 모드를 적용한다. 버전 관리가 전제이며 법적 보존도 지원한다.
복제
- SRR(Same-Region Replication): 같은 리전의 다른 버킷으로 복제한다. 계정 분리, 로그 집계, 데이터 주권 요구에 활용한다.
- CRR(Cross-Region Replication): 다른 리전으로 복제한다. 지연 감소, 규정 준수, 재해 복구에 활용한다.
소스와 대상 버킷에 버전 관리가 필요하다. 복제 규칙은 기본적으로 설정 이후 생성된 객체에 적용되며, 기존 객체는 S3 Batch Replication을 사용한다. KMS 암호화 객체, delete marker, 소유권 변경은 각각 설정과 권한을 확인해야 한다.
스토리지 클래스
| 클래스 | 접근 특성 | 적합한 데이터 |
|---|---|---|
| S3 Standard | 자주 접근, 다중 AZ | 일반 애플리케이션·콘텐츠 |
| Intelligent-Tiering | 접근 패턴이 불확실 | 자동 계층 이동이 필요한 장기 데이터 |
| Standard-IA | 드물게 접근, 빠른 조회 | 백업, 재해 복구 파일 |
| One Zone-IA | 드물게 접근, 단일 AZ | 재생성 가능한 보조 복사본 |
| Glacier Instant Retrieval | 매우 드물게 접근, 밀리초 조회 | 즉시 조회해야 하는 아카이브 |
| Glacier Flexible Retrieval | 분·시간 단위 복원 | 일반 장기 아카이브 |
| Glacier Deep Archive | 가장 긴 복원 시간, 낮은 저장 비용 | 규정 보관, 장기 백업 |
IA와 Glacier 계층에는 최소 저장 기간, 최소 과금 객체 크기, 검색 비용이 적용될 수 있다. 단순히 GB당 저장 가격만 비교하지 말고 접근 빈도와 복원 시간을 포함해 계산한다.
접근 제어
S3 권한은 여러 계층에서 평가된다.
- IAM 정책: 사용자·역할이 어떤 S3 작업을 수행할 수 있는지 정의
- 버킷 정책: 버킷 리소스 관점에서 계정·조직·네트워크 조건을 강제
- S3 Block Public Access: 실수로 퍼블릭 정책이나 ACL이 적용되는 것을 차단
- S3 Object Ownership: ACL을 비활성화하고 버킷 소유자 강제 방식을 사용할 수 있음
- Access Points: 애플리케이션별 접근 정책과 네트워크 경계를 분리
- VPC Endpoint: 인터넷 게이트웨이 없이 VPC에서 S3에 접근
새 버킷은 퍼블릭 차단을 유지하고 ACL 대신 IAM·버킷 정책 중심으로 권한을 설계하는 것이 기본이다. 조직 단위에서는 AWS Organizations SCP와 S3 Access Analyzer도 함께 사용한다.
암호화
S3는 새로 업로드되는 모든 객체에 기본 서버 측 암호화(SSE-S3)를 적용한다. 더 강한 키 통제나 감사 요구가 있으면 다른 방식을 선택한다.
| 방식 | 키 관리 | 특징 |
|---|---|---|
| SSE-S3 | S3 관리 키 | 기본 암호화, 운영 부담이 가장 적음 |
| SSE-KMS | AWS KMS 키 | 키 정책, CloudTrail 감사, 교차 계정 통제 |
| DSSE-KMS | AWS KMS 키 | 서로 다른 두 계층의 서버 측 암호화 |
| SSE-C | 고객이 요청마다 제공 | S3는 키를 저장하지 않으며 운영 부담이 큼 |
| Client-side encryption | 클라이언트 | 업로드 전에 암호화, 키와 복호화 책임도 고객에게 있음 |
SSE-KMS를 사용할 때는 S3 권한뿐 아니라 KMS 키 정책과 API 요청 한도·비용을 확인한다. 전송 중에는 HTTPS를 강제하고, 버킷 정책에서 aws:SecureTransport 조건으로 비암호화 요청을 거부할 수 있다.
성능과 전송
- 객체 키 접두사별로 높은 요청 처리량을 자동 확장하며, 예전처럼 키 앞부분을 무작위화할 필요는 없다.
- 100MB 안팎 이상의 큰 파일은 멀티파트 업로드를 우선 검토하고 병렬 전송으로 처리량을 높인다.
- 전 세계 클라이언트의 장거리 업로드는 S3 Transfer Acceleration을 검토한다.
- 반복 다운로드는 CloudFront 캐시를 사용해 지연과 S3 요청을 줄인다.
- S3 Select는 기존 고객의 일부 사용 사례에 남아 있지만 신규 고객에게는 제공되지 않는다. 새 설계는 Athena, S3 Object Lambda 등 요구사항에 맞는 대안을 검토한다.
이벤트와 정적 웹 사이트
S3 이벤트 알림은 객체 생성·삭제 이벤트를 SNS, SQS, Lambda 또는 EventBridge로 전달할 수 있다. 이벤트는 중복되거나 순서가 달라질 수 있으므로 소비자는 멱등하게 처리한다.
S3 웹 사이트 엔드포인트는 정적 콘텐츠를 제공하지만 HTTP만 지원한다. HTTPS와 사용자 도메인, 캐시가 필요하면 CloudFront를 앞에 두고, 가능하면 Origin Access Control로 비공개 S3 원본에 접근하게 구성한다.
설계 체크리스트
- 퍼블릭 액세스 차단을 유지하면서 필요한 주체만 허용했는가?
- 버전 관리와 수명 주기로 복구 가능성과 비용을 함께 관리하는가?
- 리전 장애가 요구사항이면 CRR과 실제 복구 절차를 검증했는가?
- SSE-KMS 사용 시 KMS 정책·요청량·비용을 계산했는가?
- 정적 사이트를 공개 버킷 대신 CloudFront와 비공개 원본으로 구성할 수 있는가?
공식 문서
Last updated · 2026.09.05