본문 바로가기

IT 지식

Amazon S3이란

 

1. Amazon Simple Storage Service(S3)

S3는 온라인 스토리지 서비스입니다. 앞에 온라인이라는 글자가 붙는 이유는 데이터 조작에 HTTP/HTTPS를 통한 API가 사용되기 때문입니다.

S3는 REST, SOAP와 같은 단순한 웹 서비스 인터페이스를 사용합니다. 저장하는 데이터 양에 대한 비용도 저렴하고, 저장할 수 있는 데이터 양이 무한에 가깝습니다.

S3는 FTP 서버처럼 단순한 파일 저장 영역으로 사용할 수도 있으며, 다양한 AWS 서비스의 사용 로그 저장, 정적 웹 사이트 호스팅 기능 등을 가지고 있습니다. 또한, 비용 체계와 사용 방법이 다르기는 하지만, EBS 스냅샷의 저장 영역으로도 사용되고 있습니다. 이외에도 빅 데이터 분석의 데이터 소스로 활용하거나 On-Premise 환경의 재난복구 전용 데이터 백업, Auto Scaling을 활용한 EC2 인스턴스의 로그 저장 등으로 폭 넓게 활용할 수 있습니다.

 

2. S3의 특징

  • 최대 99.999%의 내구성
  • 99.999%의 가용성이라는 높은 신뢰성
  • 용도에 따른 미세한 접속 관리를 통한 안정성 확보
  • 사실상 무제한적인 용량

 

3. S3 버킷과 객체의 개념

S3는 버킷(Bucket)이라는 컨테이너를 놓을 리전을 선택하고, 해당 컨테이너 내부에 객체(Object)라는 형태로 데이터를 저장합니다. 버킷은 여러 개 만들 수 있으며, 버킷 단위로 접근 제한을 설정할 수도 있습니다. 

객체의 최대 크기는 5TB이며, 저장할 수 있는 수에 제한은 없습니다. 추가로 객체를 그룹화하는 디렉터리를 생성할 수 있습니다.  따라서 파일 서버처럼 디렉터리를 계층화해서 객체를 저장할 수 있습니다.

 

3-1 버킷(Bucket)

  • 생성하면 default로 private.
  • 한 계정 당 최대 100개의 버킷 사용 가능.
  • 버킷 소유권은 이전할 수 없다.
  • 버킷의 이름은 region에 상관없이 globally unique 해야 한다.
  • 버킷 주소는 https://s3-리전이름.amazonaws.com/버킷이름
  • S3 데이터 모델은 flat structure라서 버킷에 hierarchie나 folder는 없다.
  • 하지만 keyname prefix (Folder1/Object1)를 사용해서 논리적인 hierarchies를 암시할 수 있다.
  • 버킷 안에 다른 버킷을 둘 수 없다.
  • Access Control
    • Bucket Policies
    • Access Control Lists
  • Path-Style URL에서 버킷 이름은 Region specific endpoint를 사용하지 않는 이상 도메인명에 포함되지 않는다.
  • Virtual Hosted Style URL에서 버킷이름은 URL의 도메인명의 일부가 된다.
  • Virtual hosting은 HTTP Host Header를 사용해서 REST API 콜의 버킷을 address하는 데 사용될 수 있다.

 

3-2 객체(Object)

  • Object level storage(not a Block level storage)
  • 객체 하나의 크기는 1Byte ~ 5TB
  • 저장 가능한 객체 갯수 무제한
  • 객체마다 각각의 접근 권한 설정 가능
  • default로 private 이다.
  • 객체 metadata는 객체가 업로드 된 후에는 수정될 수 없고, 복사해서 수정해야 한다.
  • 객체는 Range HTTP header를 이용해서 부분적으로 검색할 수 있다.
  • 객체는 Pre-signed url를 사용해서 다운로드 할 수 있다.
  • 객체의 metadata는 response header에 반환된다.

 

4. S3의 스토리지 옵션

S3는 표준 스토리지와 Reduced Redundancy Storage(RRS)가 있습니다.

표준 스토리지는 지정한 1년 동안 99.999%의 견고성과 99.99%의 가용성을 제공하며, 2개의 거점에 데이터를 제공하므로, 데이터 손실이 발생해도 데이터가 유지되게 설계되어 있습니다. 심각할 정도로 요금을 확실하게 낮춰야 한다는 경우가 아니라면 일반적으로 표준 스토리지를 사용합니다. RRS는 지정한 1년에 99.99%의 견고성과 99.99%의 가용성을 제공하며, 단일 시설에서 데이터 손실을 막게 설계되어 있습니다. 주로 요금 절감을 해야할 목적일 때 RRS를 사용합니다.

 

5. S3 비용

 

6. S3을 사용하는 이유

  • S3는 저장 용량이 무한대이고 파일 저장에 최적화되어 있다. 용량을 추가하거나 성능을 높이는 작업이 필요없다.
  • 비용은 EC2와 EBS로 구축하는 것보다 훨씬 저렴
  • S3 자체가 수천 대 이상의 매우 성능이 좋은 웹 서버로 구성되어 있어서 EC2와 EBS로 구축했을 때 처럼 Auto Scaling이나 Load Balancing에 신경쓰지 않아도 된다.
  • 동적 웹페이지와 정적 웹페이지가 섞여있을 때 동적 웹페이지만 EC2에서 서비스하고 정적 웹페이지는 S3를 이용하면 성능도 높이고 비용도 절감.
  • 웹하드 서비스와 비슷하지만, 별도의 클라이언트 설치나 ActiveX를 통하지 않고 HTTP 프로토콜로 파일 업로드/다운로드 처리
  • S3 자체로 정적 웹서비스 가능

 

7. S3 암호화

S3에 데이터를 저장할 때는 데이터를 자동으로 암호화하는 서버 사이드 암호화(SSE)를 활용할 수 있습니다. S3에서 객체를 생성하거나 속성을 변경할 때 암호화 옵션을 지정하면, 자동으로 모든 것이 이루어집니다. 이때 암호화 방식은 AES-256 알고리즘으로 구현되었으며, 다음 3가지 패턴 중에서 키 관리 방식을 선택할 수 있습니다.

 

  • S3 Managed Keys : SSE-S3 (Amazon S3 키관리)
  • AWS Key Management Service, Managed Keys : SSE-KMS (AWS KMS)
  • Customer Provided Keys : SSE-C (클라이언트 키)

 

8. S3 접근 관리

S3 접근 관리에는 버킷 정책, ACL, IAM 제어라는 3가지가 있습니다. 다음 표는 각각의 방법이 어떤 단위로 제어할 수 있는지를 정리한 것입니다.

항목 버킷 정책 ACL IAM 제어
AWS 계정 단위 제어 X
IAM 사용자 단위 제어 X
S3 버킷 단위 제어
S3 객체 단위 제어
IP 주소/도메인 단위 제어 X

버킷 정책은 버킷 단위로 접근 제어를 확정하고 이후에 변경이 적을 때, ACL은 객체 단위로 접근 제어할 때, IAM 제어는 사용자 단위로 접근 제어할 때 사용하는 것이 일반적입니다.

버킷 정책의 IAM 사용자 단위 제어는 IAM 사용자의 명칭과 일치하는 버킷만 사용할 수 있게 제한되어 있습니다. 따라서 IAM 사용자를 제어할 때는 IAM 정책을 사용하는 것이 좋습니다.

 

9. S3 이벤트 알림

S3 버킷, 객체에서 이벤트가 발생했을 때, 다음과 같은 이벤트 알림을 보낼 수 있습니다.

  • SNS 토픽으로 메시지 발행
  • SQS 큐에 메시지 생성
  • Lambda의 Lambda Function으로 알림

S3에서 지원하는 이벤트로 PUT, POST 메서드로 인한 객체 생성, 덮어쓰기, 복사, 멀티 파트 업로드 완료, Reduced Redundancy Storage(RRS) 내부의 객체 삭제 등이 있습니다.

 

10. S3의 웹 호스팅 기능

S3는 정적 콘텐츠를 제공하는 웹 호스팅 기능도 제공합니다. 정적 콘텐츠 배포는 일반적인 S3 사용과 마찬가지로 S3 버킷에 저장하기만 하면 됩니다. 추가로 S3의 정적 웹 사이트에는 S3의 자체적인 도메인이 할당되는데요. Route53 등의 도메인 이름 서비스(DNS)를 사용해서 다른 도메인을 부여할 수 있습니다. 이러한 때는 호스팅하는 버킷 이름과 도메인 이름을 맞춰줘야 합니다. 동적 웹 콘텐츠 호스팅은 Elastic Beanstalk 또는 EC2를 활용하며, Ruby, Pyhon, PHP, Perl 등을 사용한 동적 콘텐츠 웹 호스팅은 불가능합니다.