Post

AWS S3 정리

AWS S3 정리

S3

AWS의 주요 구성 요소 중 하나로 Amazon Simple Storage Service의 약자이다. 객체를 저장하는 무한하게 확장할 수 있는 스토리지이다. S3에 저장하는 파일은 객체라고 부르며, 이 객체는 버킷에 저장된다. S3는 글로벌 서비스라고 착각하지만, 버킷은 특정 리전에 저장된다.

  • 사용 용도: S3는 주로 대규모 데이터를 저장하는 데 쓰인다. DynamoDB 또한 하나의 Item의 최대크기는 400KB이다. 400KB 이상 크기의 데이터면 S3를 사용해야한다.
  • 복제: 복제하려면 버전관리기능이 활성화되어있어야한다. 또 각 버킷에 대한 정책이 서로를 허용하도록 해야한다.
  • 비용 최적화: 생명주기 정책을 통해 관리한다. S3 스탠다드에 보관했다면 최소 30일이상 보관해야 다른 클래스로 옮길 수 있다. S3 Glacier은 최소 90일이상 보관해야 한다.
  • 5GB 이상의 객체는 Multi-Part 업로드가 필수이다, 지연시간을 줄이기 위해 Transfer Acceleration도 가능하다.

네이밍 규칙

네이밍 규칙으로는 대문자, 언더스코어(_)가 안되며 3~63개의 문자로 지어야 한다. 또, IP가 안되며 반드시 소문자와 숫자로 시작해야 한다. 접두사로 xn—, 접미어로 -s3alias가 불가능하다.

Key(Object)

S3는 객체를 저장하고, Key를 통해 객체를 구분하며 접근한다. S3 인터페이스에서는 별도의 디렉터리를 만드는 것 처럼 묘사가 되어있지만, 사실은 단지 Key일 뿐이다. 아래의 예시도 단지 길게 저장할 수 있는 키이며, 해당 키는 “/”를 포함할 수 있다. s3://my-bucket/my_folder1/another_folder/my_file.txt

하나의 객체는 최대 5TB의 사이즈까지 저장할 수 있다. 또한 5GB가 넘으면 multi-part 업로드를 이용해야 한다.

주 사용처

노션, 나스닥, Cisco등 다양하게 S3를 찾아볼 수 있다. 특히 노션에서 이미지를 저장한 뒤 원본보기를 선택하면 AWS S3 Pre-signed URL이 나오는 것을 확인가능하다.

  • 백업
  • 스토리지
    • 애플리케이션 호스팅
    • 이미지, 동영상 저장
    • 데이터 Lake 저장(빅데이터 분석용)

보안

S3 보안 방법은 유저기반, 리소스 기반 2개가 존재한다. S3에 접근할 때는 IAM으로 허가를 받거나, S3 리소스 정책으로 허가를 받거나 둘중에 하나로 이뤄진다.

  • 유저기반: IAM 정책으로 관리하며, IAM 정책에서 S3 접근을 허용한 유저만 접근할 수 있다.
  • 리소스기반: 리소스기반으로 S3의 접근을 제어한다. Bucket 정책을 주로 사용한다.
    • Bucket 정책: 버킷에 대한 정책을 설정할 수 있다. 이것은 다른 계정에 대한 접근도 허락할 수 있다.
    • 객체수준 ACL(Access Control list): 객체에 대한 접근 제어 리스트를 설정한다.
    • 버킷수준 ACL: 버킷 수준으로 관리할 수 있지만, 자주 사용하지 않는다고 한다.
  • 암호화: 별도의 암호키를 가지고 객체를 암호화할 수 있다.

[버킷 정책]

JSON 기반으로 작성된다. IAM과 유사하다.

Principal은 해당 정책에 적용할 유저와 계정을 의미한다.

Effect = Allow, Deny

Action = 해당 정책에서 사용할 API를 의미한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
{
    "Version": "2012-10-17",
    "Id": "Policy1707557607499",
    "Statement": [
        {
            "Sid": "Stmt1707557605605",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::kane-test-bucket-7115/*"
        }
    ]
}

버전관리

S3에서는 버전관리를 제공한다. 즉, 같은 키로 다른 파일을 업로드하면 객체의 Version이 생기고 업데이트된다. 만약 버전관리가 되지않는 파일은 Null 버전을 가지게 된다. 또한 버전관리를 중단해도 이전버전이 삭제되진 않는다.

만약 특정 이미지를 삭제한다면 이전 버전이 남는다. 즉 하나의 파일을 업로드하고 삭제하면 현재 버전은 null 버전으로 입력되고, 삭제된 이미지는 Delete marker Type으로 남는다. (Show versions 옵션을 활성화 해야 확인할 수 있다.)

Untitled.png

복제

우선 복제를 하려면 복제하려는 대상 버킷과 복제 내용을 받을 버킷 모두 버전과리를 활성화해야 한다.

복제는 다른 계정간에 복제가 가능하며 IAM 권한이 S3에게 알맞게 부여되어야 한다. 복제하면 버전 ID가 동일하다.

같은 리전내의 복사를 SRR, 다른 리전내의 복사를 CRR이라고 한다. CRR은 짧은 대기시간, 컴플리언스 등을 위해 주로 사용되고, SRR은 다른 계정끼리 내용을 복사할 때 사용된다.

원본 버킷에서의 객체 삭제는 복제 버킷에 반영되지 않는다. 삭제 마커도 복제할 수 있다. 이 경우 원본 객체는 삭제 마커가 되며, 복제 버킷에도 삭제 마커가 복제된다.

  • Batch Replication(옵션)
    • 기존 객체 + 복제에 실패한 객체까지 복제할 수 있는 기능, 만약 삭제하려면 버전ID로 삭제한다.(영구)
  • 연쇄 등식이 성립하지 않는다.
    • 버킷1의 내용을 버킷2의 복제하고, 버킷2의 내용을 버킷3에 복제한다고 해서 버킷1의 객체가 버킷3에 저장된 것은 아니다.

스토리지 클래스

지속성은 99.999999999%이다. 9가 11개 있다. 즉, 10,000,000 1천만개의 객체가 있으면 평균적으로 1년에 하나씩 손실된다. 이것은 스토리지 클래스 티어에 상관없다. 또한, 정책을 통해 스토리지 클래스를 변경을 규칙기반으로 자동화할 수 있다.

가용성은 언제나 접근가능한지를 묻는 것이며 스토리지 클래스 티어마다 다르다. 아래에 나와있는 %는 가용성을 의미한다.

  • Amazon S3 Standard - General: 99.99%, 처리량 높고, 지연시간이 짧음, 2개의 기능장애 커버가능
    • 모바일, 게임, 콘텐츠 배포
  • Amazon S3 Standard-Infrequent Access (IA): 99.9%자주 접근하지 않지만, 지연시간이 짧아야한다.
    • General보단 값싸지만, 검색비용이 추가적으로 과금된다.
    • 재해복구와 백업
  • Amazon S3 One Zone-Infrequent Access: 99.5% 단일 AZ로, AZ가 파괴된 경우 손실된다.
    • 온프레미스 데이터 2차 백업

[S3 Glacier]

  • Amazon S3 Glacier Instant Retrieval: 밀리초 단위로 검색가능, 최소 보관 기간 90일
  • Amazon S3 Glacier Flexible Retrieval
    • Expedited: 1~5분이내 검색가능
    • Standard: 3~5시간이내 검색가능
    • Bulk: 5~12시간이내 검색가능 (무료)
  • Amazon S3 Glacier Deep Archive(저렴)
    • Standard: 12시간
    • Bulk: 48시간
  • Amazon S3 Intelligent Tiering: 사용패턴에 따라 액세스된 티어간에 객체를 이동할 수 있음
    • 모니터링비용, 티어를 옮기는 비용은 들지만 추가 과금은 없음

Event

S3에서 이벤트란 객체의 생성, 삭제, 복구, 복제를 의미한다. 이런 이벤트는 필터링할 수 있다. 예를 들어 *.jpg 와 같이 특정 이름의 객체만 고려할 수 있다.

이벤트 전송 대상은 SNS, SQS, Lambda, EventBridge가 있으며 각 IAM 권한으로 정책을 첨부해야 한다. SNS, SQS에서 S3가 자신에게 데이터를 보낼 수 있도록 허용하는 Policy을 추가해야 한다. 이 중 특히 EventBridge는 18개의 AWS 서비스로 이벤트를 전송할 수 있으며 고급 필터링 옵션을 사용할 수 있다.

객체가 생성되면 자동으로(Lambda 등을 통해) 해당 이미지의 썸네일을 만드는 등 이벤트를 활용할 수 있다.

Access Point

S3정책으로 모든 접근을 컨트롤하면, 사용자가 많아질수록 관리하기 힘들어진다. S3에 대한 다양한 Access Point를 만들어, 접근을 제어할 수 있다. 아래의 사진과 같이 각 액세스 포인트로 유저그룹별로 접근을 제어할 수 있다. 재무관련 사용자는 재무 관련 객체에만 접근할 수 있게하는 등 관련 사용자들을 묶을 수 있다.

각 액세스 포인트는 별도의 DNS name을 가지고 각 정책을 가진다. (그렇기에 정책을 설정해야 한다.)

This post is licensed under CC BY 4.0 by the author.