Amazon S3
Section Introduction
- Amazon S3는 AWS의 주요 구성 요소 중 하나
- "무한하게 확장할 수 있는" 스토리지로 소개되고 있음
- 많은 웹 사이트가 Amazon S3에 의존하고 있음
- 많은 AWS 서비스들도 Amazon S3를 통합하여 사용함
Use Cases
- 백업 및 스토리지
- 재해 복구
- 아카이브
- 하이브리드 클라우드 스토리지
- 애플리케이션 스토리지
- 미디어 호스팅
- 데이터 레이크 및 대규모 데이터 분석
- 소프트웨어 배포
- 정적 웹사이트 호스팅
- Nasdaq: 7년간의 데이터를 S3 Glacier에 저장해 둠.
- Sysco: 자체 데이터에 관한 분석을 실행하여 S3로부터 비즈니스 인사이트를 얻음
Buckets
- Amazon S3는 파일을 "버킷"(디렉토리)에 객체 (파일)을 저장함
- 버킷은 전체 지역과 모든 계정에서 전역적으로 고유한 이름을 가져야 함
→ AWS에서 전역적으로 고유한 단 하나의 이름이어야 함
- 버킷은 리전 수준에서 정의
- S3는 전역 서비스처럼 보이지만 버킷은 사실상 리전에서 생성됨
- Naming convention:
- 대문자 및 밑줄 사용 ❌
- 길이는 3자 - 63자 사이
- IP 주소 ❌
- 소문자 또는 숫자로 시작
- 접두사 xn--으로 시작 ❌
- 접미사 -s3alias로 끝 ❌
- 소문자, 숫자, 하이픈만 사용
Objects
- 객체(파일)은 키(Key)를 가지고 있음
- 키는 전체 경로를 의미함
- s3://my-bucket/my_file.txt
- s3://my-bucket/my_folder1/another_folder/my_file.txt
- 키는 접두사(prefix)와 객체 이름으로 구성됨
- s3://my-bucket/my_folder1/another_folder/my_file.txt
- Amazon S3 그 자체로는 "디렉토리"의 개념은 없음 (UI에서는 그렇지 않게 보일 수 있음)
- 슬래시("/")를 포함한 아주 긴 이름의 키만 존재함
- 객체의 값은 본문의 내용이다.
- 최대 객체 크기는 5 TB (5000 GB)
- 매우 큰 파일을 업로드하는 경우엔 "멀티 파트 업로드 (multi-part upload)"를 사용해야 함
- 메타데이터 (metadata): 텍스트 키/값 쌍의 목록 - 시스템 또는 사용자 메타데이터
- 태그: 유니코드 키 / 값 쌍. 최대 10개. - 보안 / 수명 주기에 유용
- 버전 ID: 버전 관리가 활성화된 경우
Security
User-Based
- IAM Policeis: IAM에서 특정 사용자에 대해 허용되어야 하는 API 호출 지정
Resource-based
- Bucket Policies: S3 콘솔에서 직접 할당할 수 있는 전체 버킷 규칙
- 다른 계정의 사용자 허용 = S3 버킷에 액세서할 수 있는 교차 계정 (cross account)
- Object Access Control List (ACL): 더 세분화된 권한 설정 (비활성화 가능)
- Bucket Access Control List (ACL): 덜 일반적인 권한 설정 (비활성화 가능)
참고: IAM principal이 S3 객체에 액세스하려면
- 사용자 IAM 권한이 허용(ALLOW)하거나 OR 리소스 정책이 허용해야 함
- AND 명시적인 거부(DENY)가 없어야 함
Encryption: 암호화 키를 사용하여 Amazon S3의 객체를 암호화
S3 Bucket Policies
- JSON based policies
- Resources: 버킷과 객체
- Effect: Allow / Deny
- Actions: 허용하거나 거부할 수 있는 API 집합
- Principal: 정책을 적용할 계정 또는 사용자
- S3 버킷 정책을 사용하여 다음을 수행할 수 있다.
- 버킷에 대한 공개 액세스 부여
- 객체를 업로드할 때 암호화 강제화
- 다른 계정에 액세스 권한 부여 (Cross Account)
Bucket settings for Block Public Access
- 기업 데이터 유출을 방지하기 위한 추가 보안 계층
- 버킷이 절대로 공개하면 안 되는 경우, 이 설정을 그대로 두면 됨
- S3 버킷 정책을 설정하여 공개로 만들더라도 이 설정이 활성화되어 있다면 버킷은 절대 공개되지 않음
- 계정 수준에서 설정 가능
Static Website Hosting
- S3는 정적 웹사이트를 호스팅하고 인터넷에서 액세스할 수 있게 만들 수 있다.
- 정적 웹사이트를 호스팅하는 경우 해당 웹사이트의 URL은 리전에 따라 다음과 같다.
- 403 Forbidden 오류가 발생하면 버킷 정책이 공개 읽기를 허용하는지 확인하기.
Versioning
- Amazon S3에서 파일을 버전 관리할 수 있다.
- 버전 관리는 버킷 수준에서 활성화된다.
- 동일한 키를 덮어쓰면 "버전"이 변경된다: 1, 2, 3 ...
- 버킷에 버전 관리를 적용하는 것이 좋은 방법이다.
- 의도하지 않은 삭제로부터 보호된다. (버전을 복원할 수 있는 기능)
- 만약, 한 파일 버전을 삭제하는 경우 사실상 삭제 마커를 추가한 것이다.
- 이전 버전으로 쉽게 롤백할 수 있다.
- 참고:
- 버전 관리가 활성화되기 전에 버전 관리되지 않은 파일은 "null" 버전을 가지게 된다.
- 버전 관리를 일시 중단해도 이전 버전은 삭제되지 않는다.
Replication (CRR & SRR)
- 소스 버킷과 복제 대상 버킷에서 둘 모두 버전 관리 기능이 활성화되어야 한다.
- Cross-Region Replication (CRR): 교차 리전 복제
- Same-Region Replication (SRR): 같은 리전으로 복제
- 버킷은 다른 AWS 계정에 속할 수 있음
- 복제는 비동기적으로 진행됨 - 복제 과정은 백그라운드에서 이루어지게 됨
- S3에 적절한 IAM 권한, 즉 읽기 / 쓰기 권한을 부여해야 함
- 사용 사례:
- CRR: 법규, 내부 체제 관리, 데이터가 다른 리전에 있어 발생할 수 있는 지연 시간 줄이기, 계정 간 복제
- SRR: 로그 통합, 운영 환경과 개발 환경간의 실시간 복제
Replication (Notes)
- 복제를 활성화한 후에는 새로운 객체만 복제 대상이 .
- 기존의 객체를 복제하려면 S3 배치 복제 기능을 사용해야 함
- 기존 객체와 복제에 실패한 객체까지 복제할 수 있는 기능
- For DELETE operations
- 소스 버킷에서 대상 버킷으로 삭제 마커를 복제하면 된다. (optional setting)
- 버전 ID로 삭제하는 경우 버전 ID는 복제되지 않는다.
- There is no "chaining" of replication
- 버킷 1에서 버킷 2로의 복제가 있고, 버킷 2에서 버킷 3으로의 복제가 있는 경우 버킷 1에서 생성된 객체는 버킷 3으로 복제되지 않는다.
S3 Storage Classes
- Amazon S3 Standard - General Purpose
- Amazon S3 Standard-Infrequent Access (IA)
- Amazon S3 One Zone-Infrequent Access
- Amazon S3 Glacier Instant Retrieval
- Amazon S3 Glacier Flexible Retrieval
- Amazon S3 Glacier Deep Archive
- Amazon S3 Intelligent Tiering
- S3에서 객체를 생성할 때 클래스를 선택할 수도 있고 스토리지 클래스를 수동으로 수정할 수 있다.
- 혹은 S3 수명 주기 구성을 사용해 스토리지 클래스 간에 객체를 자동으로 이동할 수 있다.
S3 Durability and Availability
Durability 내구성
- 다중 가용 영역에서 객체의 높은 내구성 (99.999999999%)를 제공함
- S3에 천만 개의 객체를 저장했을 때 평균적으로 10,000년에 한 번 객체 손실이 발생할 수 있음.
- 모든 스토리지 클래스의 내구성은 동일함
Availability 가용성
- 서비스가 얼마나 신속하게 사용할 수 있는지를 나타냄
- 스토리지 클래스에 따라 다름
- ex. S3 Standard의 가용성은 99.99%, 즉 1년에 약 53분은 사용할 수 없다는 뜻
S3 Standard – General Purpose
- 99.99%의 가용성
- 자주 액세스하는 데이터에 사용됨
- 지연 시간이 짧고 처리량이 높음
- AWS에서 두 개의 기능 장애를 동시에 버틸 수 있음
- 사용 사례: 빅데이터 분석, 모바일 및 게임 애플리케이션, 콘텐츠 배포 등
S3 Storage Classes – Infrequent Access
- 덜 빈번하게 액세스되지만 필요한 경우 빠른 액세스가 필요한 데이터에 사용됨
- S3 Standard보다 저렴한 비용이지만 검색 비용이 발생함.
- Amazon S3 Standard-Infrequent Access (S3 Standard-IA)
- 99.9%의 가용성
- 사용 사례: 재해 복구, 백업
- Amazon S3 One Zone-Infrequent Access (S3 One Zone-IA)
- 단일 AZ에서 높은 내구성(99.999999999%)을 갖지만 AZ가 파괴되면 데이터가 손실됨
- 99.5%의 가용성
- 사용 사례: 온프레미스 데이터의 보조 백업 복사본, 재생성 가능한 데이터 저장
Amazon S3 Glacier Storage Classes
- 아카이빙 및 백업용으로 사용되는 저비용 객체 스토리지
- 가격: 스토리지 비용 + 객체 검색 비용
- Amazon S3 Glacier Instant Retrieval
- 밀리초 단위의 검색 가능
- 분기마다 한 번 액세스되는 데이터에 적합
- 최소 보관 기간: 90일
- 따라서 백업이지만 밀리초 이내에 액세스해야하는 경우 적합
- Amazon S3 Glacier Flexible Retrieval (formerly Amazon S3 Glacier)
- 데이터를 검색하는데 걸리는 시간:
- Expedited: 1 - 5분
- Standard: 3 - 5시간
- Bulk: 5 - 12시간
- 최소 보관 기간: 90일
- Amazon S3 Glacier Deep Archive – for long term storage:
- 데이터를 검색하는데 걸리는 시간:
- Standard: 12시간
- Bulk: 48시간
- 최소 보관 기간: 180일
S3 Intelligent-Tiering
- 소액의 월간 모니터링 및 자동 계층화 비용 발생 - 검색 비용은 없음
- 사용량에 기반하여 객체를 자동으로 액세스 계층 간에 이동함.
- Frequent Access tier (automatic): default tier
- Infrequent Access tier (automatic): objects not accessed for 30 days
- Archive Instant Access tier (automatic): objects not accessed for 90 days
- Archive Access tier (optional): configurable from 90 days to 700+ days
- Deep Archive Access tier (optional): config. from 180 days to 700+ days