AWS - S3란?

오송아·2021년 5월 11일
1
post-thumbnail

📌 S3(Simple Storage Service)란?

  • 안전하고 가변적인 Object 저장공간을 제공
    (object란 이미지, 동영상, 파일을 의미하며 즉, 운영체제 업로드해서 사용하는 것은 안됨)
  • 편리한 UI 인터페이스를 통해 어디서나 쉽게 데이터를 저장하고 불러올 수 있음
  • 파일 크기는 0KB부터 5TB까지 지원
  • 저장공간 무제한
    (파티션 크기를 변경하거나 디스크 크기를 변경하지 않아도 파일을 마구 올려도 된다.)
  • Bucket이라는 이름을 사용함
    (디렉토리와 유사함)
  • Bucket은 보편적인 namespace를 사용함
    (IAM과 마찬가지로 S3는 글로벌로 되어 있다. 따라서, 리전과 상관없이 Bucket 이름은 고유해야 한다)

S3 Object 구성요소

  • Key : 파일명
  • Value : 파일에 대한 데이터
  • Version ID : 버전 id를 통해 이전 버전으로 쉽게 복원할 수 있음
  • Metadata : 데이터의 데이터라는 뜻이며 언제 파일이 업로드 되었는지, owner, 수정 등
  • CORS (Cross Origin Resource Sharing) : 지역 무시하고 한 버켓의 파일을 다른 버켓에서 접근 할 수 있도록 함

S3 Data Consistency Model

  1. Read after Write Consistency (PUT)
    파일이 S3버켓에 올라간다면 즉시 쓸 수 있다, delay없음
  2. Eventual Consistency (UPDATE, DELETE)
    버켓에 올라간 파일 내용을 변경 시키거나 삭제 그 결과가 S3에서는 바로 나타나지 않음

다양한 S3 스토리지 타입

내구성이란? 얼마나 데이터 손실 없이 잘 복원 되는지
가용성이란? 얼마나 데이터 접근이 용이한지

  • 일반 S3
    가장 보편적으로 사용되는 스토리지 타입
    높은 내구성, 가용성 (Durability, Availability)
  • S3 - IA (Infrequent Access)
    자주 접근되지는 않으나 접근시 빠른 접근이 요구되는 파일이 많을시 유용
    일반 S3에 비해 비용은 저렴하나 접근시 추가 비용 발생
    멀티 AZ를 통한 데이터 저장 -> 높은 가용성
  • S3 - One Zone IA
    단일 AZ를 통한 데이터 저장
    단일 AZ에 의한 데이터 접근 제한 (조금 낮은 가용성) -> 서버 다운과 같은 문제들로 데이터 접근에 여러 제한
    데이터 접근시 S3 - IA보다 20% 비용 저렴
  • Glacier
    거의 접근하지 않을 데이터 저장 시 유용
    매우 저렴한 비용
    데이터 접근시 대략 4-5시간 소요
  • Intelligent Tiering
    데이터 접근 주기가 불규칙할때 매우 유용
    2가지 티어 존재 - 서로 옮긴다
    Frequent Tier
    Infrequent Tier
    : 데이터 접근이 한달이상 없을 경
    데이터 접근주기에 따라 두가지 티어중 하나로 선택됨
    Frequent Tier가 비용이 약간 더 비쌈
    최고의 비용 절감 효율을 누릴 수 있음

S3 요금

  • GB당 지불
  • PUT, GET, COPY 요청 횟수
  • 데이터 다운로드시 / 다른 리소스로 전송시에 따라 비용 달라짐
  • Metadata (object tag) : 어떤 오브젝트가 특정 태그가 걸려있다고 하면 어떤 부서에서 사용되는지일 경우 추가적인 비용이 들어간다

S3 사용 용례

S3 버켓 만들고 나서 aws는 보안적인 측면을 생각하여 막아두는 게 있다.

  • 파일 저장소 (로그, 다양한 파일들(이미지, 비디오, 압축파일 등)
    S3에 특정 파일이 업로드될 시, 어떤 이벤트를 트리거 시켜 다른 서비스를 실행 시키는 것도 S3 사용
  • 웹사이트 호스팅
    html, css, javascript와 같은 파일들을 올려 실제 웹사이트를 돌리기 위한 파일 업로드, S3를 도메인 dns로 사용할 수도 있다.
    참고로 Route 53를 사용하여 도메인을 S3 버켓에 사용할 수도 있다.
  • CORS
    S3버켓도 특정 리전이 존재한다, 리전이 다른 버켓 두개 중 하나의 버켓이 다른 버켓으로 접근한다면 리전이 달라서 에러가 뜨는데, 이런 오류를 해결해주는 게 CORS이다.

최초 S3 버켓 생성시 -> 비공개(PRIVATE)

최초 버켓을 생성시 버켓을 만든 사람만이 그 버켓에 접근 할 수 있음
다른 사람들이 접근권한을 주기 위해서는
1. 버켓 정책(.json) 변경 (Bucket Policy)
버켓 안에 있는 모든 파일들에게 적용
2. 접근 제어 리스트 변경 (Access Control List)
파일 하나하나에 다른 접근 권한을 부여할 수 있음 //즉 사람마다 다르게 파일 접근 권한 줄 수 있음

S3 암호화

  1. 파일 업로드/다운로드시
  • SSL / TLS : S3에서 파일 업로드 다운로드시 일어나는 보안
  1. 가만히 있을시
    SEE-S3 : S3버켓에 저장되어 있는 모든 object들은 고유한 키를 가지고 있는데, SEE-S3는 마스터키(AES-256)를 일정 시간마다 변경
    SSE-KMS : S3에서 일괄적으로 관리, SSE-KMS를 통해 언제, 누가, 어떻게 암호를 풀었는지에 대한 기록이 복원되어 있음
    SSE-C : 암호키를 직접 다룰 수 있으며 따라서 키 값을 변경 시켜줘야한다


위는 S3에 파일 업로드 시 PUT 요청이 생성, 헤더는 파일 이름, Host버켓이름, Date언제 업로드 되어있는지 등등의 내용이 들어가 있다.


만약 , 파일이 업로드 될시 암호화된다면 헤더에 x-amz-server-side-encryption-paramerer가 함께 나간다. 즉, S3에 파일을 업로드될 시 PUT 요청의 헤더에 x-amz-server-side-encryption-paramerer가 있다면 우리가 암호화 요청을 건 것으로 간주하고 암호화를 걸어준다.

S3의 중요 포인트

S3에서는 리전 선택 x , 글로벌
버켓 이름 지역과 상관없이 고유한 이름, 다른 지역이라고 같은 버켓 이름 줄 수 없다
이미 올려놓은 파일은 퍼블릭 액세스로는 불가, 버켓 정책 가능

Q. 암호화가 걸리지 않은 파일을 버켓에 못올리게 하는 기능은 없을까요?
버켓 정책 설정 이용하면 된다

profile
백엔드 개발자

0개의 댓글

관련 채용 정보