AWS S3

임상규·2023년 8월 5일
1

AWS

목록 보기
2/33
post-thumbnail

S3란

S3는 Simple Storage Service로 AWS 스토리지 서비스 이다.

개념 및 기능, 보안

객체 스토리지

앞으로 다양한 개념의 스토리지들이 등장할 것이다.

예를 들어 EBS (Elastic Block Stroage Service)는 블록 스토리지,
EFS (Elastic File System)는 파일 스토리지 등이 나올 예정이다.

각 서비스들은 많은 차이점이 있으나 스토리지 종류로 구분하는것이 가장 편하다.

객체 스토리지란 구조화 되지 않은 데이터를 저장하는 스토리지를 말한다.
즉, 사진, 동영상, 이메일, 웹 페이지, 같은 데이터들을 저장하는 공간이라는 것이다.

통상 우리는 데이터들을 폴더에 보관하는데 S3에서는 객체를 버킷이라는 공간에
보관한다.

❗️관련 용어❗️

  • 스토리지 : 컴퓨터에 데이터를 저장하는 장소
  • 버킷 : 파일을 저장하는 기본 장소 (최상위 디렉토리)

Restful API를 사용하여 객체에 액세스

HTTP/HTTP 프로토콜을 사용

Restful API는 두 컴퓨터 간 서로 데이터 (정보)를 교환하는 방식을 이야기 한다.

Representational State Transfer Application Programing Interface의 약자로
서로의 자원의 상태를 표현하고 전송하는 방식이다.

먼저 REST의 작동 방식은

HTTP프로토콜을 이용하여 데이터를 요청하는 Client가 Server에게
URI를 통해 자원을 명시하고 Method를 보낸다. (Request)
Server는 Client 로부터 요청을 받고 응답을 한다. (Response)

API는
애플리케이션간 계약에 따라 요청과 응답을 통해 통신하는 방법을 정의한다.

따라서 S3에서는
'HTTP/HTTPS 프로토콜을 이용해 요청과 응답을 받는 방식으로 객체에 접근한다.'
라고 이해하면 되겠다.

❗️관련 용어❗️

  • URI : Uniform Resource Identifier 로 보통 식별자로 표현하며,
    자원의 위치를 나타내는 주소
  • HTTP : Hyper Text Transfer Protocol로 WWW에서 쓰이는 핵심
    프로토콜.
  • HTTPS : HTTP에 SSL (Secure Sockets Layer)과 TLS (Transport Layer Security)이 결합되어 HTTP의 보안이 강화된 프로토콜 방식.
  • SSL : 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜
  • TLS : SSL을 표준화 한 방식
  • 프로토콜 (Protocol) : 네트워크에서 노드와 노드가 통신할 때 어떤 노드가
    어떤 노드에게 어떤 데이터를 어떻게 보내는지 작성하기 위한 양식
  • 노드: 네트워크의 연결된 기기를 표현하는 기초 단위 (노드 1개: 컴퓨터 1대)

저장 가능한 파일 개수 / 단일 파일 최대 크기

S3는 저장 가능한 파일 개수에 대한 제한이 없다.
단, 단일파일의 최대 크기는 5TB이고, 단일 파일의 크기가 5GB보다 크면
멀티파일 업로드를 실시한다. (여러번 나눠서 업로드)

❗️관련 용어❗️

  • TB : TeraByte로 1TB = 1,000GB

데이터를 여러 데이터 센터에 저장

데이터를 업로드 하면 최소 3개의 AZ에 복제하여서 S3가 있는 AZ에 장애가 발생해도 신속한 재해복구가 가능하다.

❗️관련 용어❗️

  • AZ : Availability Zone으로 가용영역을 의미한다.
    가용 영역은 각 리전별로 최소 하나 이상의 데이터 센터로 이루어진다.
  • 리전 (Region) : AWS의 서비스가 제공되는 리소스의 지리적 위치.
    하나의 리전은 최소 2개 이상의 AZ로 이루어진다.

99.999999999%의 내구성

9가 11번 있다고 하여 11개의 9라고 표현하기도 한다. (11 9's)
99.999999999%의 내구성이라고 하면 실감이 나질 않는데 비유하자면

저장된 객체에 대한 연간 평균 손실 가능성은 0.0000000001%이며, 이는 만약 S3에 10,000,000개의 객체를 저장했다면, 10,000년마다 단 하나의 객체가 손실될 수 있는 확률이다.

버전관리

버킷수준에서 활성화하는 기능으로 버킷이 의도치않게 삭제되는것을 방지한다.
버킷을 업데이트 후에도 이전버전으로 롤백 및 복구가 가능하다.

보안

CORS (Cross-Origin Resource Sharing)

한글로 표현하면 교차 오리진 리소스 공유 이다.
리소스는 자원을 의미하고,
오리진은 Scheme(Protocol) + Host(Domain) + Port로 이루어져 있다.

웹 브라우저 기반 보안 매커니즘으로 메인 오리진을 방문하는동안 다른 오리진에 대한 요청을 허용하거나 거부하는 것이다.

(Scheme, Host, Port가 동일하면 같은 오리진)

말로 표현하면 매우 어려운데 어느정도 네트워크 상식이 있다면 쉽게 이해할 수 있다.
(물론 나도 네트워크를 열심히 배우고 있는 입장이긴 하지만)

HTTP 프로토콜의 헤더를 사용하여 웹 서버가 다른 오리진에서 요청한 콘텐츠를 브라우저가 표시할 수 있도록 하는 기능이다.

❗️관련 용어❗️

  • Scheme : URL에 가장 앞에 붙는것으로 통상 HTTP/HTTPS가 온다.
  • Host : 네트워크에 연결되어 있는 컴퓨터.
  • Domain : 숫자로 이루어진 IP주소를 로마자로 바꾼 것.
  • Port : 컴퓨터 안에서 프로그램을 찾기 위한 수단
  • IP : 컴퓨터를 찾을 때 필요한 주소

MFA (Multi-Factor Authentication)

사용자에게 암호 이외의 추가 정보를 입력하도록 요구하는 다중 단계 계정 로그인 과정이다.

주로 사용하는것은 Authy, Google Authenticator (구글 OTP) 등이 있다.

S3에서는 객체 버전의 영구삭제, 버킷에 대한 버저닝 중단으로 사용한다.

추가적인 기능으로 MFA Delete를 사용하려면 버킷에서 버저닝을 활성화 해야하므로 루트계정만이 활성화/비활성화가 가능하다. (콘솔로는 불가능, CLI 활용)

❗️관련 용어❗️

  • 루트계정 : AWS를 이용하여 서비스를 배포하려고 할 때 처음 만든 계정
  • CLI : Command line interface로 명령줄 인터페이스.
    명령어를 통해 시스템을 제어.

Access log

감사목적으로 S3 버킷에 대한 모든 액세스를 기록한다.
계정 상관없이 S3로 보낸 모든 요청은 승인/거부 없이 파일로 기록된다.

Pre - Signed URLs ( 미리 서명된 URL)

프라이빗 S3버킷에 대해서 퍼블릭으로 전환하지 않고 URL을 통해 액세스 권한을
제공한다.

콘솔, CLI, SDK를 사용하여 생성가능하다.

🔥만료 시간🔥

  • 콘솔 : 최대 12시간
  • CLI : 최대 168시간

❗️관련 용어❗️

  • SDK : Software Development Kit으로 개발자를 위한 플랫폼 별 구축 도구 세트

버킷 정책

Json 기반으로 정책을 작성하며 해당 정책이 허용되는 버킷과 객체 명시,
작업의 허용/거부, 사용자 및 객체에 대한 읽기 허용 여부를 작성한다.

기반에 따른 보안

사용자 기반

IAM 정책을 통해 어떤 API호출이 특정 IAM 사용자를 위해 허용되는지 승인한다.

❗️관련 용어❗️

  • IAM : Identify and Access Manger로 AWS 리소스에 대한 액세스를
    안전하게 제어할 수 있는 서비스

리소스 기반

  1. 버킷정책 : 특정 사용자 또는 다른 계정의 사용자 허용
  2. 객체 액세스 제어 목록(ACL) : 객체를 작은 단위로 나누고 다수의 호출로 결과를 생성 (비활성화 가능)

S3 암호화

SSE (Server-Side Encryption)

  1. SSE-S3
    : AWS에서 제공 / 관리되는 키를 통해 데이터를 암호화하는 방법이다.
  2. SSE-KMS
    : AWS KMS를 통해 암호화용 키를 적용하는 방법

    🔥제약
    : 파일을 업로드, 다운로드 시 KMS키를 사용하기 때문에 처리량이 매우 높은 S3버킷이 있고 모든 파일이 KMS로 암호화 되어 있으면 스로틀링 오류등이 발생 가능.

  3. SSE-C
    : 회사 또는 개인이 온프레미스 환경에서 자체적으로 관리하는 키를 통해 암호화하는 방법

❗️관련 용어❗️

  • KMS : Key Management Service로 데이터를 보호하는 데 사용하는 암호화 키를 쉽게 생성하고 제어할 수 있게 해주는 관리형 서비스
  • 스로틀링 : CPU, GPU 등이 지나치게 과열될때 기기의 손상을 막고자 클럭과 전압을 강제적으로 낮추거나 강제로 전원을 꺼서 발열을 줄이는 기능

클라이언트 측 암호화

데이터를 S3로 보내기전에 클라이언트가 직접 암호화하는 것.

기능

S3 복제

CRR (Cross-Region Replication)

➡️ 서로 다른 리전 간 복제

SRR (Same-Region Replication)

➡️ 서로 같은 리전 간 복제

볼트잠금과 객체잠금

볼트 잠금 (Glacier Vault Lock)

WORM ( Write once Read Many) 모델 채용을 위해 사용된다.
객체를 가져와서 S3 Glacier Vault에 넣은 다음 수정하거나 삭제할 수 없도록 잠금.
➡️ 누구도 변경/삭제 불가 (관리자/루트 계정도 불가), 규정 준수, 데이터 보존에 유용.

객체 잠금 (Object Lock)

S3수준이 아닌 버킷 수준의 잠금 정책 (단일객체 잠금 가능)
➡️ 특정 시간동안 특정 객체 버전이 삭제되는 것을 차단.

  1. 보존모드
    가. 규정 준수 모드 (매우 엄격)
      1) Glacier Vault Lock과 유사 (누구도 객체 수정/삭제 불가)
      2) 규정준수 엄격히 적용시 사용
    나. 거버넌스모드 (유연성 O)
      1) IAM을 통해 부여받은 특별 권한으로 보존기간 변경/삭제 가능
  2. 객체 '법적 보존' 상태 설정
    : 객체 무기한 보호 설정

스토리지 클래스

접근 빈도로 구분한다.

S3 Standard

자주 접속하는 데이터를 위해 높은 내구성과 가용성(99.99%)을 갖췄다.

📌활용 사례📌
: 정적 웹사이트, 콘텐츠 배포, 모바일 및 게임 앱에서 활용

S3 Intelligent-Tiering

객체 접근빈도에 패턴을 파악하여 자동으로 클래스를 이동한다.
➡️ 비용 절감 효과⬆️
➡️ 월별 모니터링 비용, 티어링 비용 부과

S3 Standard IA

자주 접근하지 않는 데이터나 빠르게 접근할 필요가 있을 때 사용한다.
➡️ 99.9%의 가용성
➡️ 검색비용 부과

📌활용 사례📌
: 재해복구, 백업용으로 활용

S3 OneZone IA

자주 접근하지 않는 데이터나 빠르게 접근할 필요가 있을 때 사용한다.
➡️ 99.5%의 가용성
➡️ 단일 AZ에 데이터를 저장하여 약 20% 비용 절감

📌활용 사례📌
: 온프레미스 데이터 2차 백업용으로 활용

❗️관련 용어❗️

  • 온프레미스(On-Premise) : 기업의 서버를 클라우드 같은 원격 환경에서 운영하는 방식이 아닌, 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식

S3 Glacier Instant Retrieval

자주 접근하지 않으나 밀리초 단위의 검색이 필요한 장기 데이터에 활용된다.

S3 Glacier Flexible Retrieval (이전 Glacier)

자주 접근하지 않는 데이터이며 장기데이터 저장용으로 활용된다.
➡️ 스토리지 비용, 검색 비용 부과

S3 Glacier Deep Archive

가장 저렴하고 1년에 1,2번 접근하는 데이터 용도

적다보니 S3에 대한 내용이 꽤 많은것 같다.
하지만 이 내용 외에도 S3는 다른 서비스와의 통합성이 높아서 매우 다양하게
활용되고 있다.
아직 나도 많이 부족하여 열심히 공부해야겠다.
AWS 말고 다른글도 작성해야하는데 :(

profile
Cloud Engineer / DevOps Engineer

0개의 댓글