Amazon S3는 데이터 저장 자체보다 보안 설정이 훨씬 중요 시험에서도 세부 옵션 차이를 자주 묻는 영역


🔐 Amazon S3 – Object Encryption

S3 객체는 4가지 방식으로 암호화 가능

암호화 방식 분류

  • Server-Side Encryption (SSE)
    • SSE-S3
    • SSE-KMS
    • SSE-C
  • Client-Side Encryption

👉 _어떤 상황에 어떤 암호화 방식을 쓰는지_가 핵심


🟦 SSE-S3 (S3 Managed Keys)

AWS가 키를 전부 관리

특징

  • 암호화 알고리즘: AES-256

  • 객체는 서버 측에서 암호화

  • 요청 시 헤더:

    x-amz-server-side-encryption: AES256
    
  • 신규 버킷 & 신규 객체에 기본 활성화

  • 키 관리 부담 ❌

  • 감사(Audit) 제어 ❌

User
 → HTTP(S) +Header
 → S3 Bucket
 → S3Owned Key로 암호화

🟨 SSE-KMS (AWS KMS Keys)

AWS KMS를 이용한 키 관리

특징

  • 암호화 키:

    • AWS Managed KMS Key
    • Customer Managed KMS Key
  • 요청 시 헤더:

    x-amz-server-side-encryption:aws:kms
    
  • CloudTrail을 통한 키 사용 감사 가능

  • 사용자 제어 가능 (Key Policy)

User
 →HTTP(S) +Header
 → S3 Bucket
 → KMS Key
 → 암호화

⚠️ SSE-KMS 제한 사항 (중요)

KMS API 호출 제한에 영향 받음

KMS API 호출

  • 업로드 시:
    • GenerateDataKey
  • 다운로드 시:
    • Decrypt

KMS 요청 제한

  • Region별 초당 요청 제한:
    • 5,500
    • 10,000
    • 30,000 req/s
  • Service Quotas에서 증설 요청 가능

🟥 SSE-C (Customer-Provided Keys)

고객이 키를 직접 관리

특징

  • AWS는 암호화 키를 저장하지 않음
  • 모든 요청에 암호화 키를 HTTP Header로 전달
  • HTTPS 필수
  • 키 분실 시 데이터 복구 ❌
User
 → HTTPS + KeyHeader
 → S3 Bucket
 →Object 암호화

🧑‍💻 Client-Side Encryption

S3에 업로드 전에 클라이언트에서 직접 암호화

특징

  • S3 Client-Side Encryption Library 사용
  • 암호화/복호화:
    • 모두 클라이언트 책임
  • AWS는 암호화 관여 ❌
Client
 → 파일 암호화
 → S3 업로드
 → 암호화된 객체 저장

🔒 Encryption in Transit (전송 중 암호화)

SSL / TLS 기반 암호화

S3 엔드포인트

  • ❌ HTTP (비암호화)
  • ✅ HTTPS (암호화)

중요 포인트

  • HTTPS 사용 권장
  • SSE-C는 HTTPS 필수
  • 대부분의 SDK / 콘솔은 HTTPS 기본 사용

🚫 Force Encryption in Transit

HTTP 접근을 강제로 차단

aws:SecureTransport 조건 사용

  • HTTP 요청 → Deny
  • HTTPS 요청 → Allow
"Condition":{
"Bool":{
"aws:SecureTransport":"false"
}
}

❌ HTTP 접근 차단

✅ HTTPS 접근만 허용


🔁 Default Encryption vs Bucket Policy

Default Encryption

  • SSE-S3 자동 적용
  • 신규 객체에만 적용

Bucket Policy로 강제 암호화

  • 암호화 헤더 없는 PUT 요청 거부
  • SSE-KMS / SSE-C 강제 가능

⚠️ 중요 규칙

Bucket Policy는 Default Encryption보다 먼저 평가됨


🌍 CORS (Cross-Origin Resource Sharing)

브라우저 기반 보안 메커니즘

Origin 정의

Protocol + Domain + Port

예:

  • https://www.example.com

Same Origin

  • http://example.com/app1
  • http://example.com/app2

Cross Origin

  • http://www.example.com
  • http://other.example.com

🔄 CORS 동작 흐름

  1. 브라우저 → Preflight 요청 (OPTIONS)
  2. 서버 → 허용 헤더 반환
  3. 허용 시 실제 요청 수행

주요 헤더

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Methods

🪣 Amazon S3 – CORS 설정 (⭐)

정적 웹사이트 + 리소스 분리 구조에서 자주 등장

HTML Bucket (Website)
 → 이미지 요청
 → Asset Bucket
  • S3 Bucket에 CORS 설정 필수
  • Origin:
    • 특정 도메인
    • 또는

🧱 S3 MFA Delete

중요 삭제 작업에 MFA 요구

MFA 필요 작업

  • 객체 버전 영구 삭제
  • Versioning 중단

MFA 불필요 작업

  • Versioning 활성화
  • 삭제된 버전 목록 조회

제약 사항

  • Versioning 필수
  • Root Account만 설정 가능

📑 S3 Access Logs

모든 S3 접근 기록 로깅

특징

  • 모든 요청 기록
    • 허용 / 거부 포함
  • 대상:
    • 다른 S3 Bucket
  • 동일 Region 필수
  • 분석 도구와 연계 가능

⚠️ Access Logs 주의사항

로깅 버킷 = 모니터링 버킷 ❌

  • 로그 무한 루프 발생
  • 버킷 용량 폭증 위험

🔗 S3 Pre-Signed URLs

임시 접근 URL 발급

생성 방법

  • S3 Console
  • AWS CLI
  • SDK

만료 시간

  • Console: 1분 ~ 12시간
  • CLI: 기본 1시간, 최대 7일

특징

  • URL 사용자는
    • URL 생성자의 권한을 상속
  • GET / PUT 모두 가능

사용 사례

  • 로그인 사용자만 파일 다운로드
  • 임시 업로드 허용
  • 유저 목록이 수시로 바뀌는 경우

🧊 S3 Glacier Vault Lock

WORM (Write Once Read Many)

특징

  • Vault Lock Policy 생성
  • 정책 영구 고정
  • 삭제/수정 ❌
  • 컴플라이언스 / 보존 규정 대응

🔒 S3 Object Lock

객체 단위 WORM (Versioning 필수)

Retention Mode

Compliance

  • 누구도 삭제/수정 ❌
  • Root 포함
  • 기간 단축 ❌

Governance

  • 특정 권한 사용자는 변경 가능

보호 방식

  • Retention Period
  • Legal Hold
    • 무기한 보호
    • s3:PutObjectLegalHold 필요

🎯 S3 Access Points

대규모 버킷 접근 제어 단순화

특징

  • Access Point마다:
    • 고유 DNS
    • 개별 Policy
  • Prefix 단위 권한 관리 가능
/finance → FinanceAccessPoint
/sales   → SalesAccessPoint

🏢 Access Points – VPC Origin

VPC 내부 접근만 허용

요구 조건

  • VPC Endpoint 필요
    • Gateway / Interface
  • 정책 3중 구조
    • VPC Endpoint Policy
    • Access Point Policy
    • Bucket Policy

🧠 S3 Object Lambda

객체 반환 시 Lambda로 실시간 변환

구조

Application
 → S3Object LambdaAccessPoint
 → LambdaFunction
 → 원본 S3Object

사용 사례

  • 개인정보 마스킹
  • XML → JSON 변환
  • 이미지 리사이즈 / 워터마크
  • 사용자별 응답 변형

🧾 S3 Security 요약

  • SSE-S3 = 기본
  • SSE-KMS = 감사/제어 필요 시
  • SSE-C = 고객 키 직접 관리
  • HTTPS 강제 = aws:SecureTransport
  • Bucket Policy > Default Encryption
  • CORS = 브라우저 문제
  • MFA Delete = Root만 설정
  • Pre-Signed URL = 임시 권한 위임
  • Object Lock / Vault Lock = 컴플라이언스
  • Access Point = 대규모 권한 관리
  • Object Lambda = 동적 데이터 가공