본문으로 건너뛰기
김신건의 로그

[AWS] S3: object storage, storage classes, lifecycle

· 수정 · 📖 약 3분 · 1,217자/단어 #aws #s3 #storage #object-store #cloud
S3, Simple Storage Service, S3 storage class, S3 lifecycle, S3 Intelligent-Tiering, S3 Glacier, S3 versioning

정의

S3 = AWS 의 object storage. bucket + key + object. 11 9’s durability (99.999999999%), 무한 확장. 2026 시점 인터넷의 핵심 스토리지 플랫폼.

사용 상황

상황S3 선택 이유
정적 자산 (이미지, JS, CSS)aws-cloudfront-cdn 와 조합
로그 장기 보관Lifecycle 로 Glacier 자동 이동
ML 학습 데이터 / 모델S3 → SageMaker 직접 연동
백업 / DRCross-Region Replication
데이터 레이크S3 + Athena + Glue
사용자 파일 업로드Presigned URL 로 서버 우회
컴플라이언스 아카이빙Object Lock WORM

Storage Class

Class용도비용검색 latency
Standard자주 접근$0.023/GBms
Intelligent-Tiering자동 자주/덜 자주 분류variesms
Standard-IA가끔 접근더 cheap, retrieval feems
One Zone-IA단일 AZ + 가끔 접근더 cheapms
Glacier Instant Retrievalarchive + 즉시 접근매우 cheapms
Glacier Flexible Retrievalarchive매우 cheap분~시간
Glacier Deep Archive장기 archive가장 cheap12+ 시간

Intelligent-Tiering 은 접근 패턴 예측 불가 시 최적. 30일 미접근 시 IA 로 자동 이동.

Lifecycle Policy

Rules:
  - Id: archive-old-logs
    Filter: { Prefix: logs/ }
    Transitions:
      - Days: 30
        StorageClass: STANDARD_IA
      - Days: 90
        StorageClass: GLACIER
    Expiration:
      Days: 365
    AbortIncompleteMultipartUploads:
      DaysAfterInitiation: 7

비용 대폭 절감. 사용 안 하는 데이터를 자동 cheaper class 로.

AbortIncompleteMultipartUploads 는 반드시 설정. 미완료 multipart 가 비용 누수.

Replication (CRR / SRR)

flowchart LR
    SrcBucket["Source Bucket<br/>(us-east-1)"] -->|CRR| DstBucket["Dest Bucket<br/>(ap-northeast-2)"]
    SrcBucket2["Source Bucket A"] -->|SRR| DstBucket2["Dest Bucket B<br/>(같은 region)"]
종류의미
CRR (Cross-Region Replication)다른 리전으로 복제 (DR, 지연 감소)
SRR (Same-Region Replication)같은 리전 내 복제 (로그 집계, 테스트)
  • Source bucket: Versioning 활성화 필수.
  • 신규 객체만 복제 (기존 객체는 S3 Batch Operations 으로 별도 복제).
  • Delete Marker: 기본 복제 안 됨 (설정 가능).
  • 복제 시간 SLA: 기본 15분 이내. S3 Replication Time Control (RTC) = 99.99% 를 15분 이내 보장 (추가 비용).

Versioning

aws s3api put-bucket-versioning --bucket my --versioning-configuration Status=Enabled
  • 덮어쓰기 / 삭제 = 옛 버전 보존.
  • 실수 복구 가능.
  • 삭제 = Delete Marker 생성 (실제 삭제 아님).
  • 비용: 모든 버전 저장. Lifecycle 로 오래된 버전 정리 필수.

Object Lock (WORM)

Mode: GOVERNANCE | COMPLIANCE
RetainUntilDate: "2027-06-25T00:00:00Z"
  • Write Once Read Many: 보존 기간 중 삭제/수정 불가.
  • GOVERNANCE: 특정 IAM 권한으로 삭제 가능.
  • COMPLIANCE: root user 도 삭제 불가. 금융/의료 컴플라이언스.
  • Legal Hold: 날짜 무관 삭제 차단.

Multipart Upload

sequenceDiagram
    Client->>S3: InitiateMultipartUpload (uploadId)
    par parallel parts
        Client->>S3: UploadPart 1
        Client->>S3: UploadPart 2
        Client->>S3: UploadPart N
    end
    Client->>S3: CompleteMultipartUpload (part etags)
    S3-->>Client: 완료
  • 큰 파일 (100MB+) 권장, 5GB 초과필수.
  • 병렬 업로드 + 개별 파트 재시도 가능.
  • 최소 파트 크기: 5MB (마지막 파트 제외).
  • 미완료 Multipart: Lifecycle AbortIncompleteMultipartUploads 로 자동 정리.

Presigned URL

import boto3

s3 = boto3.client('s3')
url = s3.generate_presigned_url(
    'put_object',
    Params={'Bucket': 'my-bucket', 'Key': 'upload.zip'},
    ExpiresIn=3600   # 1시간
)
  • 클라이언트가 S3 에 직접 업로드/다운로드 (서버 경유 없음).
  • 임시 URL (만료 시간 설정).
  • 서버 측에서 IAM 권한 위임.
  • GET (다운로드), PUT (업로드) 모두 지원.

Transfer Acceleration

# 엔드포인트: my-bucket.s3-accelerate.amazonaws.com
aws configure set default.s3.use_accelerate_endpoint true
  • CloudFront edge location 을 경유해 S3 에 전송.
  • 글로벌 업로드 속도 최대 60% 향상 (지역별 편차 큼).
  • 비용: 일반 전송 대비 추가 요금.
  • 실제 개선 여부: S3 Transfer Acceleration Speed Comparison Tool 로 사전 확인.

S3 Access Points

버킷 하나를 여러 팀이 다른 정책으로 접근할 때.

aws s3control create-access-point \
  --name data-science-ap \
  --account-id 123456789 \
  --bucket my-data-lake \
  --vpc-configuration VpcId=vpc-abc
  • 각 Access Point 는 고유한 ARN + endpoint + Policy.
  • VPC-only 접근 강제 가능.
  • 버킷 Policy 가 복잡해지는 것을 Access Point Policy 로 분리.

Static Website Hosting

Bucket Property: Static Website Hosting
  Index document: index.html
  Error document: 404.html

CloudFront + OAC 조합:

  • CloudFront: 글로벌 CDN, HTTPS, 커스텀 도메인.
  • OAC (Origin Access Control): CloudFront 에서만 S3 접근 허용.
  • S3 직접 접근 차단 (Block Public Access 유지).

Event Notifications

flowchart LR
    Upload[Object 업로드] --> S3
    S3 -->|event| Lambda
    S3 -->|event| SQS
    S3 -->|event| SNS
    S3 -->|event| EventBridge
  • 새 파일 → 처리 자동화.
  • 이미지 thumbnail 생성, 비디오 transcoding, 데이터 처리.
  • aws-eventbridge 연동 시 content-based filtering 가능 (object key prefix 등).

S3 Select / S3 Object Lambda

  • S3 Select: CSV / JSON / Parquet 의 SQL 일부 query. 필요한 컬럼만 pull.
  • S3 Object Lambda: GET 요청 시 Lambda 가 transform (redact, watermark, format conversion).

보안

flowchart TD
    Q[보안 layer]
    Q --> Block["Block Public Access<br/>(계정/bucket)"]
    Q --> Bucket[Bucket Policy]
    Q --> IAM[IAM Policy]
    Q --> ACL["ACL (legacy)"]
    Q --> Enc["Server-Side Encryption<br/>(SSE)"]
    Q --> KMS[KMS 키]
    Q --> Object[Object Lock]

Encryption

종류의미
SSE-S3S3 관리 key (AES-256)
SSE-KMSaws-kms 관리 key, 감사 가능
SSE-C사용자 제공 key
DSSE-KMS이중 암호화

2023년부터 기본 암호화 SSE-S3 자동 적용. 컴플라이언스 요구 시 SSE-KMS 전환.

Object Ownership + ACL

신규 버킷은 ACL 비활성화 + Object Ownership = BucketOwnerEnforced 권장. Cross-account 업로드 객체도 버킷 소유자가 자동 소유.

Inventory / Storage Lens / Analytics

도구용도
S3 Inventory객체 목록을 CSV/Parquet 으로 주기 출력 (대규모 버킷 감사)
S3 Storage Lens조직 전체 스토리지 사용량 대시보드 (비용 최적화 insight)
S3 Analytics접근 패턴 분석 → Standard-IA 전환 권고
# Storage Lens 기본 대시보드 (무료)
aws s3control get-storage-lens-dashboard \
  --config-id default-account-dashboard \
  --account-id 123456789

흔한 함정

WARNING

  1. Bucket 공개 사고 = “Block Public Access” 항상 켜기. CloudFront + OAC 권장.
  2. Versioning 후 비용 = 옛 버전 누적. Lifecycle NoncurrentVersionExpiration 으로 정리.
  3. Glacier 의 retrieval fee = Glacier 에서 빨리 꺼내면 비용 큼. 접근 빈도 고려.
  4. Multipart upload 정리 안 함 = 미완료 multipart 가 비용 발생. Lifecycle AbortIncompleteMultipartUploads.
  5. CRR 에서 기존 객체 미복제 = Replication 설정 이전 객체는 S3 Batch Operations 로 별도 복제.
  6. S3 Event + Lambda 무한 루프 = Lambda 가 같은 버킷에 쓰면 이벤트 재발생. prefix/suffix 필터 필수.
  7. Presigned URL 의 만료 후 클라이언트 캐싱 = 클라이언트가 URL 를 저장해 재사용 시 403. 짧은 만료 + 재발급 로직.

관련 위키

이 글의 용어 (5개)
[AWS] CloudFront: CDN, origin, behavior, signed URLcloud
정의 CloudFront = AWS 의 글로벌 CDN. 전세계 600 PoP (Points of Presence) 에서 사용자에게 가까운 edge 로 콘텐츠 제공. 지연 감소 +…
[AWS] EventBridge: 이벤트 버스, 스케줄러, partner sourcescloud
정의 EventBridge = AWS 의 통합 event bus. 옛 CloudWatch Events 의 후계. AWS service 이벤트 + custom 이벤트 + SaaS …
[AWS] IAM: User, Role, Policy, STScloud
정의 IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy 로 구성. "누가 어떤 리소…
[AWS] KMS: 암호화 키 관리, envelope encryptioncloud
정의 KMS (Key Management Service) = 암호화 키 중앙 관리. envelope encryption + IAM 통합 + 감사 로그. 키 종류 | 종류 | 의미…
[AWS] Lambda: 서버리스 함수, 트리거, 동시성cloud
정의 AWS Lambda = 서버리스 함수 실행. 이벤트 트리거 → 함수 실행 → 결과 / 비동기 처리. 서버 관리 0. 사용 상황 | 상황 | Lambda 적합성 | |---|…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기