Part 1: Amazon S3 Advanced
1. 스토리지 클래스 간 이동
이동 계층 구조
Standard
↓
Standard IA
↓
Intelligent Tiering
↓
One-Zone IA
↓
Glacier Instant Retrieval
↓
Glacier Flexible Retrieval
↓
Glacier Deep Archive
이동 기준
- 자주 접근하지 않는 객체 → Standard IA로 이동
- 빠른 접근 불필요한 아카이브 → Glacier 또는 Glacier Deep Archive로 이동
- Lifecycle Rules로 자동화 가능
2. Lifecycle Rules (수명 주기 규칙)
규칙 유형
| 유형 | 설명 | 예시 |
|---|
| Transition Actions | 다른 스토리지 클래스로 전환 | 생성 60일 후 Standard IA로 이동 |
| Expiration Actions | 일정 시간 후 삭제 | 365일 후 액세스 로그 삭제 |
Expiration Actions 활용
- 오래된 파일 버전 삭제 (버전 관리 활성화 시)
- 미완료 Multi-Part 업로드 삭제
규칙 필터링
| 필터 | 예시 |
|---|
| Prefix | s3://mybucket/mp3/* |
| Tags | Department: Finance |
3. Lifecycle Rules 시나리오
시나리오 1: 썸네일 이미지 관리
요구사항:
- EC2에서 프로필 사진 업로드 시 썸네일 생성
- 썸네일: 60일만 보관, 재생성 가능
- 원본: 60일간 즉시 접근, 이후 6시간 대기 가능
솔루션:
| 파일 | 스토리지 클래스 | Lifecycle Rule |
|---|
| 원본 이미지 | Standard | 60일 후 → Glacier |
| 썸네일 | One-Zone IA | 60일 후 → 삭제 (Expiration) |
시나리오 2: 삭제된 객체 복구
요구사항:
- 30일간: 삭제된 객체 즉시 복구 가능
- 30~365일: 48시간 내 복구 가능
솔루션:
- S3 Versioning 활성화 (삭제 시 Delete Marker만 추가)
- Noncurrent versions → Standard IA로 전환
- 이후 Noncurrent versions → Glacier Deep Archive로 전환
4. S3 Analytics - Storage Class Analysis
개요
- 적절한 스토리지 클래스 전환 시점 추천
- Lifecycle Rules 설정의 첫 단계로 활용
특징
| 항목 | 내용 |
|---|
| 지원 클래스 | Standard, Standard IA |
| 미지원 | One-Zone IA, Glacier ❌ |
| 리포트 업데이트 | 매일 |
| 분석 시작 | 24~48시간 후 |
| 출력 형식 | CSV 리포트 |
5. S3 Event Notifications
지원 이벤트 유형
S3:ObjectCreated
S3:ObjectRemoved
S3:ObjectRestore
S3:Replication
- 등...
대상 서비스
| 대상 | 설명 |
|---|
| Lambda Function | 서버리스 처리 |
| SQS | 메시지 큐 |
| SNS | 알림 |
필터링
- 객체 이름으로 필터링 가능 (예:
*.jpg)
사용 사례
특징
- 이벤트 개수 제한 없음
- 보통 몇 초 내 전달 (최대 1분 이상 걸릴 수도 있음)
IAM 권한 설정
- Lambda → Lambda Resource Policy
- SQS → SQS Resource (Access) Policy
- SNS → SNS Resource (Access) Policy
6. S3 Event Notifications with EventBridge
EventBridge 연동 장점
| 기능 | 설명 |
|---|
| 고급 필터링 | JSON 규칙으로 메타데이터, 객체 크기, 이름 등 필터 |
| 다중 대상 | Step Functions, Kinesis Streams/Firehose 등 18개+ 서비스 |
| 추가 기능 | 이벤트 아카이브, 리플레이, 신뢰성 있는 전달 |
구조
S3 Bucket → (모든 이벤트) → EventBridge → (규칙) → 18개+ AWS 서비스
7. S3 Baseline Performance
기본 성능
| 항목 | 수치 |
|---|
| 지연시간 | 100~200ms |
| PUT/COPY/POST/DELETE | 3,500 요청/초/prefix |
| GET/HEAD | 5,500 요청/초/prefix |
Prefix 개념
bucket/folder1/sub1/file → prefix: /folder1/sub1/
bucket/folder1/sub2/file → prefix: /folder1/sub2/
bucket/1/file → prefix: /1/
bucket/2/file → prefix: /2/
성능 확장
- Prefix 개수 제한 없음
- 4개 Prefix로 분산 시: 22,000 GET/HEAD 요청/초 가능
8. S3 Performance 최적화
8.1 Multi-Part Upload
| 조건 | 권장 사항 |
|---|
| 파일 > 100MB | 권장 |
| 파일 > 5GB | 필수 |
장점: 병렬 업로드로 전송 속도 향상
큰 파일 → [Part 1] [Part 2] [Part 3] ... → 병렬 업로드 → S3
8.2 S3 Transfer Acceleration
동작 방식:
파일 (미국) → Edge Location → (AWS 프라이빗 네트워크) → S3 버킷 (호주)
↑ 빠름 (공용 인터넷) ↑ 빠름 (AWS 내부)
- Edge Location을 통해 전송 속도 향상
- Multi-Part Upload와 호환
8.3 S3 Byte-Range Fetches
용도 1: 다운로드 속도 향상
S3 파일 → [Part 1] [Part 2] ... [Part N] → 병렬 다운로드
용도 2: 부분 데이터만 조회
S3 파일 → [Header 부분만 요청] → 파일 헤더 정보 획득
9. S3 Metadata & Tags
User-Defined Object Metadata
| 항목 | 설명 |
|---|
| 형식 | Name-Value (Key-Value) 쌍 |
| 접두사 | x-amz-meta- 필수 |
| 저장 | 소문자로 저장됨 |
| 조회 | 객체 조회 시 함께 반환 |
예시:
x-amz-meta-origin: paris
x-amz-meta-author: john
S3 Object Tags
| 항목 | 설명 |
|---|
| 형식 | Key-Value 쌍 |
| 용도 | 세분화된 권한, 분석 (S3 Analytics 그룹화) |
예시:
Project: Blue
PHI: True
Department: Finance
검색 제한
⚠️ Metadata와 Tags로 직접 검색 불가!
→ DynamoDB 같은 외부 DB를 검색 인덱스로 사용해야 함
Part 2: Amazon S3 Security
10. S3 객체 암호화
암호화 방식 총정리
| 방식 | 키 관리 | 특징 |
|---|
| SSE-S3 | AWS 관리 | 기본값, AES-256 |
| SSE-KMS | AWS KMS | 감사 추적 가능 |
| SSE-C | 고객 관리 | HTTPS 필수, 키를 매 요청마다 전달 |
| Client-Side | 고객 관리 | 클라이언트에서 암/복호화 |
11. SSE-S3 (Server-Side Encryption with S3)
특징
- AWS가 키를 소유, 관리
- 암호화 타입: AES-256
- 새 버킷/객체에 기본 활성화
헤더
"x-amz-server-side-encryption": "AES256"
동작 흐름
User → HTTP(S) + Header → S3 → S3 Owned Key로 암호화 → 저장
12. SSE-KMS (Server-Side Encryption with KMS)
특징
- AWS KMS가 키 관리
- 사용자가 키 제어 가능
- CloudTrail로 키 사용 감사 가능
헤더
"x-amz-server-side-encryption": "aws:kms"
KMS 제한 사항 ⚠️
| 작업 | API 호출 |
|---|
| 업로드 | GenerateDataKey |
| 다운로드 | Decrypt |
- KMS 할당량에 포함 (리전별 5,500 / 10,000 / 30,000 req/s)
- 할당량 초과 시 → Service Quotas Console에서 증가 요청
13. SSE-C (Server-Side Encryption with Customer Key)
특징
- 고객이 키를 완전 관리 (AWS 외부)
- AWS는 키를 저장하지 않음
- HTTPS 필수
- 매 요청마다 HTTP 헤더에 키 포함
동작 흐름
User → HTTPS + Key in Header → S3 → 고객 키로 암호화 → 저장 (키는 버림)
14. Client-Side Encryption
특징
- 클라이언트에서 암호화 후 업로드
- 클라이언트에서 다운로드 후 복호화
- 고객이 키와 암호화 사이클 완전 관리
라이브러리
- Amazon S3 Client-Side Encryption Library 사용
동작 흐름
파일 → 클라이언트 키로 암호화 → 암호화된 파일 → HTTP(S) → S3 저장
15. 전송 중 암호화 (Encryption in Transit)
S3 엔드포인트
| 엔드포인트 | 암호화 |
|---|
| HTTP | ❌ 암호화 안 됨 |
| HTTPS | ✅ SSL/TLS 암호화 |
권장 사항
- HTTPS 권장
- SSE-C 사용 시 HTTPS 필수
HTTPS 강제 (Bucket Policy)
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
16. Default Encryption vs Bucket Policy
| 항목 | 설명 |
|---|
| Default Encryption | SSE-S3가 기본 적용 |
| Bucket Policy | 특정 암호화 헤더 없으면 거부 가능 (SSE-KMS, SSE-C) |
⚠️ Bucket Policy가 Default Encryption보다 먼저 평가됨
17. CORS (Cross-Origin Resource Sharing)
Origin이란?
Origin = Scheme(Protocol) + Host(Domain) + Port
예: https://www.example.com (HTTPS 기본 포트 443)
Same Origin vs Different Origin
| 비교 | 예시 |
|---|
| Same Origin | http://example.com/app1 & http://example.com/app2 |
| Different Origin | http://www.example.com & http://other.example.com |
CORS 동작 흐름
1. 브라우저 → Cross-Origin 서버에 Preflight Request (OPTIONS)
2. Cross-Origin 서버 → CORS 헤더 응답
- Access-Control-Allow-Origin시나리오: 한 S3 버킷(HTML)에서 다른 S3 버킷(Assets)의 리소스 요청
- Access-Control-Allow-Methods
3. 브라우저 → 실제 요청 수행
S3 CORS 설정
시나리오: 한 S3 버킷(HTML)에서 다른 S3 버킷(Assets)의 리소스 요청
my-bucket-html (정적 웹사이트)
↓ 이미지 요청
my-bucket-assets (정적 웹사이트)
→ CORS 헤더 설정 필요!
설정:
- 특정 Origin 허용:
http://my-bucket-html.s3-website.us-west-2.amazonaws.com
- 모든 Origin 허용:
*
💡 시험 단골 문제!
18. MFA Delete
MFA 필요한 작업
| 작업 | MFA 필요 |
|---|
| 객체 버전 영구 삭제 | ✅ 필요 |
| 버전 관리 일시 중지 | ✅ 필요 |
| 버전 관리 활성화 | ❌ 불필요 |
| 삭제된 버전 목록 조회 | ❌ 불필요 |
조건
- 버전 관리 활성화 필수
- 버킷 소유자(root 계정)만 MFA Delete 활성화/비활성화 가능
19. S3 Access Logs
개요
- 감사 목적으로 S3 버킷의 모든 접근 로깅
- 승인/거부된 모든 요청 기록
설정 조건
⚠️ 주의: 로깅 루프 방지
❌ 잘못된 설정: 모니터링 버킷 = 로깅 버킷
→ 무한 루프 발생 → 버킷 용량 기하급수적 증가!
✅ 올바른 설정: 별도의 로깅 전용 버킷 사용
20. S3 Pre-Signed URLs
개요
- 임시로 S3 객체에 접근 권한 부여
- URL 생성자의 권한을 상속
URL 만료 시간
| 생성 방법 | 만료 시간 |
|---|
| S3 Console | 1분 ~ 720분 (12시간) |
| AWS CLI | 기본 3600초, 최대 604800초 (168시간 = 7일) |
CLI 예시
aws s3 presign s3://my-bucket/my-file.txt --expires-in 3600
사용 사례
- 로그인 사용자에게만 프리미엄 비디오 다운로드 허용
- 동적으로 파일 다운로드 URL 생성
- 특정 위치에 임시 업로드 허용
21. S3 Access Points
개요
- S3 버킷의 보안 관리 간소화
- 대규모 접근 관리에 유용
구성 요소
| 요소 | 설명 |
|---|
| DNS name | Internet Origin 또는 VPC Origin |
| Access Point Policy | Bucket Policy와 유사 |
예시 구조
S3 Bucketf
├── /finance/...
├── /sales/...
└── /analytics/...
Access Points:
├── Finance Access Point → /finance prefix에 R/W
├── Sales Access Point → /sales prefix에 R/W
└── Analytics Access Point → 전체 버킷에 R
VPC Origin Access Point
- VPC 내부에서만 접근 가능하도록 설정
- VPC Endpoint 생성 필요 (Gateway 또는 Interface)
- VPC Endpoint Policy에서 버킷 + Access Point 접근 허용 필요
22. S3 Object Lambda
개요
- Lambda 함수로 객체 조회 전 내용 변환
- 하나의 S3 버킷 + Access Point + Object Lambda Access Point 구성
동작 흐름
애플리케이션 → S3 Object Lambda Access Point → Lambda 함수 → S3 Access Point → S3 Bucket
↓
객체 변환 처리
사용 사례
| 사용 사례 | 설명 |
|---|
| PII 삭제 | 분석/비프로덕션 환경용 개인정보 마스킹 |
| 데이터 형식 변환 | XML → JSON 변환 |
| 이미지 처리 | 요청자별 리사이징, 워터마크 추가 |
핵심 요약 표
암호화 방식 비교
| 방식 | 키 관리자 | 키 저장 | HTTPS | 감사 |
|---|
| SSE-S3 | AWS | AWS | 선택 | ❌ |
| SSE-KMS | AWS KMS | AWS | 선택 | ✅ CloudTrail |
| SSE-C | 고객 | 고객 | 필수 | ❌ |
| Client-Side | 고객 | 고객 | 선택 | ❌ |
성능 최적화 방식
| 방식 | 용도 |
|---|
| Multi-Part Upload | 대용량 업로드 (>100MB 권장, >5GB 필수) |
| Transfer Acceleration | 원거리 전송 속도 향상 |
| Byte-Range Fetches | 병렬 다운로드, 부분 조회 |
| Prefix 분산 | 요청 처리량 확장 |