home
SAA-C03

[storage] Amazon S3

그냥 파일을 담는 곳이 아닙니다. 버전 관리, 복제, 암호화, 접근 제어까지 — 객체 스토리지의 진짜 실력을 봅니다.

스토리지 클래스(비용/접근 계층)는 s3-storage-classes.md에서 별도로 다룬다. 이 노트는 S3의 핵심 기능 — 버저닝·복제·암호화·접근 제어·이벤트·Object Lock 에 집중한다.

One-Line Summary

Amazon S3사실상 무한히 확장되는 객체 스토리지로, 파일(객체)을 버킷에 키-값으로 저장하고 HTTP API로 접근한다. 11 9s(99.999999999%) 내구성과 리전 다중 AZ 저장이 기본이며, 정적 자산·데이터 레이크·백업·아카이브의 표준이다. 시험에서는 버저닝 / 복제(CRR·SRR) / 암호화(SSE-S3·KMS·C) / 접근 제어(버킷 정책·Block Public Access·presigned) / 이벤트 알림 / Object Lock(WORM) 이 핵심이다.

뭔지 (What / Why) — 파일 시스템이 아니다

S3는 EBS·EFS 같은 파일/블록 스토리지가 아니라 객체 스토리지다. 마운트해서 랜덤 쓰기를 하는 게 아니라, 객체 단위로 통째로 PUT/GET한다(HTTP API).

버킷(전역 유일 이름) 
  └─ 객체 = 키(예: photos/2026/cat.jpg) + 값(데이터) + 메타데이터 + 버전ID
     * 폴더처럼 보이는 건 키의 접두사(prefix)일 뿐, 실제 계층 구조는 없다(flat)
성질내용
확장성객체 수·용량 사실상 무제한 (객체 하나 최대 5TB)
내구성11 9s — 여러 AZ에 자동 중복 저장
범위버킷은 리전에 생성, 단 버킷 이름은 전역 유일
일관성강력한 read-after-write 일관성(쓰고 바로 읽으면 최신값) — 별도 설정 불필요
접근REST API / SDK / CLI (파일시스템 마운트 아님)

"무한 확장 객체 저장 / 정적 자산 / 데이터 레이크 / 백업·아카이브" = S3. "마운트해서 여러 서버가 파일 공유" 는 EFS/FSx(S3 아님).

버저닝 (Versioning) — 실수/삭제 보호 (빈출)

버킷에 버저닝을 켜면 같은 키에 덮어써도 이전 버전이 보존되고, 삭제해도 실제로 지워지지 않고 **삭제 마커(delete marker)**가 얹힌다.

cat.jpg 업로드      → v1
cat.jpg 다시 업로드 → v2 (v1도 그대로 보존)
cat.jpg 삭제        → delete marker (v1·v2는 남아있음, 복구 가능)
  • 실수로 덮어쓰기/삭제한 데이터를 되돌릴 수 있다.
  • 한 번 켜면 끄기(disable)는 불가, 일시 중단(suspend)만 된다.
  • 복제(Replication)의 전제 조건이기도 하다.

시험 트리거: "protect against accidental delete/overwrite" → Versioning(+ 강화하려면 MFA Delete).

복제 (Replication) — CRR vs SRR (빈출)

객체를 다른 버킷으로 자동 복제한다. 양쪽 버킷 모두 버저닝 필수, 복제는 비동기.

CRR (Cross-Region)SRR (Same-Region)
대상다른 리전 버킷같은 리전 다른 버킷
대표 용도재해 복구(DR), 지역 간 지연 감소, 규정상 지역 분산로그 집계, 운영/테스트 계정 간 복제, 데이터 주권

핵심 포인트:

  • 소급 복제 안 됨 — 켠 이후 객체만. 기존 객체는 S3 Batch Replication 필요.
  • 다른 계정으로도 복제 가능(교차 계정 백업).
  • 삭제 마커 복제 여부 등은 옵션.

시험 트리거: "replicate to another region for DR/latency/compliance" → CRR. "same region, log aggregation / cross-account" → SRR. "왜 복제가 안 되지" → 버저닝 미설정 또는 기존 객체(소급 안 됨).

암호화 (Encryption) — 4가지 (빈출)

S3는 저장 데이터 암호화를 여러 방식으로 제공한다. (2023년부터 모든 새 객체는 기본 SSE-S3로 암호화된다.)

방식키 관리언제
SSE-S3S3가 키 관리(AES-256)기본값. 별 요구 없으면 이걸로 충분
SSE-KMSKMS 키 사용키 접근 감사(CloudTrail)·권한 통제·회전이 필요할 때
SSE-C고객이 키 제공키를 AWS에 안 맡기고 직접 들고 올 때
Client-Side고객이 업로드 전에 암호화S3 도달 전부터 암호화해야 할 때
  • SSE-KMS 주의: 객체가 많으면 KMS 호출 비용·스로틀 → S3 Bucket Key로 호출 절감(KMS 노트 참고).
  • 전송 중 암호화: HTTPS(TLS). 버킷 정책으로 aws:SecureTransport를 강제해 HTTP 차단 가능.

시험 트리거: "encrypt at rest, audit key usage / control key access" → SSE-KMS. "manage encryption keys yourself, keys never stored in AWS" → SSE-C. 자세한 키/봉투암호화는 security/kms.md.

접근 제어 & 보안 (빈출)

S3 접근은 여러 계층으로 통제된다. 기본은 전부 비공개(private) 다.

메커니즘역할
Block Public Access계정·버킷 수준에서 퍼블릭 노출을 원천 차단(기본 ON). 실수 방지 최우선 방어선
버킷 정책(Bucket Policy)버킷에 붙는 리소스 기반 정책(JSON) — 교차 계정 허용·조건(IP·HTTPS 강제)
IAM 정책사용자/역할(주체) 기반 권한
ACL객체/버킷 단위 레거시 방식(신규 설계는 지양, 정책 사용)
Presigned URL생성자의 권한으로 시간 제한 임시 URL 발급 — 비공개 객체를 잠깐만 공유
  • 정적 웹사이트를 공개하려면 Block Public Access 해제 + 버킷 정책 허용. 하지만 비공개 오리진 + CloudFront + OAC가 더 안전(→ cloudfront.md).
  • VPC에서 사설로 접근은 S3 Gateway Endpoint(무료, NAT 불필요 → vpc-endpoint-privatelink.md).

시험 트리거: "grant temporary download access to a private object" → Presigned URL. "prevent any public exposure" → Block Public Access. "cross-account access to a bucket" → 버킷 정책.

이벤트 알림 (Event Notifications)

객체 생성/삭제 등 이벤트가 나면 다른 서비스를 트리거한다.

S3 이벤트(예: s3:ObjectCreated:*)
  → SNS / SQS / Lambda 로 직접 통지
  → 또는 EventBridge 로 보내 더 풍부한 라우팅/필터
  • 대표 패턴: 업로드 → Lambda로 썸네일 생성 / 바이러스 스캔 / 메타데이터 색인.
  • 더 정교한 필터·다수 대상·재시도가 필요하면 EventBridge 경유.

시험 트리거: "process an object right after upload" → S3 event → Lambda(또는 SQS/SNS/EventBridge).

Object Lock — WORM (규정 준수, 빈출)

Write-Once-Read-Many — 지정 기간 동안 객체를 삭제·수정 못 하게 잠근다. 규정(금융·의료 감사 로그)에 쓴다. 버저닝 필수.

모드의미
Governance특별 권한(s3:BypassGovernanceRetention)이 있으면 해제·삭제 가능
Compliance누구도(루트조차) 보존 기간 전엔 삭제 불가 — 가장 엄격
Legal Hold기간 없이, 명시적으로 풀 때까지 무기한 보존

시험 트리거: "records must be immutable / WORM / cannot be deleted for N years (compliance)" → Object Lock (Compliance 모드). "관리자가 필요 시 예외 삭제" → Governance.

대용량·성능·기타 (SAA 레벨에서 알아둘 것)

주제요점
Multipart Upload큰 객체를 나눠 병렬 업로드. 100MB↑ 권장, 5GB↑ 필수(객체 최대 5TB)
Transfer Acceleration먼 지역 업로드를 CloudFront 엣지로 가속(→ data-transfer.md)
Byte-Range Fetch객체 일부만 병렬로 가져와 다운로드 가속
S3 Select객체 하나에서 SQL로 필요한 부분만 조회(전체 스캔·다운로드 회피). 여러 객체 분석은 Athena
S3 Batch Operations수십억 객체에 대량 작업(복사·태깅·복원 등) 일괄 실행
Access Points공유 버킷에 용도별 이름 있는 접근 지점 + 개별 정책
Requester Pays다운로드 비용을 요청자가 부담(대용량 데이터 공유 시)
MFA Delete버전 삭제·버저닝 중단에 MFA 요구(추가 보호)

Common Wrong Directions

오답 방향왜 부족한가
S3를 파일 시스템처럼 마운트해 공유객체 스토리지(HTTP API) → 공유 파일은 EFS/FSx
삭제/덮어쓰기 보호에 백업만버저닝(+MFA Delete)이 1차 방어
복제가 되는데 기존 객체가 안 옴복제는 소급 안 됨Batch Replication
복제하려는데 안 켜짐양쪽 버저닝 필수
키 감사·권한 통제 필요한데 SSE-S3감사·통제는 SSE-KMS
비공개 객체 임시 공유에 버킷을 퍼블릭Presigned URL
규정상 삭제 금지를 버킷 정책으로만Object Lock(Compliance) = WORM
정적 사이트 HTTPS를 S3 웹호스팅만으로S3 웹호스팅은 HTTP → CloudFront 필요
S3 하나 객체 부분조회에 Athena단일 객체 부분은 S3 Select, 다수는 Athena

Exam Triggers

문제에서 이런 표현이 나오면떠올릴 것
"durable object storage, scales infinitely"S3
"protect against accidental delete/overwrite"Versioning (+MFA Delete)
"replicate to another region (DR/latency/compliance)"CRR
"same-region replication / log aggregation"SRR
"encrypt at rest and audit key access"SSE-KMS
"customer-provided encryption keys"SSE-C
"temporary access to a private object"Presigned URL
"block all public access"Block Public Access
"trigger processing after upload"S3 event → Lambda/SQS/SNS/EventBridge
"immutable / WORM / cannot delete for years"Object Lock (Compliance)
"upload large files reliably / faster from far region"Multipart Upload / Transfer Acceleration
"query a subset of one object with SQL"S3 Select
"access S3 privately from VPC without NAT"Gateway Endpoint

Memory Sentence

S3는 11 9s 내구성의 무한 객체 스토리지(강력한 read-after-write 일관성). 실수 보호는 버저닝(+MFA Delete), 지역 분산/DR은 CRR·같은 리전은 SRR(양쪽 버저닝 필수·소급 안 됨). 암호화는 기본 SSE-S3·감사면 SSE-KMS·직접 키면 SSE-C. 접근은 기본 비공개(Block Public Access)·정책·임시는 Presigned. 업로드 후 처리는 이벤트→Lambda, 규정 불변 보관은 Object Lock(WORM). 클래스·비용은 s3-storage-classes 노트.

References

댓글

아직 댓글이 없습니다.