목적: 안전하고 가변적인 Object 저장공간 제공 (ex. 구글 클라우드)
AWS에서 가장 먼저 release한 서비스로 역사도 깊고 시험도 많이 나오는 구간
S3
- 안전하고 가변적인 Object 저장 공간을 제공
- Object: 이미지, 동영상, 파일 등을 의미
- 운영체제 등은 올리기 불가능
- 편리한 UI 인터페이스를 통해 어디서나 쉽게 데이터를 저장하고 불러올 수 있음
- 파일 크기: 0KB - 5TB
- 저장 공간 무제한
- Bucket이라는 이름을 사용(디렉토리와 유사함)
- Bucket은 보편적인 namespace를 사용함
- global함으로 region과 상관없이 unique한 이름을 생성해야 함
S3 Object 구성 요소
- Key: 파일명
- Value: 파일에 대한 데이터
- Version ID
- S3 고유 특징
- 똑같은 파일도 다른 버전으로 업로드 가능
- Metadata
- 파일의 Owner, 업로드 날짜 등을 알 수 있음
- 직접 수정 가능
- CORS (Cross Origin Resource Sharing)
S3 Data Consistency Model
- Read after Write Consistency (PUT): S3에 올라갔다면 파일을 바로 사용 가능 = delay X
- Eventual Consistency (UPDATE, DELETE): S3에서 파일을 업데이트하거나 삭제 시 바로 사용 불가능 = delay O
S3 스토리지
- 일반 S3
- 가장 보편적으로 사용되는 스토리지 타입
- 높은 내구성(Durability), 가용성(Availability)
- 내구성: 데이터의 손실 없이 얼마나 잘 보관되는지
- 가용성: 데이터 접근이 잘 되는가
- S3- IA (Infrequent Access)
- 자주 접근되지는 않으나 접근시 빠른 접근이 요구되는 파일이 많을 떄 유용
- 일반 S3에 비해 비용은 저렴, 접근 시 추가 비용 발생
- Muitl AZ를 통한 데이터 저장: 가용성이 높음
- S3 - One Zone IA
- 단일 AZ를 통한 데이터 저장
- 단일 AZ에 의한 데이터 접근 제한 (조금은 낮은 가용성)
- 데이터 접근 시 S3 - IA보다 20% 저렴한 비용
- Glacier
- 거의 접근하지 않을 데이터를 저장 시 유용
- 매우 저렴한 비용
- 데이터 접근시 대략 4-5시간 소요
- Intelligent Tiering
- 데이터 접근 주기가 불규칙할 때 매우 유용
- 2가지 티어 존재
- Frequent Tier: 약 1개월 동안 사용 o시 여기로 자동 분류
- Infrequent Tier: 약 1개월 동안 사용 x시 여기로 자동 분류
- 데이터 접근주기에 따라 두 가지 티어 중 하나로 선택됨
- Frequent Tier가 비용이 약간 더 비쌈
- 최고의 비용 절감 효율을 누릴 수 있음
S3 요금
- GB당
- PUT, GET, COPY 요청 시 횟수당
- 데이터 다운로드 시 / 다른 리소스로 전송 시
- Metadata (Object Tag)
S3 사용 용례
- 파일 저장소(로그, 다양한 파일들 - 이미지, 비디오, 압축파일 등)
- 웹사이트 호스팅: html, css 파일 등을 저장 / Route53으로 연결
- CORS
S3 버킷 생성 시 주의점
- 최초 S3 bucket 생성 시 비공개(PRIVATE)로 설정됨 = 외부에서 접근 시 Access deny
- 비공개 된 bucket을 일부에게 open하는 방법
- Bucket 정책 변경 (Bucket Policy): json 파일로 조작
- 접근 제어 리스트 변경 (Access Control List)
- 사용자 A에게는 파일 a, b의 권한을
- 사용자 B에게는 파일 c의 권한을 주는 것처럼
S3 암호화
파일 업로드 / 다운로드 시: SSL / TLS
가만히 있을 시
- SEE-S3
- SSE-KMS
- SSE-C
예시
- PUT 요청이 생성
PUT /ruby-image.png HTTP/1.1 Host: RubyBucket.s3.<Region>.amazonaws.com Date: Sun, 3 Apr 2022 03:00:23 GMT Authorization: authorization string Content-Type: text/plain Content-Length: 82253 x-amz-meta-author: Ruby Expect: 100-continue x-amz-server-side-encryption-parameter: AES-256 [82253 bytes of object data]
- x-amz-server-side-encryption-parameter: PUT요청에 해당 파라미터가 있으면 암호화가 실행됨
- Bucket 정책 설정을 통해 암호화 되지 않은 파일의 upload를 통제할 수 있음
- x-amz-server-side-encryption-parameter: PUT요청에 해당 파라미터가 있으면 암호화가 실행됨
- PUT 요청이 생성