3장 S3와 Glacier
3장 Amazon Simple Storage Service와 Amazon Glacier Storage Service
3장의 목표
-
복원력을 갖춘 아키텍처 설계
- 안정적이고/ 복원력을 갖춘 스로티리지를 선택한다.
- 어떻게 멀티 티어 아키텍처 솔루션을 설계할지 결정한다.
- 어떻게 고가용성 및 내결함성을 갖춘 아키텍처를 설계할지 결정한다.
-
성능이 뛰어난 아키텍처 정의
- 성능이 뛰어난 스토리지 및 데이터베이스를 선택한다.
- 탄력성과 확장성을 갖춘 솔루션을 설계한다.
-
안전한 애플리케이션 및 아키텍처 설명
- 어떻게 애플리케이션 티어를 보호할지 결정한다.
- 어떻게 데이터를 보호할지 결정한다.
-
비용에 최적화된 아키텍처 설게
- 어떻게 비용에 최적화된 스토리지를 설계할지 결정한다.
Amazon simple Storage Service ( 이하 S3 )
-
S3는 개인 애플리케이션, 다수 AWS 서비스의 데이터를 보관하며,다음 워크로드를 위한 훌륭한 플랫폼이다.
-
S3의 주요기능
- 백업 아카이브 로그 파일, 재해 복구 이미지 유지 관리
- 분석을 위한 데이터 저장
- 정적 웹 사이트 호스팅
-
S3는 객체 스토리지로, 전 장에서 배운 EC2는 인스턴스를 구동하는 반면 S3는 무제한 객체 스토리지 공간을 효과적으로 제공한다.
-
객체 스토리지와 블록 스토리지의 차이점
Type | 차이점 | 예시 |
---|---|---|
블록 스토리지 | 물리적 디스크를 개별 블록으로 나눠 데이터를 저장하고 파일 시스템으로 관리 | Window NTFS, Linux Btrfs, ext 등 |
객체 스토리지 | 구조화되지 않은 평면의 저장소에 데이터를 저장하여 무제한의 스토리지를 구현가능 | S3, swift 등 |
- S3에 파일을 쓸 때는 2KB 메타 데이터가 함께 저장되며, 이 메타 데이터는 세부 정보를 구성하는 키로 만들어지며, 데이터 사용 권한과 파일 시스템처럼 보여지는 중첩 버킷 내 위치 정보 등이 저장된다.
S3 서비스 아키텍처
-
S3 파일은 버킷으로 구성되며, AWS 계정당 기본으로 만들 수 있는 버킷은 100개이다.
-
버킷 또한 할당량에 초과사용을 요청할 수 있다.
-
S3 버킷은과 내용은 한 AWS 리전에만 존재하며, 버킷의 주소는 S3 글로벌 시스템 내에서 유일해야한다. ( 증복이 허용되지 않음 )
-
이는 버킷에 보다 쉽게 접속하기 위해 규칙을 정해놓은 것이다.
$ https://[ bucketname ].s3.[ region code ].amazon.com/[ filepath ]
# 엑세스를 위한 URL
$ s3://[ bucketname ]/[ filepath ]
# CLI 환경에서의 엑세스
-
이론적으로 버킷에는 무한정의 대이터를 저장할 수 있지만, 단일 객체의 크기는 5TB를 넘을 수 없고, 한 번에 용량에 업로드할 수 있는 용량 크기는 최대 5GB이다.
-
100MB보다 큰 객체를 업로드시에는 멀티 파트 업로드를 사용해서 데이터의 손실 및 업로드가 중지되는 위험을 줄일 수 있다.
- 멀티 파워 업로드 : 데이터를 나눠서 업로드 하는 방식 ( ex : 분할 압축 )
-
단, 상위 수준의 API에서는 멀티 파트 업로드가 자동이지만, 하위 수준에서는 수동으로 나눠야 한다.
암호화
-
웹 사이트와 같이 퍼블릭에서 엑세스하는 용도가 아니라면, S3에 저장할 데이터는 항상 암호화해야 한다.
-
S3에 저장 중인 데이터를 보호하기 위해서 암호화 키를 사용할 수도 있고, S3에서 다른 위치로 전송하는 데이터를 보호하기 위해서 Amazon 암호화 API 엔드포인트 만을 사용할 수 있다.
-
저장 중 데이터는 서버 측 암호화 혹은 클라이언트 측 암호화를 사용해서 보호할 수 있다.
- 서버 측 암호화
- 서버 측의 암오화는 S3 플랫폼 자체의 암호화를 의미하며, 데이터 객체를 암호화해서 적합한 인증으로 복호화하는 작업이 AWS에서 이루어진다.
- Amazon S3가 관리하는 암호화 키(SSE-S3)를 사용하면 AWS가 자체 엔터프라이즈 표준 키를 사용해 암호화 복호화 프로세스의 모든 단계를 관리한다.
- AWS KMS-관리형 키를 사용하는 서버 측 암호화(SSE-KMS)를 사용하면 SSE-S3가 제공하는 기능에 더해 완벽한 키 사용 추적과 봉투 키를 사용할 수 있다.
- 고객 제공 암호화 키에 의한 서버측 암호화(SSE-C)는 고객이 S3에 제공한 자체 키로 객체를 암호화 한다.
- 클라이언트 측 암호화
- S3로 데이터를 전송하기 전에 암호화하는 것으로, AWS KMS-관리현 고객 마스터 키(KMS-CMK)를 사용하며, 업로드 전에 고유 키로 객체를 암호화한다.
- 복잡한 암호화 절차를 단순화하기 때문에 서버 측 암호화를 많이 사용하지만, 회사 내에서 암호화 키의 모든 권한을 가지고 있어야 하는 경우도 있을 때 주로 사용된다.
- 로깅
-
S3 이벤트 추적을 로그 파일에 저장하는 기능은 처음에는 비활성화 되어있다.
-
S3 버킷에서 일어나는 많은 활동을 로그 데이터로 만들어 기록할 필요 없기 때문이며, 로그파일을 기록하는 것을 이를 로깅이라한다.
-
로깅을 활성화 할 때는 원본 버컷과 대상 버킷을 지정해야 하며, 하나의 대상 버킷에 여러 원본 버킷 로그를 저장했을 때 쉽게 시벽할 수 있도록 구분 기호와 접두사를 사용한다.
-
S3는 CloudWatch나 CloudTrail와 같은 AWS 서비스 및 다른 서버들의 로그저장하는 데에도 사용된다.
-
S3 생성 로그는 구성화면, 잠시 후 다음과 같은 작업 상세 항목이 기본으로 나타난다.
- 요청자 게정과 IP 주소
- 원본 버킷 이름
- 요청 동작(GET, PUT)
- 요청 개시 시간
- 응답 상태 ( 오류 코드 포함 )
-
S3 내구성과 가용성
- 객체를 저장할 때 여러 S3 스토리지 클래스 중에서 선택할 수 있으며, 내구성, 가용성, 지출가능 비용에 따라 선택한다.
- 관련용어 설명
키워드 | 설명 |
---|---|
내구성 | 데이터가 손실되지 않을 확률 |
가용성 | 객체가 사용 가능한 기간 |
지출가능 비용 | 사용시 지불해야하는 가격 |
- 내구성
-
내구성은 백분율로 측정되며, Amazon Glacier의 경우 99.999999999% 내구성을 보장하는 데 이는, 10.000.000개의 객체를 저장하면 1만 년 동안 객체가1개 손실될 확률을 의미한다.
-
즉 S3 Standard/Glacier 플랫폼에 저장한 데이터를 인프라 장애로 손실할 가능성은 거의 없다고 볼 수 있다.
-
S3는 최소 3개의 가용 영역에 데이터를 자동으로 복제하기 때문에, 높은 내구성을 보장할 수 있다.
-
하지만 복원력이 없는 두 클래스도 존재하는 데, Amazon S3 One Zone-IA(Infrequent Access)은 단일 가용 영역에만 저장하며, RRS(Reduced Redundancy Storage)는 다른 클래스보다 적은 영역에 복제하기 때문에 99.99% 내구성만을 보장한다.
-
- S3 스토리지 안정성 보장 표준
S3 Standard | S3 Standard-IA | S3 One Zone-IA | RRS | |
---|---|---|---|---|
내구성보장 | 99.999999999% | 99.999999999% | 99.9999999999% | 99.99% |
내결함성을 위한 동시 복제 시설 수 | 2 | 2 | 1 | 1 |
- 가용성
-
객체 가용성도 백분율로 측정하며, 1년 동안 해당 객체를 요청했을 때 즉시 응답할 수 있는 기간을 백분율로 나타낸다.
-
만약 Amazon S3 Standard 클래스는 연간 99.99%의 가용성을 가지고 있는 데, 이는 1년 동안 중단 시간이 1시간 이내를 의미한다.
-
- S3 스토리지 표준 가용성 보장
S3 Standard | S3 Standard-IA | S3 One Zone-IA | RRS | |
---|---|---|---|---|
가용성 보장 | 99.99% | 99.9% | 99.5% | 99.99% |
- 데이터의 최종 일관성
- S3는 데이터를 여러 장소에 복제하므로, 기존 데이터가 업데이트되면 시스템에 전파하느 동안에 지연시간이 발생할 수 있다.
- 단 이는 객첼르 생성(PUT) 할 때에는 객체 버전이 충돌할 가능성이 없으므로, 쓰기 후 읽기 일관성이 제공된다.
객체 수명 주기
-
S3에서 시작하는 워크로드는 대개 백업 아카이브와 관련이 있다.
-
백업 아카이브는 주기적으로 저장되므로 이에 대한 관리가 필요한 데, S3버전 관리를 통해 해결이 가능하다
- 버전 관리
- 기본적으로 동일한 파일을 업로드 시키는 경우에는 덮어씌어지는 데, 이는 심각한 문제를 초래할 수 있다.
- S3도 이와 동일하게 작동하지만, 버킷 수준에서 버전 관리를 활성화하게 되면 이전 객첼르 보존할 수 있어, 기존 버전에 계속 엑세스 하는 것이 가능하다.
- 수명 주기 관리
- 버킷에서 수명 주기 규칙을 구성하면 지정한 기간이 경과했을 때 자동으로객체가 다른 스토리지 클래스로 옮겨진다.
- 예를 들면 첫 30일동안은 S3 Standard 클래스에서 보관되지만, 그 이후에는 보다 저렴한 One Zone IA으로 옮겨진다.
- 과거 버전을 지속저으로 유지해야하는 경우 장기 저장용 Storage 서비스 Glacier으로 365일 보관이 가능하다.
S3 객체 엑세스
- S3에 데이터를 저장해서 사용하겠다고 결정했다면 중요성에 맞게 S3에 저장된 객체에 엑세스하는 방법과 업무의 보안상 필요에 맞는 요청만 엑세스하도록 제한하는 방법이 필요하다.
- 엑세스 제어
- 외부 사용자는 버킷의 객체에 엑세스가 불가능하지만, ACL (엑세스 제어 목록), S3 버킷 정책, IAM 정책을 통해서 버킷이나 객체 수준에서 접근이 가능토록 할 수 있다.
- 위와 같은 ACL, S3 버킷 정책, IAM은 일부 중복되어 있으며, 이는 점차 서비스가 발전해오면서 새로운 기능이 추가된 서비스가 생성되었기 때문이다.
- 현재는 ACL대신 S3 버킷 정책이나 IAM을 사용하길 권장하고 있다.
- S3 버킷 정책 (JSON 형식으로 S3 버킷에 연결)은 외부 계정과 사용자가 S3 버킷에 엑세스하는 것을 제어할 수 있는 반면, IAM 정책은 IAM이 관리하느 계정, 즉 사용자와 역할이 S3를 비롯한 여러 리소스에 엑세스하는 방식을 제어하고자 할 때 사용된다.
- 미리 서명된 URL
- 외부 엑세스가 제한된 프라이빗 객체에 임시로 엑세스할 수 있게 할 때, 미리 서명된 URL을 사용할 수 있다.
- 미리 서명된 URL은 시간 제한이 존재하며, 기간이 지나면 사용이 불가능해지며 프로그래밍 방식으로 객체에 엑세스가 가능하다.
$ aws s3 presign s3://[ MybucketName ] /[ FilePath ] --expires-in [ second ]
# second 만큼의 초 시간의 특정 File의 엑세스를 허용하는 CLI 명령어
정적 웹 사이트 호스팅
- S3 버킷은 정적 웹 사이트 HTML 파일 호스팅에도 사용
- 정적 웹 사이트는 웹 페이지와 스크립트를 랜더링할 때 서버가 아닌 클라이언트 시스템 서비스를 사용
$ aws s3api put-bucket-acl --bucket [ MybucketName ] --acl Public-read
# 버킷의 호스팅 설정을 추가하는 CLI 명령어
$ aws s3 website s3://[ MybucketName ] --index-document index.html --error-document error.html
$ 버킷의 정적 웹 사이트를 호스팅하며 메인 페이지와 에러 페이지를 설정한다. ( 수정 가능 )
- S3 Select와 Glacier Select
- AWS는 S3나 Glacier에 저장한 데이터에 엑세스할 수 있는 또 다른 방법을 제공하는 데, 이를 Select이라 한다.
- 이를 사용하면 SQL와 유사한 쿼리로 저장된 객체에서 관련 데이터만 검색하는 것이 가능ㅎ다ㅏ.
Amazon Glacier
- Glcanier는 S3 스토리지 클래스의 일부로 Glacier는 대부분 S3 클래스와 마찬가지로 99.999999999% 내구성을 보장하고, S3 구셩 주기에 통합할 수 있다.
- 단 S3와 다른 점은 S3는 단일 객체 최대 크기가 5TB인 반면, Glacier은 40TB까지의 대형 아카이브를 지원하고, S3에서는 암호화를 선택해야하지만, Glacier는 인간이 읽을 수 없는 ID가 주어진다.
- Glacier의 단점은 데이터를 가져오는 데 걸리는 시간으로 S3는 즉시 엑세스가 가능하지만, Glacier 아카이브에서 객체를 가져오려면 몇 시간이 걸릴 수도 있다.
- 이와 같이 Glacier의 목적은 데이터의 필요성과 사용빈도가 낮은 한경에서 장기적으로 데이터를 보관할 수 있는 저렴한 스토리지로 사용할 수 있다는 것이다.
스토리지 요금
- 스토리지 요금은 버전 관리와 객체 수명주기로 계속해서 파일이 이동하므로 과정이 복잡하다 할 수 있다.
- 서울 리전 스토리지 요금 예시
클래스 | 스토리지 용량 | 요금/GB/월 | 비용/ 월 |
---|---|---|---|
Standard | 20G | $0.018 | $0.36 |
Standard | 65G | $0.0144 | $0.938 |
Standard | 520G | $0.005 | $2.6 |
합계 | $3.398 |
- 이 외에도 트래픽 관련 요금이 부과되며 기타 모든 요금에 대한 정보는 여기에서 확인할 수 있다.
- AWS 월 사용량 계산기
기타 스토리지 관련 서비스
- AWS에는 S3, Glacier 이외에도 다양한 Storage Service 있다.
- Amazon Elastic File System ( EFS )
- EFS자동 확장 가능한 공유 파일 스토리지 서비스.
- 동일 VPC 내의 Network File System ( NFS )으로 여러 EC2 인스턴스에 장착한다.
- AWS Direct Connect 연결로 온프레미스 서버에서 엑세스할 수 있도록 설계되어 있다.
- AWS Storage Gateway
- 온 프레미스의 로컬 백업과 아카이브 운영 요구 사항을 클라우드 스토리지 서비스를 사용해 해결하려면 복잡하진다.
- AWS Storage Gateway는 소프트웨어 형식의 게이트웨이로 VMware, EC2 ,Hyper-V 와 등에 사용하면 보다 쉽게 S3, EBS로 데이터의 이전이 가능하다.
- AWS Snowball
- 대용량 데이터 세트를 일반 인터넷 연결로 클라우드에 마이그레이션하려면 많은 시간과 대역폭이 필요로 한다.
- 테라 혹은 페타바이트 크기의 데이터를 옮길 때문 AWS에서 256비트로 암호화한 물리적 장치인 Snowball을 사용자에게 배송하며, 이를 AWS다시 수거해 S3에 올려준다.
요약
-
Amazon S3는 적은 유지 관리 노력으로 대용량 아키이브와 데이터 스토리지를 운영할 수 있도록 안정성과 고가용성을 갖춘 객체 스토리지를 제공한다.
-
객체는 게층화 돼 있지 않은 버킷에 저장되어 있지만, 접두사를 사용해서 일반 파일 시스템에 있는 것처럼 보일 수 있다.
-
AWS가 제공하는 암호화 키 또는 자체 암호화 키를 사용해 S3 자체 데이터를 암호화 할 수 있으며, 대개 필수로 데이터를 암호화한다.
-
암호화의 종류로는 서버 측 암호화, 클라이언트 측 암호화로 저장 중 암호화가 이루어진다.
-
S3는 데이터 복제 정도가 다른 여러 스토리지 클래스를 제공해서 사용자가 내구성, 가용성, 비용을 고려해서 선택할 수 있게 한다.
-
기존 ACL, S3 버킷 정책, IAM을 통해 보안 주체, 대상, 시간을 제어할 수 있다. 일시적으로 제한된 데이터 엑세스를 제공하는 안전한 방법으로는 미리 서명된 URL을 사용한다.
-
SQL과 유사한 S3 Select와 Glacier Select를 사용하면 데이터 요청 크기와 비용을 줄일 수 있으며, S3 버킷에 저렴하고 간단한 정적 웹 사이트를 만들 수도 있다.
-
Amazon Claier은 데이터 아카이브를 볼트에 저장하고 가져올 때는 몇 시간이 걸리지만, S3 스토리지 클래스보다 비용이 저렴하다.
시험 핵심
- S3 리소스 구성되는 방식을 이해한다.
- S3 객체는 버킷에 저장되는 데, 버킷 이름은 글로벌하게 고유해야 하며, 버킷은 Region과 연결된다.
- 객체는 구조화되지 않은 버킷에 저장되지만 접두사와 기호를 사용해서 데이터에 폴더 게층 구조를 나타낼 수 있다.
- 데이터 전송을 최적화하는 방법을 이해한다.
- S3 버킷에 저정하는 개별 객체의 크기는 5TB이며, 100MB보다 큰 객체는 멀티 파트 업로드를 사용해야 한다.
- 5TB보다 큰 객체는 멀티 파트 업로드 이외의 다른 업로드 방법이 없다.
- S3 데이터 보안 방법을 이해한다.
- AWS에서 생성한 키 또는 비공개 키로 서버 측 암호화를 사용하면 S3 버킷 내에서 데이터를 보호할 수 있다.
- 클라이언트 측 암호화를 사용해 S3 전송되기 전에도 데이터를 암호화 할 수 있다.
- S3 객체의 내구성과 가용성을 측정하는 방법을 이해한다.
- 다양한 S3 클래스와 Glacier는 여러 수준에서 인프라 안정성과 데이터 가용성을 약속한다.
- S3 객체 버전 관리와 수명 주기 관리를 이해한다.
- 객체를 덮어 쓴 뒤에도 덮어쓰기 전 객체를 보존해서 액세스 할 수 있다.
- 지연 시간이 짧은 스토리지 클래스에 지연 시간이 긴 클래스로 자동 전환하는 방법은 오래된 객체를 관리할 수 있고, 최종적으로 삭제 예약 또한 가능하다.
- S3 객체를 보호하는 방법을 이해한다.
- 기존 버킷과 객체 기반 ACL 규칙으로 엑세스를 제어할 수 있고, 더욱 유연한 S3 버킷 정책이나 곚어 수준 IAM 정책으로 엑세스를 제어할 수 있다.
- 미리 서명된 URL를 통해 임시로 엑세스를 허용할 수 있다.
- 정적 웹 사이트를 만드는 방법을 이해한다.
- S3에 HTML, 미디어 파일을 저장하고 Route 53과 CloudFront를 사용해서 DNS 도메인 이름으로 액세스 할 수 있는 암호화된 HTTPS 페이지 웹사이트로 제공할 수 있다.
- S3와 Glacier의 차이를 이해한다.
- Glacier는 자주 요청되지 않으리라고 예상하는 데이터 아카이브를 위한 저렴한 장기 보존 스토리지이다.