이안의 평일코딩

[AWS] S3 Amazon Simple Storage Service 본문

Front-end/AWS

[AWS] S3 Amazon Simple Storage Service

이안92 2021. 4. 30. 16:43
반응형

 S3(Simple Storage Service)

 

AWS의 대표적인 서비스로 객체 스토리지이다.

파일 업로드, 다운로드, 검색이 가능하며 무제한 용량에 다양한 인증, 권한 부여를 제공한다.

리전 기반 서비스로 매우 안전하고 상대적으로 빠르지는 않다.

CDN과 연동 가능하며 static web page 기능 지원된다.

필요에 따라 버저닝(versioning) 기능 사용이 가능하며 다양한 요금 옵션으로 비용 절감이 가능하다.

 

S3 사용예

 

클라우드 저장소 (개인 파일 보관, 구글 드라이브처럼 사용 가능)

서비스의 대용량 파일 저장소 - 이미지, 동영상, 빅데이터 (ex: 넷플릭스)

서비스 로그 저장 및 분석

AWS 아데나를 이용한 빅데이터 업로드 및 분석

서비스 사용자의 데이터 업로드 서버 (이미지 서버, 동영상 서버)

중요한 파일은 EC2의 SSD (EBS: Elastic Block Store)에 저장하지 말고 S3에 저장

glacier와의 연동으로 비용 절감 및 규정 준수 가능

(빙하라는 뜻으로 자주 쓰지 않는 데이터를 S3에서 자동으로 변환)

 

S3 기본개념

 

버킷: 객체(파일)을 저장하기 위한 컨테이너

버킷의 이름은 전 세계에 유일하게 지정해야 한다. (중복 불가)

오브젝트: 버킷은 오브젝트 저장소라고 하는데 일반적으로 오브젝트 = 파일이다.

S3 버킷의 모든 오브젝트들은 고유한 URL을 가진다.

Key: 버킷안의 오브젝트를 식별하는 데 사용

Version: Versioning 활성화 시 파일명뒤에 버젼 쿼리스트링이 붙는다.

Prefix: 버킷 안에 폴더를 생성할 수 있는데 폴더는 사실 키의 접두사(prefix)이다.

S3에는 폴더 개념은 사실 없다.

https://ianlee.s3.amazonaws.com/2021-4/image.png

버킷 이름: ianlee

prefix 폴더: 2021-4, 파일명 image.png

key: 2021-4/image.png

 

S3에서 권한 제어 하는 법

 

ACL(Access Control List): 객체마다 ACL 지정 가능. 주로 간단한 제어에 사용

Bucket Policy: IAM Policy와 유사한 문법. ACL보다 복잡하고 세부적으로 지정 가능

IAM을 이용한 제어: IAM 사용자에게 버킷 접근 권한을 주기 위해 사용

PresignedURL: URL을 이용해 임시 권한을 부여하는 기능으로 매우 유용하다

 

1) 파일 public으로 만들기

 - public 설정 가능하도록 버킷 설정 변경: public 액세스 차단 해제

 - make public 기능으로 파일 public 접근 가능하도록 설정

2) ACL 살펴보기

 - 퍼블릭으로 설정 기능도 ACL을 이용해서 권한을 제어한 것이다.

 - 모든 S3 객체는 ACL이 있고 이를 이용해 개별 권한제어가 가능하다.

3) bucket policy로 특정 폴더에 접근 권한 주기

 - ACL을 이용해서 현재 폴더의 하위 폴더 생성 불가 => 버킷 정책 생성

 

awspolicygen.s3.amazonaws.com/policygen.html

 

AWS Policy Generator

Click below to edit. To save the policy, copy the text below to a text editor. Changes made below will not be reflected in the policy generator tool.

awspolicygen.s3.amazonaws.com

{
    "Version": "2012-10-17",
    "Id": "Policy1619768378384",
    "Statement": [
        {
            "Sid": "Stmt1619768368168",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::ianlee-sample/public/*"
        }
    ]
}

 

S3 CLI에서 사용하기

 

aws configure : CLI에서 접속

aws s3 ls : 현재 s3 저장소 목록 확인

aws s3 mb s3://ianlee : ianlee라는 s3 저장소 생성

aws cp image.png s3://ianlee : ianlee에 image.png 업로드

aws cp image.png s3://ianlee/hello : ianlee의 hello 폴더(prefix)에 image.png 업로드(hello도 같이 생성)

aws s3 cp s3://ianlee/image.png ./ : ianlee에서 image.png 다운로드

aws s3 rm s3://ianlee/image.png : ianlee에서 image.png 파일삭제

aws s3 sync ./ian s3://ianlee : ianlee에 현재디렉토리의 ian폴더 안의 파일들을 업로드

aws s3api put-object-acl --bucket ianlee --key image.png --acl public-read : ianlee의 image.png에 acl 설정

 

static web hosting

 

정적 웹 호스팅: S3 페이지를 웹 서버처럼 사용가능, 단 정적인 페이지만 가능

CDN서비스인 CloudFront와 연동시 성능 및 보안에 이점이 있음

Route53을 이용해서 DNS 연동가능하며 이 경우 버킷 이름이 도메인 이름과 같아야 함

 

multipart upload

 

CLI 또는 SDK 사용시 단일 PUT 사용으로 5GB까지 업로드 가능하며 관리 콘솔은 160GB 제한

multipart upload 사용시 CLI 또는 SDK 사용 가능하며 최대 5TB까지 가능하다.

 

S3 요금

 

프리 티어 사용중이라도 요금이 부과될 수 있고 비용 알람 설정이 필수이다.

스토리지 클래스와 라이프 사이클 쓰면 비용을 절감할 수 있다.

aws.amazon.com/ko/s3/storage-classes/

 

객체 스토리지 클래스 – Amazon S3

 

aws.amazon.com

파일 생성후 라이프 사이클 규칙을 지정하고 수명 관리가 가능하다.

비용절감 및 규정준수에 유효하게 사용하며 로그 파일 관리, 민감 정보 보관 및 폐기등에 유용하다.

예) 로그 파일 수명 관리

최초 생성 30일 후 onezone_IA로 지정, 이후 30일 지나면 glacier로 이동, 6개월이 지나면 삭제

 

Versioning (버전 관리)

 

버킷 속성에서 버전 관리를 활성화하면 쉽게 사용 가능하다.

변경내용을 추적할 수 있으므로 매우 편리하지만 비용을 조심해야한다.

활성화하면 라이프 사이클 관리 기능이 다소 복잡해진다.

 

Eventual Consistency

 

강력한 쓰기 후 읽기 일관성 제공 => 쓰자마자 읽기 가능

이전에는 Eventual Consistency(시간이 조금 걸림)였는데 개선되었다.

 

반응형
Comments