Storage / AWS WIKI
Amazon S3
파일과 객체를 높은 내구성으로 저장하는 객체 스토리지입니다.
기존 기술로 보면
API로 데이터와 메타데이터를 읽고 쓰는 객체 스토리지. NAS의 공유 파일 시스템이나 서버의 블록 디스크와 구분합니다.
AWS에서 달라지는 점
일반 목적 버킷의 Key·버전을 중심으로 저장하며, IAM/버킷 정책·암호화·보존·Storage Class를 조합합니다. Subnet 안에 배치하는 서버가 아닙니다.
- Bucket + Key로 객체 식별
- 접근 허용과 네트워크 경로는 별개
- 보관·복구·삭제 정책을 함께 설계
객체에 접근하고 관리하는 요소
접근 경로
누가 접근할까
데이터 보호
관찰 / 감사
저장하기 전에 정하는 것
01Bucket / Region저장 위치와 이름
앱 위치·데이터 경계·이름의 namespace 확인
이름·리전 변경은 새 버킷으로 이관
재생성 필요 가능변경 영향 →AWS · Bucket 이름 / Region / namespace · AWS 공식 문서 ↗02Key / Prefix객체 주소와 논리 분류
reports/2026/report.pdf · Prefix는 일반 목적 버킷의 실제 디렉터리가 아님
주소 변경은 Copy + 원본 삭제 검토
변경 가능 · 영향 있음변경 영향 →AWS · Object Key / Prefix · AWS 공식 문서 ↗03권한 / 공개 차단주체·Action·Resource 제한
공개 차단 유지 · 필요한 앱 Role만 허용
잘못된 정책은 유출 또는 AccessDenied
변경 가능 · 영향 있음변경 영향 →AWS · 접근 제어 · AWS 공식 문서 ↗04Object Ownership소유권과 ACL 사용 여부
신규 기본값 Bucket owner enforced · ACL 비활성
기존 ACL 기반 업로드와 호환성 확인
조건에 따라 다름변경 영향 →AWS · Object Ownership / ACL · AWS 공식 문서 ↗05저장 암호화키 관리 책임 선택
기본 SSE-S3 · 요구가 있으면 SSE-KMS 검토
기본 설정 변경은 기존 객체 재암호화 아님
변경 가능 · 영향 있음변경 영향 →AWS · 기본 암호화 · AWS 공식 문서 ↗06Versioning덮어쓰기·실수 삭제 복구
이전 버전 보존 · 복구 연습과 보존 기간 결정
Enabled 뒤에는 Unversioned로 돌아갈 수 없음
변경 가능 · 영향 있음변경 영향 →AWS · Versioning · AWS 공식 문서 ↗07Storage Class접근 빈도·복원 시간·복원력
즉시 읽기와 복원 대기를 구분
최저 저장 기간·조회·전환 비용 확인
조건에 따라 다름변경 영향 →AWS · Storage Class · AWS 공식 문서 ↗08Lifecycle / 보존대상과 전환·삭제 조건
검증용 Prefix부터 · 현재/이전 버전 별도
기존 객체에도 적용 · 영구 삭제 복구 불가
변경 가능 · 영향 있음변경 영향 →AWS · Lifecycle 만료 / 기존 객체 · AWS 공식 문서 ↗09Object Lock보존 의무가 있는 객체 버전
Governance / Compliance와 Legal hold 구분
보존 잠금은 단순 설정 원복으로 해제되지 않음
조건에 따라 다름변경 영향 →AWS · Object Lock · AWS 공식 문서 ↗객체의 주소 → 보관 방식 → 삭제 결과
일반 객체 스토리지는 데이터와 메타데이터를 API로 다룹니다. 아래는 일반 목적 S3 버킷의 학습 예시이며 실제 파일이나 리소스가 아닙니다.
Storage Class 비교즉시 조회 / 복원 대기 · 접근 빈도 · 최소 보관 요금
S3 Intelligent-Tiering접근 패턴이 불확실
- 읽기
- 기본 Tier 즉시 · 선택 Archive Tier는 복원 필요
- 보관 과금
- 최소 보관 기간 요금 없음
객체별 모니터링 비용 · 작은 객체의 자동 Tier 이동 조건 확인
AWS · Storage Class · AWS 공식 문서 ↗S3 Standard-IA드물게 읽지만 즉시 필요
- 읽기
- 즉시 조회 · 조회량 요금
- 보관 과금
- 최소 30일 과금
작은 객체의 최소 과금 크기 확인
AWS · Storage Class · AWS 공식 문서 ↗S3 One Zone-IA재생성 가능한 드문 접근 데이터
- 읽기
- 즉시 조회 · 단일 AZ
- 보관 과금
- 최소 30일 과금
AZ 손실에 대한 복원력 요구와 비교 · 유일한 복사본에 신중
AWS · Storage Class · AWS 공식 문서 ↗S3 Glacier Instant Retrieval드물게 읽는 아카이브
- 읽기
- 즉시 조회 · 조회량 요금
- 보관 과금
- 최소 90일 과금
Glacier라는 이름만으로 복원 대기 여부를 판단하지 않기
AWS · Storage Class · AWS 공식 문서 ↗S3 Glacier Flexible Retrieval복원 대기를 허용하는 아카이브
- 읽기
- Restore 후 임시 복사본 조회
- 보관 과금
- 최소 90일 과금
선택한 복원 방식에 따른 시간·비용 확인
AWS · Storage Class · AWS 공식 문서 ↗S3 Glacier Deep Archive장기 보관 · 매우 드문 조회
- 읽기
- Restore 후 임시 복사본 조회
- 보관 과금
- 최소 180일 과금
즉시 응답이 필요한 경로와 분리
AWS · Storage Class · AWS 공식 문서 ↗Versioning · 같은 Key, 다른 결과덮어쓰기 → 삭제 표식 → 복구 / 영구 삭제
Enabled 버킷 예시입니다. 이전 버전은 차이만이 아니라 전체 객체로 저장됩니다. Versioning은 별도 백업·권한 분리를 대신하지 않습니다.
같은 Key에 PUTv1이 있는 Key에 새 내용을 저장
- v2현재
- v1이전
v2가 현재 버전, v1은 이전 버전
이전 버전도 저장 과금 대상
AWS · Versioning · AWS 공식 문서 ↗Version ID 없이 DELETEv2를 일반 삭제
- Delete marker삭제 표식
- v2이전
- v1이전
Delete marker가 현재 버전 · 일반 GET은 404
객체 내용은 남아 있음 · 버전 삭제 권한은 별도 통제
AWS · 버전 삭제 · AWS 공식 문서 ↗삭제 표식 제거현재 Delete marker의 Version ID를 지정해 삭제
- v2현재
- v1이전
남아 있는 v2를 다시 현재 버전으로 조회
삭제 표식과 데이터 버전을 구분한 뒤 작업
AWS · Delete marker 제거 / 복구 · AWS 공식 문서 ↗데이터 버전 영구 삭제v1의 Version ID를 지정해 삭제 · 보호 잠금 없음
- v2현재
- v1영구 삭제
v1 내용 제거 · Versioning으로 복구할 수 없음
NoncurrentVersionExpiration도 이전 버전을 영구 삭제
AWS · 버전 삭제 · AWS 공식 문서 ↗Lifecycle · 시간에 따른 보관과 만료규칙 조건 → 클래스 전환 → 삭제 · 기존 객체도 대상
매일 생성되는 재생성 가능한 보고서의 단순 예시 · 권장 보존 기간이나 실행 시간 보장이 아닙니다.
- 01
- 02
- 03
- 적용 범위
- 기존 객체 + 이후 객체 · Prefix/Tag/크기 필터와 겹치는 규칙 확인
- 작은 객체
- 현재 기본 규칙은 128 KB 미만 전환 제외 · 기존 규칙 시점/명시적 크기 필터 확인
- Enabled 버킷이라면
- 현재 버전 만료는 삭제 표식 · 이전 버전 삭제는 별도 규칙
- 실행과 복구
- 규칙 처리와 삭제는 즉시성 보장 아님 · 완료된 영구 삭제는 규칙 원복으로 복구 불가
Lifecycle의 삭제·전환은 Bucket Policy의 Deny만으로 막을 수 없습니다. 실제 대상 목록과 별도 복원 수단을 확인한 뒤 적용하세요.
저장량 외에도 비용이 생깁니다
- 저장리전·클래스·용량·이전 버전·기간
- 요청 / 전환PUT·GET·LIST·Lifecycle 전환 등
- 조회 / 복원클래스별 조회량·복원 방식·임시 복사본
- 전송방향·리전·대상에 따른 요금
- 최소 보관 / 크기조기 삭제·덮어쓰기·전환 시 잔여 기간 요금 가능
- 미완료 Multipart완료/Abort 전 업로드 Part 저장
- 복제 / 관리대상 저장·복제 요청·관리 기능
- 연관 서비스KMS·요청 지표·감사·네트워크 별도 확인
화면에서 안 보이는 이전 버전·미완료 업로드도 저장 비용을 남길 수 있습니다. 삭제 표식은 영구 삭제가 아닙니다.
비용 범위와 확인 조건금액 계산 없이 과금 대상을 구분
금액은 계산하지 않습니다. 견적은 Region·확인일·클래스·객체 크기/개수·보관 기간·요청량·조회량·전송 방향·복원/복제·연관 서비스로 나눠 확인합니다. 무료 여부는 계정 플랜·가입 시점·크레딧 조건에 따르며 S3 전체가 무료라는 뜻이 아닙니다.
변경·복구·운영 판단
설정 변경 가능성 Matrix재생성 필요 가능 · 변경 가능 · 영향 있음 · 조건에 따라 다름
Bucket 이름 / Region재생성 필요 가능기존 버킷의 이름·리전 수정 불가
새 버킷 → 데이터/설정 이관 → 검증 → 앱 주소 전환. 자동 Rename이나 무중단 보장 아님.
- 접근 / 중단
- 전환·쓰기 동기화 필요
- 데이터
- 복사와 버전 보존 범위 별도 확인
- 비용
- 이중 저장·요청·전송
- 되돌림
- 원본 유지와 쓰기 역동기화 계획
- 공유 global namespace 이름은 삭제 후 다른 계정이 사용할 수 있으므로 참조를 먼저 정리
- 이관 후 정책·암호화·보존 규칙 검증
Object Key / 주소변경 가능 · 영향 있음일반 목적 버킷은 Copy + 삭제
새 Key로 객체를 복사하고 참조를 전환한 뒤 원본 정리. 실제 파일 시스템 Rename과 구분.
- 접근 / 중단
- 기존 URL·참조·동시 쓰기 영향
- 데이터
- 메타데이터·버전·보존 설정 확인
- 비용
- 복사 요청과 임시 중복 저장
- 되돌림
- 원본을 남겨 참조 복원
- Copy와 Delete를 묶은 원자적 Rename으로 가정하지 않기
Policy / 공개 차단변경 가능 · 영향 있음허용 범위 또는 접근 차단 변경
IAM·Bucket Policy·Block Public Access와 필요 시 Endpoint Policy의 유효 권한을 함께 검증.
- 접근 / 중단
- AccessDenied 또는 공개 유출 가능
- 데이터
- 내용 유지 · 접근 범위 변화
- 비용
- 외부 다운로드 증가 가능
- 되돌림
- 이전 정책 복원 · 이미 유출된 내용은 회수 불가
- 통신 경로가 있다고 객체 접근 권한이 생기지 않음
- Presigned URL은 만료·서명자 권한을 가진 공유 수단이며 비밀처럼 취급
Object Ownership / ACL조건에 따라 다름ACL 의존 앱과 업로더 확인
Bucket owner enforced로 전환 시 ACL 대신 정책 기반 접근을 점검.
- 접근 / 중단
- 일부 ACL 포함 업로드 거부 가능
- 데이터
- 소유권·권한 평가 방식 영향
- 비용
- 직접 비용보다 앱 호환성 영향
- 되돌림
- 기존 ACL 동작 재개 시 노출 검토
- 신규 버킷 기본값을 기존 버킷에도 무조건 적용되어 있다고 가정하지 않기
기본 암호화 / KMS변경 가능 · 영향 있음이후 업로드 기본값 변경
기본 암호화 설정과 앱·키 정책 검증. 기존 객체를 바꾸려면 별도 재암호화 작업 필요.
- 접근 / 중단
- KMS 권한·키 상태로 읽기 실패 가능
- 데이터
- 기존 객체는 자동 재암호화 안 됨
- 비용
- KMS 요청·키 비용 확인
- 되돌림
- 기본값 원복은 이미 암호화된 객체의 키를 바꾸지 않음
- 암호화는 공개 접근 차단이 아님
- 키 삭제 전 복구·보존 대상 확인
Versioning변경 가능 · 영향 있음Enabled ↔ Suspended · Unversioned 복귀 불가
Enabled 뒤 Suspend는 이전 버전을 지우지 않습니다. 새 쓰기/삭제의 null 버전 동작을 확인.
- 접근 / 중단
- 앱의 삭제 의미·버전 처리 확인
- 데이터
- 기존 버전 유지 · Suspend 뒤 덮어쓰기 위험
- 비용
- 전체 버전 저장 비용
- 되돌림
- Enabled 재개 가능 · 이미 영구 삭제된 버전 복구 불가
- Suspend를 비용 일괄 정리나 백업 대체로 사용하지 않기
Storage Class조건에 따라 다름지원 전환·Copy·복원 조건 구분
새 업로드 클래스와 기존 객체 변경은 별도입니다. 지원 Lifecycle 전환 경로 또는 Copy와 복원 조건 확인.
- 접근 / 중단
- 일부 Archive는 Restore 대기
- 데이터
- 클래스 변경은 Versioning과 다른 축
- 비용
- 전환·조회·최소 기간·임시 복사본
- 되돌림
- 지원 경로 검토 · 클래스에 따라 Restore/Copy 필요
- 클래스 이름이나 저장 단가만으로 선택하지 않기
Lifecycle 규칙변경 가능 · 영향 있음현재·기존 객체의 삭제/전환 영향
작은 테스트 Prefix와 대상 목록·보존 의무·중복 규칙을 검증한 뒤 적용.
- 접근 / 중단
- 만료 후 앱 GET 실패 가능
- 데이터
- 비버전/이전 버전 만료는 영구 삭제
- 비용
- 전환 요청·조기 삭제 요금
- 되돌림
- 규칙 중지 가능 · 완료된 영구 삭제는 되돌림 불가
- 현재 버전과 이전 버전·미완료 업로드 정리는 각각 별도
- 즉시 삭제되는 스케줄러라고 가정하지 않기
Object Lock / 보존조건에 따라 다름Versioning 전제 · 해제 제약 있음
보존 모드·기간·권한을 별도 검토. 활성화 뒤 Object Lock 비활성화와 Versioning Suspend 불가.
- 접근 / 중단
- 보호된 버전 삭제 제한 · 새 버전/삭제 표식 생성은 가능
- 데이터
- 기존 버전 보존 설정은 별도 확인
- 비용
- 보존된 버전 저장 지속
- 되돌림
- Compliance는 기간 단축/보호 해제 불가 · Governance는 우회 권한 조건
- 버킷 기본 보존을 바꿔도 기존 버전의 보존 기간이 자동 변경되지 않음
- 학습용 버킷에 긴 Compliance 보존을 무심코 적용하지 않기
일반적인 사용 패턴상황별 예시 · 정답이나 추천 순위 아님
앱 파일
앱 데이터와 파일 저장 책임 분리
- 앱 Role과 Prefix별 접근
- 임시 공유는 Presigned URL 검토
- 다운로드·요청·전송량 관찰
객체 API를 공유 디스크/NAS나 DB 트랜잭션처럼 사용하지 않기
백업 / 보관
보존 기간과 실제 복원 목표에서 출발
- 복구 목표에 맞는 클래스
- 버전·잠금·별도 복사본 필요성 판단
- 정기 복원 테스트
내구성은 실수 삭제·권한 유출·업무 복구 보장이 아님
Terraform state
기존 프로젝트의 선택형 원격 backend
- 민감 state 접근 최소화·버전 관리
- 환경별 Key와 동시 실행 통제
- 잠금은 Terraform/backend 지원 설정 별도 확인
Versioning만 켠다고 Terraform의 동시 실행 잠금이 활성화되지는 않음
기존 저장소와 비교
객체 API와 파일/블록 인터페이스를 먼저 구분
- 온프레 객체 스토리지는 대안 · API/인증/기능 호환성 검증
- 직접 운영하면 용량·중복 저장·장애·패치·백업 책임도 부담
- 파일 잠금·POSIX 공유가 필요하면 파일 스토리지 설계를 별도 검토
S3-compatible이라는 이름만으로 모든 AWS 기능이 같다고 가정하지 않기
잘못 바꾸면 생기는 일통신 · 데이터 · 공개 범위 · 권한 · 비용
의도하지 않은 공개공개 차단 해제 + 공개 허용 정책 → 객체 유출주의
차단 유지·정책 테스트·공개/비공개 데이터 경계 분리.
AWS · Block Public Access · AWS 공식 문서 ↗통신되는데 접근 실패경로만 확인 · 정책/키 권한 누락 → AccessDenied주의
IAM·리소스 정책·Endpoint·암호화 키를 별도 확인.
AWS · 접근 제어 · AWS 공식 문서 ↗오래된 데이터 일괄 만료기존 Prefix에 짧은 보존 규칙 추가 → 영구 삭제 가능주의
기존 객체 나이·대상과 복원 수단 확인. Bucket Policy Deny로 Lifecycle을 막을 수 있다고 가정하지 않기.
AWS · Lifecycle 만료 / 기존 객체 · AWS 공식 문서 ↗읽기 경로를 아카이브로 전환즉시 응답 요구를 무시 → 복원 대기로 서비스 영향주의
Restore 필요 클래스와 즉시 조회 클래스를 구분하고 복원 시간/요금 검증.
AWS · Storage Class · AWS 공식 문서 ↗미완료 업로드 방치Multipart 실패 후 Abort 없음 → Part 저장 비용 누적주의
AbortIncompleteMultipartUpload 규칙과 실패 재시도 관찰. 완료된 객체 만료와 다른 규칙.
AWS · 미완료 Multipart 정리 · AWS 공식 문서 ↗보존 잠금 설정 실수긴 Compliance 기간 적용 → 필요해도 버전 삭제 불가주의
보존 의무·모드·기간을 검토하고 별도 버킷에서 검증.
AWS · Object Lock · AWS 공식 문서 ↗객체 감사가 빠짐일반 지표·관리 이벤트만 확인 → 누가 읽고 썼는지 조사 어려움주의
CloudTrail Data events의 대상/비용과 로그 보존 확인. CloudWatch 지표는 객체 API 감사 기록이 아님.
AWS · CloudTrail 관리 / Data events · AWS 공식 문서 ↗구축 / 운영 확인리소스 설정과 공통 기반을 함께 확인
접근 / 보안
- 최소 권한 Role·객체 범위와 ListBucket 범위 구분
- 공개 차단·ACL 의존 여부·암호화 확인
- Presigned URL 유출과 만료 관리
서명 URL의 유효 기간은 서명 자격 증명 만료와 정책에도 제한됩니다.
AWS · Presigned URL · AWS 공식 문서 ↗보존 / 복구
- 덮어쓰기·표식 제거·이전 버전 복원 연습
- 실제 데이터 삭제 전에 대상/복구 수단 확인
- Lifecycle/보존 잠금과 업무 삭제 요구 충돌 검토
Versioning으로 영구 삭제한 버전은 복구할 수 없습니다.
AWS · 버전 삭제 · AWS 공식 문서 ↗운영 / 비용
- 현재/이전 버전·미완료 Part 사용량 확인
- 4xx/5xx·요청량과 필요한 알람 검토
- 지표·객체 감사 대상·요금 따로 판단
일일 저장 지표와 선택형 유료 요청 지표는 서로 다릅니다.
AWS · CloudWatch 지표 · AWS 공식 문서 ↗프로젝트의 state 보관
- 기존 Terraform 프로젝트의 선택 구성 · 모든 프로젝트의 필수 구성 아님
- Versioning과 backend 동시 실행 잠금을 따로 검증
현행 HashiCorp 문서의 S3 잠금은 opt-in입니다. 설치 Terraform 버전이 지원하는 backend 설정을 확인하세요.
HashiCorp · Terraform S3 backend (현행 문서 · 설치 버전 지원 확인) · AWS 공식 문서 ↗프로젝트와 공통 기반 연결
Terraform 기반 AWS 인프라 구축/운영 →
Amazon S3팀에서 Terraform state를 원격으로 공유·보관할 때