Amazon Simple Storage Service(이하 S3)는 일반 사용자, 애플리케이션 그리고 셀 수 없이 많은 AWS 서비스를 위한 데이터 저장소이며, 다음 용도로 널리 활용됩니다.
- 아카이브, 로그 파일, 재난 복구 이미지 등을 이용한 백업 관리
- 저장된 빅데이터의 분석 업무에 활용
- 정적 웹사이트 호스팅
EC2 인스턴스의 OS 볼륨이 블록 스토리지(Block Storage)
인 반면 S3는 좀 더 다양한 용도로 활용할 수 있는 무제한 용량의 객체 스토리지(Object Storage)
입니다. 블록 스토리지란 파일 시스템을 위해 물리적 저장 장치를 블록 단위로 나둬둔 것을 의미하고 객체 스토리지는 권한을 부여받은 누구나 접속해서 어떤 포맷의 데이터, 어떤 용량의 데이터라도 저장할 수 있습니다. 또한 S3에 파일을 저장하면 2KB 용량의 메타데이터
도 함께 저장됩니다. S3의 메타데이터는 데이터 퍼미션
, 버킷 내 파일 시스템에서의 위치
등의 정보를 키 형식으로 제공합니다.
이론적으로 버킷에 저장할 수 있는 데이터의 총용량에는 제한이 없지만 객체 하나의 용량은 5TB
를 초과할 수 없으며, 한 번의 업로드 작업은 5GB
를 초과할 수 없습니다. 용량 제한 문제를 피하기 위한 방법으로, AWS는 100MB
초과 객체의 경우 멀티파트 업로드(Multipart Upload)
기능을 사용할 것을 권장합니다. 멀티파트 업로드
는 파일을 업로드할 때 여러 개의 부분으로 분리해 업로드하는 기능이며, 여러 부분 중 일부가 업로드에 실패하더라도 반복적으로 업로드 작업을 수행한다는 특징이 있습니다.
S3 버킷에 대용량 파일을 전송해야 하는 경우 S3 Transfer Acceleration 환경 설정을 통해 전송 속도를 높일 수도 있습니다. 이러한 업로드 작업은 인근 AWS 엣지 로케이션과 Amazon의 내부 네트워크를 통해 고속으로 처리됩니다.
엣지 로케이션이란 ?
엣지 로케이션은 리전, 가용영역과 별개로 AWS의 CDN 서비스인 CloudFront와 AWS의 DNS 서비스인 Route 53의 캐시 서버를 의미합니다. CDN과 DNS같은 서비스들의 서버들은 리전과 별개로 여러개의 엣지 로케이션에 적용되어 서비스되고 있습니다.
웹사이트의 경우처럼 외부에 공개하는 정보가 아닌 이상 S3에 저장하는 데이터도 기본적으로 암호화할 필요가 있습니다. 암호화 기법은 서버측 암호화와 클라이언트측 암호화로 나누어집니다.
서버측 암호화
는 S3 플랫폼 내에서 진행되며, 디스크에 저장될 때 데이터 객체를 암호화하고 적절한 권한 증빙을 통해 데이터 인출을 요청할 때 복호화해 전송합니다. 옵션에는 기업용 표준 키
, 엔벌로프 키(envelope key)
, AWS KMS 서비스
등 3가지가 있습니다.
서버측 암호화는 클라이언트측 암호화에 비해 복잡성이 낮지만 기업 및 기관에 따라 암호화 키를 직접 생성 및 관리하려는 경우가 있는데 이 경우에는 클라이언트측 암호화를 사용할 수 있습니다. AWS KMS-Managed Customer Master Key
를 이용하면 S3에 전송하기 전에 데이터를 암호화할 수 있으며, 데이터 객체 업로드 직전에 데이터 키를 생성합니다.
S3는 객체 저장을 위해 다양한 스토리지 클래스를 제공하며, 어떤 조건에서도 데이터가 유지돼야 하는지 여부에 따라(내구성), 신속하게 데이터를 인출할 수 있는지 여부에 따라(가용성), 혹은 비용을 얼마나 절약할 수 있는지 여부에 따라(비용효율성) 클래스를 선택적으로 사용할 수 있습니다.
S3가 제공하는 고도의 내구성은 S3가 최소 세 개의 AZ, 가용성지역에 자동으로 데이터를 복제해 놓기 때문에 가능합니다. 즉 이렇게 다수의 지역에 데이터를 복제한다는 사실이 때로는 지연을 일으키기도 합니다. 파일의 새 버전을 업로드한 직후 구 버전의 파일을 삭제하면, 특정 위치에서는 이러한 변경 사항이 미처 전파되지 못하는 상황도 발생할 수 있기 때문입니다.
이러한 상황을 방지하기 위해서 업데이트 및 삭제 작업은 종국적 일관성 기준
이 적용되지만, 덮어쓰기 작업에는 쓰기 후 읽기 일관성(read-after-write consistency)
기준이 적용됩니다.
S3 워크로드 중 상당수는 백업 아카이브 작업이 수반됩니다. 잘 설계된 백업 아카이브 작업의 결과, 점점 더 많은 백업 아카이브가 정기적으로 누적이 되면서 스토리지 비용이 증가하고 저장 공간이 줄어들게 됩니다. 스토리지 비용 및 공간 관리를 위해 구 버전을 삭제하거나 폐쇄하는 작업도 필요하며 이를 위해 자동화된 백업 관리 기법인 버전관리
와 생애주기 관리
기법을 통해 효율적으로 관리하게 됩니다.
수명주기의 최소 전환 기간은 30일입니다.
새로 생성한 S3 버킷과 객체에 접근 권한을 외부 사용자 또는 AWS 계정에 부여하기 위해서 접근 제어 규칙(ACL)과 S3 버킷 정책, IAM 정책이 있습니다. 그 중 ACL은 AWS가 IAM을 도입하기 전의 접근 정책이기 때문에 AWS에서는 S3 버킷 정책과 IAM 정책으로 접근 제어 할 것을 권장하고 있씁니다.
S3 버킷 정책과 IAM 정책 외에도 Amazone S3 Access Points
를 이용해 S3 버킷 내 객체에 대한 유저 또는 서비스의 접근을 제어할 수 있으며 프리사인 URL(presigned URL)
을 생성해서 일정 시간 동안만 접근에 유효성을 부여할 수 있습니다. 기본 설정 접근 권한 유효 시간은 1시간(3600초)
입니다.
Glacier
- 저장용량: 40TB
- 기본적으로 저장 데이터 암호화
- 아카이브 이름은 기계 생성 ID 형식
- 객체 인출: 수시간
S3 스토리지
- 저장용량: 용량 제한 없음
- 데이터 암호화는 옵션
- 사람이 읽기 쉬운 키 이름을 제공
- 객체 인출: 거의 즉각적
두 스토리지의 가장 큰 차이점은 데이터 인출 시간입니다. 이는 Glacier의 특징을 가장 잘 설명하는 속성이라 할 수 있으며, Glacier가 저장된 데이터를 거의 인출하지 않는 저렴하게 사용할 수 있는 장기 보관용 스토리지임을 알 수 있습니다.
Amazon Elastic File System은 리눅스 인스턴스를 위한 확장성, 공유성 높은 파일 스토리지로서, 마운트된
Network File System(NFS)
를 통해 VPC에서 필요한 파일에 접근하거나 AWS Direct Connect로 연결된 온프레미스 서버의 파일에 접근할 수 있다.
Amazon FSx는
Lustre
용 또는Windows File Server
용 가운데 선택할 수 있다. Lustre는 Linux 클러스터가 고도의 컴퓨팅 작업을 수행할 때 고성능 파일 시스템에 접속할 수 있게 해주는 오픈소스 분산 파일 시스템이며, Windows File Server용 FSx는 Windows 서버를 위한 EFS라고 할 수 있다.
로컬 스토리지와 클라우드 스토리지를 연결하는 백업 및 아카이브 통합 작업을 도와준다.
기업이 보유한 데이터를 클라우드로 전송할 때는 다소 고가인
AWS Direct Connect
를 이용하거나 좀 더 저렴한AWS Snowball
을 이용하는 방법이 있다. 엑사바이트급 데이터라면 스토리지 컨테이너 운송차인AWS Snowmobile
을 통해 전송할 수 있다. AWS Snowball은 사용자 요청에 따라 물리적인 256비트 암호화 스토리지 디바이스인 Snowball을 배송한다. 사용자는 Snowball에 대용량 데이터를 저장한 뒤 Amazon으로 재배송하며, 전달된 데이터는 사용자의 S3 버킷에 업로드된다.