$ yh.log
Amazon S3 Advanced & Security 정리

Amazon S3 Advanced & Security 정리

AWSS3Security자격증

작성자 : 오예환 | 작성일 : 2026-01-10 | 수정일 : 2026-01-10 | 조회수 :

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 업로드 삭제

규칙 필터링

필터예시
Prefixs3://mybucket/mp3/*
TagsDepartment: Finance

3. Lifecycle Rules 시나리오

시나리오 1: 썸네일 이미지 관리

요구사항:

  • EC2에서 프로필 사진 업로드 시 썸네일 생성
  • 썸네일: 60일만 보관, 재생성 가능
  • 원본: 60일간 즉시 접근, 이후 6시간 대기 가능

솔루션:

파일스토리지 클래스Lifecycle Rule
원본 이미지Standard60일 후 → Glacier
썸네일One-Zone IA60일 후 → 삭제 (Expiration)

시나리오 2: 삭제된 객체 복구

요구사항:

  • 30일간: 삭제된 객체 즉시 복구 가능
  • 30~365일: 48시간 내 복구 가능

솔루션:

  1. S3 Versioning 활성화 (삭제 시 Delete Marker만 추가)
  2. Noncurrent versions → Standard IA로 전환
  3. 이후 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)

사용 사례

  • S3 업로드 시 썸네일 자동 생성

특징

  • 이벤트 개수 제한 없음
  • 보통 몇 초 내 전달 (최대 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/DELETE3,500 요청/초/prefix
GET/HEAD5,500 요청/초/prefix

Prefix 개념

Prefix란? 객체 키(Key)에서 파일명을 제외한 경로 부분입니다.

bucket/folder1/sub1/file prefix: /folder1/sub1/
bucket/folder1/sub2/file prefix: /folder1/sub2/
bucket/1/file prefix: /1/
bucket/2/file prefix: /2/

쉽게 이해하기: 컴퓨터의 폴더 경로와 비슷합니다.

S3 객체 키:  images/2026/01/photo.jpg
              └─────────┬─────────┘ └──┬──┘
                   Prefix          파일명
 
= "images/2026/01/" 폴더 안에 있는 "photo.jpg" 파일

왜 Prefix가 중요한가?

S3는 Prefix별로 성능 한도가 분리됩니다.

┌─────────────────────────────────────────────────────────────┐
                      S3 버킷

  /images/ 3,500 PUT + 5,500 GET /
  /videos/ 3,500 PUT + 5,500 GET /
  /documents/ 3,500 PUT + 5,500 GET /
  /logs/ 3,500 PUT + 5,500 GET /

  = 14,000 PUT + 22,000 GET / 가능!
└─────────────────────────────────────────────────────────────┘

잘못된 설계 vs 좋은 설계:

 잘못된 설계 (모든 파일이 하나의 Prefix에):
/data/file1.jpg
/data/file2.jpg
/data/file3.jpg
 최대 5,500 GET/초
 
 좋은 설계 (Prefix 분산):
/data/2026/01/file1.jpg
/data/2026/02/file2.jpg
/data/2026/03/file3.jpg
 Prefix별로 5,500 GET/초씩 = 훨씬 많은 요청 처리 가능

성능 확장

  • Prefix 개수 제한 없음
  • 4개 Prefix로 분산 시: 22,000 GET/HEAD 요청/초 가능

💡 시험 포인트: 높은 처리량이 필요하면 여러 Prefix로 데이터를 분산하세요!


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를 검색 인덱스로 사용해야 함

왜 검색이 안 될까?

S3는 객체 저장소이지 데이터베이스가 아닙니다. 객체의 Key(경로)로만 조회할 수 있고, Metadata나 Tags 값으로 "이 조건에 맞는 객체를 찾아줘"라는 쿼리가 불가능합니다.

 S3에서 불가능한 쿼리:
"Department가 Finance인 모든 파일을 찾아줘"
"2026년 1월에 생성된 파일 중 Author가 john인 것만"
 
 S3에서 가능한 조회:
"s3://bucket/folder/file.txt 파일을 가져와" (정확한 Key 필요)

해결 방법: 외부 검색 인덱스 사용

┌─────────────────────────────────────────────────────────────────┐
                        아키텍처 예시

  1. 파일 업로드
     User S3 버킷 (파일 + Metadata/Tags 저장)                   │

  2. 인덱스 저장 (Lambda 트리거 또는 직접)                         │

           DynamoDB
     ┌─────────────────────────────────────┐
 S3Key Department Author
     │───────────────│────────────│────────│
 /docs/a.pdf Finance john
 /docs/b.pdf Sales jane
 /imgs/c.jpg Finance john
     └─────────────────────────────────────┘

  3. 검색
     User DynamoDB 쿼리 ("Department = Finance")                │
 S3Key 목록 반환 S3에서 파일 다운로드
└─────────────────────────────────────────────────────────────────┘

구현 흐름:

단계설명
1. 업로드S3에 파일 업로드 (Metadata/Tags 포함)
2. 인덱싱Lambda가 S3 이벤트 감지 → DynamoDB에 메타정보 저장
3. 검색DynamoDB에서 조건 검색 → S3 Key 목록 획득
4. 조회획득한 Key로 S3 객체 직접 접근

💡 시험 포인트: "S3에서 메타데이터로 검색하려면?" → DynamoDB를 검색 인덱스로 사용


Part 2: Amazon S3 Security

10. S3 객체 암호화

암호화 방식 총정리

방식키 관리특징
SSE-S3AWS 관리기본값, AES-256
SSE-KMSAWS 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 EncryptionSSE-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! 하나라도 다르면 Different Origin입니다.

Same Origin vs Different Origin

URL 비교Same Origin?이유
http://example.com/app1 & http://example.com/app2✅ Same경로만 다름 (경로는 Origin에 포함 안 됨)
http://example.com & https://example.com❌ DifferentScheme 다름 (http vs https)
http://example.com & http://www.example.com❌ DifferentHost 다름
http://example.com & http://example.com:8080❌ DifferentPort 다름 (80 vs 8080)
http://example.com:80 & http://example.com✅ Same같은 포트 (HTTP 기본 포트 80)

CORS는 어디서 설정하나?

⚠️ 자원을 제공하는 서버(B)에서 CORS를 설정합니다! 요청하는 쪽(A)이 아닙니다.

CORS는 **"내 자원을 누가 사용해도 되는지"**를 자원 소유자가 결정하는 정책입니다.

┌─────────────────┐                              ┌─────────────────┐
    A 서버    B 서버
   (요청자)      │                              │  (자원 제공자)   │

  "B의 이미지    │                              │  CORS 설정 ←── 여기서 설정!
│   주세요"  "A는 허용함"
└────────┬────────┘                              └────────┬────────┘

              ┌─────────────┐
         └─────────────▶│   브라우저   │◀─────────────────┘

 A에서 받은 웹페이지 실행
 B에 자원 요청 (Cross-Origin)
 B가 "A 허용" 응답했나 확인
 허용됐으면 자원 사용
                        └─────────────┘

쉽게 비유하면:

  • A = 손님 (자원을 요청하는 쪽)
  • B = 가게 주인 (자원을 가진 쪽)
  • CORS = 가게 출입 정책

→ "누구를 들여보낼지"는 **가게 주인(B)**이 정합니다!

CORS 동작 흐름

1. 브라우저가 A Origin에서 웹페이지 로드
2. 웹페이지에서 B 서버에 자원 요청 (Cross-Origin 감지)
3. 브라우저 B 서버에 Preflight Request (OPTIONS)
4. B 서버 CORS 헤더 응답
   - Access-Control-Allow-Origin: "A 허용"
   - Access-Control-Allow-Methods: "GET, POST 허용"
5. 브라우저가 허용 확인 실제 요청 수행

S3 CORS 설정

시나리오: 한 S3 버킷(HTML)에서 다른 S3 버킷(Assets)의 리소스 요청

my-bucket-html (A)              my-bucket-assets (B)
   (웹페이지)                       (이미지 저장)

      이미지 요청
 ──────────────────────────────▶

                          CORS 설정은 여기!
                          "A Origin 허용"

B 버킷(my-bucket-assets)에 CORS 설정:

  • 특정 Origin 허용: http://my-bucket-html.s3-website.us-west-2.amazonaws.com
  • 모든 Origin 허용: *

💡 시험 단골 문제! "CORS 에러가 발생하면 어디서 설정을 변경해야 하나요?" → 자원을 제공하는 서버(B)


18. MFA Delete

MFA 필요한 작업

작업MFA 필요
객체 버전 영구 삭제✅ 필요
버전 관리 일시 중지✅ 필요
버전 관리 활성화❌ 불필요
삭제된 버전 목록 조회❌ 불필요

조건

  • 버전 관리 활성화 필수
  • 버킷 소유자(root 계정)만 MFA Delete 활성화/비활성화 가능

19. S3 Access Logs

개요

  • 감사 목적으로 S3 버킷의 모든 접근 로깅
  • 승인/거부된 모든 요청 기록

설정 조건

항목조건
로깅 버킷 위치같은 AWS 리전

⚠️ 주의: 로깅 루프 방지

 잘못된 설정: 모니터링 버킷 = 로깅 버킷
 무한 루프 발생 버킷 용량 기하급수적 증가!
 
 올바른 설정: 별도의 로깅 전용 버킷 사용

20. S3 Pre-Signed URLs

개요

  • 임시로 S3 객체에 접근 권한 부여
  • URL 생성자의 권한을 상속

URL 만료 시간

생성 방법만료 시간
S3 Console1분 ~ 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 nameInternet Origin 또는 VPC Origin
Access Point PolicyBucket 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-S3AWSAWS선택
SSE-KMSAWS KMSAWS선택✅ CloudTrail
SSE-C고객고객필수
Client-Side고객고객선택

성능 최적화 방식

방식용도
Multi-Part Upload대용량 업로드 (>100MB 권장, >5GB 필수)
Transfer Acceleration원거리 전송 속도 향상
Byte-Range Fetches병렬 다운로드, 부분 조회
Prefix 분산요청 처리량 확장