대외 활동/ACC

[핸즈온 세션] Storage, Amazon S3, CloudFront

ansui 2025. 3. 30. 16:43

Storage

클라우드 스토리지는 클라우드 컴퓨팅 제공업체를 통해 데이터와 파일을 인터넷에 저장할 수 있는 클라우드 컴퓨팅 모델이다.

사용자는 퍼블릭 인터넷 또는 전용 프라이빗 네트워크 연결을 통해 스토리지에 액세스 할 수 있다.

  • 비용 효율성
  • 민청성 향상
  • 더 빠른 배포
  • 효율적인 데이터 관리
  • 확장성

1️⃣ Block Storage

데이터베이스 또는 전사적 자원 관리 시스템과 같은 엔터프라이즈 애플리케이션을 위해 지연 시간이 짧고, 빠른 데이터 액세스를 제공하는 스토리지

  • 데이터를 블록 형태로 저장.
  • 빠른 저장 및 검색을 위해 블록에 고유한 식별자를 부여.
  • DAN, SAN
  • Amazon EBS

2️⃣ File Storage

데이터를 파일 및 폴더의 계층 구조로 저장하는 데이터 스토리지

  • 어플리케이션에 가장 널리 사용되는 유형
  • 네트워크 환경에서의 파일 기반 스토리지는 NAS 기술을 사용
  • 로컬 하드 드라이브와 유사한 방식으로 네트워크 스토리지 데이터에 액세스
  • Amazon EFS

사용 사례

  • 여러 서버나 사용자가 동일한 파일 시스템에 동시에 접근하는 경우
  • 파일과 디렉토리를 통해 데이터를 관리하고 싶은 경우
  • 네트워크를 통한 파일 공유가 필요한 경우

3️⃣ Object Storage

대용량 미디어 파일, 이미지, 백업 등의 비정형 데이터를 저장하기 위한 데이터 스토리지

  • 전송된 형식 그대로를 객체 데이터로 저장
  • 사용자가 직접 메타 데이터를 지정 가능
  • 객체는 보안 버킷이라는 저장 공간에 저장
  • HTTP 프로토콜 기반 REST API 호출을 통해 접근
  • Amazon S3

사용 사례

  • 정적 웹 컨텐츠(이미지, 비디오, HTML)을 호스팅하는 경우
  • 전 세계 여러 데이터 센터에 데이터를 분산시키는 경우
  • 저렴한 비용으로 데이터를 오래 보관하려는 경우

Amazon S3

데이터를 버킷 내 객체로 저장하는 객체 스토리지 서비스

  • 확장성, 데이터 보호, 비효율성
  • 대량의 데이터를 안전하게 저장
  • 비즈니스 요구에 맞게 데이터에 대한 접근 제어

1️⃣ 특징

  • 액세스 제어: 객체별 Access Control List(ACL)을 통해 데이터에 접근 가능한 사용자를 관리
  • 높은 내구성
  • 데이터 저장: 객체 단위로 데이터를 저장
  • 데이터 저장 용량: 단일 객체 최대 크기는 5TB

2️⃣ 구성

버킷(최상위 디렉토리) + 객체(디렉토리 내에 저장되는 파일)

버킷

S3에 저장된 객체에 대한 컨테이너

  • 버킷에는 객체를 무제한으로 저장할 가능
  • 한 계정당 최대 100개의 버킷을 생성 가능
  • AWS 전역에서 단 하나만 존재하고, 리전과 관계없이 전역적으로 유일한 이름을 사용해야 한다.

객체

S3에 저장되는 기본 객체

  • 객체는 하나 이상의 버킷에 저장, 각 객체의 크기는 최대 5TB
  • 객체 데이터와 메타 데이터(이름-값 페어 집합)로 구성
  • 객체는 키와 버전 ID로 버킷 내에서 고유하게 식별 가능

객체 요소

  • 키: 객체에 할당한 이름, 버킷 내 객체에 대한 고유한 식별자
  • 버전ID: 버킷에 객체를 추가할 때 Amazon S3가 생성하는 문자열로 S3 내 모든 객체는 버킷+키+버전 조합으로 고유하게 식별 가능하다.
  • 메타데이터: 객체 관련 정보를 저장하기 위한 이름-값 페어 세트로 사용자가 직접 지정이 가능하다.
  • 값: 저장하는 콘텐츠(임의의 바이트 시퀀스)
  • 태그: 저장된 객체를 분류하기 위해 사용하는 정보
  • 액세스 제어 정보: 저장하는 객체에 대한 액세스를 제어하기 위한 정보

3️⃣보안

데이터 암호화 - 서버측 암호화(SSE)

  • 데이터를 받는 애플리케이션 혹은 서비스 서버가 해당 데이터를 암호화하는 것
  • AWS 데이터 센터에서 객체 데이터를 암호화하고, 사용자 접근 시 자동으로 암호를 해독하여 반환
    • SEE-S3
    • SEE-KMS / DSSE-KMS / SSE-C
  • 현재 S3는 서버측 암호화를 S3 내 모든 버킷 암호화의 기본 수준으로 적용

데이터 암호화 - 클라이언트측 암호화(CSE)

  • 전송 및 저장 시 보안을 보장하기 위해 로컬에서 데이터를 암호화
    • AWS를 포함한 제 3자에게 객체 노출 방지
  • S3 암호화 클라이언트를 사용하여 객체를 암호화하고 버킷에 업로드
    • S3 암호화 클라이언트가 사용자와 S3간 중개자 역할
  • 높은 보안을 보장하지만 관리 및 구현 복잡성이 증가

액세스 제어 - 리소스 기반 정책

  • S3 버킷과 같은 리소스에 연결하는 JSON 정책 문서
  • 적절한 권한을 가진 사용자만 리소스에 대한 액세스 허용 및 객체 보호
  • 버킷 소유자만 정책을 버킷에 연결 가능, 버킷 정책은 버킷 소유자의 모든 버킷 객체에 적용
  • 리소스에 접근하기 위해 필요한 권한 정의

액세스 제어 - 자격 증명 기반 정책

  • 자격 증명(사용자, 사용자 그룹, 역할)이 무슨 작업을 어느 리소스, 어느 조건에서 수행할 수 있는지를 제어하는 정책
    • 다수의 사용자, 그룹, 역할에 정책을 연결하는 경우 관리형 정책
    • 단일 사용자, 그룹, 역할에 1:1로 정책을 연결하는 경우 인라인 정책
  • 사용자가 수행할 수 있는 작업 정의

엑세스 제어 - CORS

  • S3를 사용하여 정적 웹사이트를 호스팅하는 경우 CORS 구성을 통해 액세스 제어
    • CORS는 웹 브라우저의 한 도메인이 다른 도메인의 리소스를 요청할 때 해당 리소스에 대한 액세스를 선택적으로 허용
  • 다른 도메인에서 S3 리소스에 대한 요청을 보내는 경우, 해당 요청 도메인에 대한 CORS 정책 구성이 필요
  • S3가 브라우저의 preflight 요청을 받으면 버킷의 CORS 구성을 바탕으로 해당 요청과 일치하는 규칙으로 Cross-Origin 요청을 허용

엑세스 제어 - Pre-Signed URLS

  • 미리 서명된 URL을 사용하여 버킷 정책 업데이트 없이 S3 객체에 대한 액세스 허용
  • 다른 사용자에게 AWS 보안 자격 증명이나 권한 없이도 작업 가능
  • 미리 서명된 URL은 해당 URL을 생성하는 사용자의 권한에 따라 제한
  • URL 생성자가 유효한 보안 자격 증명 및 허용하려는 작업 권한을 보유하고 있어야 다른 사용자가 해당 URL을 통해 객체에 액세스 가능

4️⃣ 스토리지 관리

버전 관리

한 버킷에 여러 버전의 객체를 보관하며, 실수로 삭제되거나 덮어써진 객체 복원 가능

  • 버킷의 버전 관리를 활성화하면 저장되는 객체에 대해 고유한 버전 ID가 자동 생성
  • 한 버킷에 여러 버전의 객체를 보관할 수 있다.
  • 한 번 활성화하면 비활성화는 불가능 (중단 상태로 전환 가능)

객체 복제

객체 복제를 통해 하나 이상의 버킷에 대한 객체를 동일하거나 다른 AWS 리전에 비동기적으로 자동 복제 가능

  • S3 리전간 복제(CRR): 서로 다른 리전 버킷에서 새 객체를 복제하는 경우
    • 규정 준수 요구사항 충족, 대기 시간 최소화, 운영 효율성 증가
  • S3 동일 리전 복제(SRR): 동일한 리전 버킷에서 새 객체를 복제하는 경우
    • 로그 집계, 계정간 라이브 복제, 액세스 제어
  • S3 배치 복제: 기존 객체를 온디맨드 옵션으로 다른 버킷에 복제하는 경우

클래스

S3 버킷의 각 객체에는 그와 연결된 스토리지 클래스가 존재하며, 사용자는 사용 사례 및 요구사항에 맞게 스토리지 클래스를 선택

  • 자주 액세스하고, 짧은 지연시간이 필요한 객체 스토리지 클래스
    • S3 Standard, S3 Express One Zone, Reduce Redundacy
  • 자주 액세스하지 않는 객체 스토리지 클래스
    • S3 Standard-IA, S3 One Zone-IA
  • 객체 아카이빙을 위한 저비용 스토리지 클래스
    • S3 Glacier

수명 주기

객체를 효율적으로 저장 및 관리하기 위해 S3 객체 그룹에 적용할 작업을 정의하는 수명 주기 구성

  • 전환 작업
    • 객체가 다른 스토리지 클래스로 전환되는 시기 정의
    • 30일이 지나면 S3 Standard-IA, 1년이 지나면 S3 Glacier Flexible Retrieval
  • 만료 작업
    • 객체가 만료되는 시기 정의, 객체가 만료되면 S3가 해당 객체 자동 삭제

Amazon CloudFront

짧은 대기 시간과 빠른 전송 속도로 최종 사용자에게 데이터, 동영상, 애플리케이션 및 API를 안전하게 전송하는 CDN(글로벌 콘텐츠 전송 네트워크) 서비스

  • 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 콘텐츠를 제공
  • Client의 콘텐츠 요청으로 서버에서 받아온 콘텐츠를 캐싱하고 이후 같은 요청이 왔을 때, 그 캐싱해 둔 것을 제공하는 서비스 
  • CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 요청이 라우팅되므로 가능한 최고의 성능으로 콘텐츠가 제공

👉CDN(Content Delivery Network)

  • 콘텐츠 전송 네트워크
  • 지리적 제약 없이 전세계 사용자에게 빠르고 안전하게 콘텐츠를 전송할 수 있는 기술
  • 웹사이트의 원래 서버와 달리 사용자에게 더 가까이에 있는 서버로부터 컨텐츠를 배포하는 방식

👉Edge Location

  • 사용자에게 더 가까운 지리적 위치에 콘텐츠를 저장하는 데이터센터
  • 컨텐츠가 캐싱되고 유저에게 제공되는 지점
  • CloudFront 서비스는 edge location을 통해 콘텐츠를 제공

👉Regional Edge Caches (REC)

  • 오리진과 엣지 로케이션 사이에 존재하는 캐시 계층
  • 글로벌하게 배포되어있는 CloudFront 위치
  • 리전 엣지 캐시는 표준 에지 로케이션에서 캐시 하지 않는 콘텐츠를 저장
  • 엣지 로케이션에서 캐시 미스(cache miss)가 발생했을 때, 오리진 서버 대신 리전 엣지 캐시 로부터 콘텐츠를 검색하여 더 빠른 응답 시간을 제공

1️⃣ 동작 방식

  1. 사용자 → 어플리케이션에 요청
  2. DNS는 사용자에게 적합한 Edge Location으로 라우팅
  3. Edge Location에서 캐시를 확인 & 사용자에게 반환
  4. Edge Location에 없으면 가장 가까운 REC로 캐시가 있는지 확인 요청
  5. REC에 없으면 CloudFront는 origin server로 요청
  6. 오리진은 '오리진 > REC > Edge Location > CloudFront > 사용자' 수순을 밟음 (캐시도 추가)
  7. REC에 캐시가 있다면 REC는 콘텐츠를 요청한 Edge Location으로 반환
  8. REC로부터 콘텐츠의 첫 번째 바이트가 도착하는 즉시 Edge Location은 이를 사용자에게 반환
  9. Edge Location은 나중을 위해 이 콘텐츠 캐시를 저장

2️⃣ CloudFront Origin

  • Origin: 데이터 원본이 위치한 곳
  • 정적 콘텐츠 및 동적 콘텐츠를 모두 처리

정적 콘텐츠

  • 서버(EC2)가 필요하지 않은 콘텐츠 (ex) 이미지
  • S3 bucket (기본)

동적 콘텐츠

  • 서버가 필요한 콘텐츠 (ex) 로그인 자료, 실시간 추가 자료
  • 동적 콘텐츠를 정적 캐싱한다면 TTL(Time to Live) 시간동안 사용자는 새로 추가/수정된 데이터를 볼 수 없음
  • EC2 instance, ELB (Elastic load balancing)

3️⃣ Origin Access Identity (OAI)

  • CloudFront가 S3 버킷과 같은 origin에 안전하게 접근할 수 있도록 하는 고유 식별자
  • OAI를 사용하면 CloudFront를 통해서만 origin에 저장된 콘텐츠에 접근할 수 있도록 제한
  • 사용자가 S3 URL을 직접 사용하여 콘텐츠에 접근하는 것을 방지, CloudFront를 통해서만 접근하도록 하여 보안을 강화 (S3 Origin 보안 강화를 위해 요청을 식별하는 데 사용되는 S3만을 위한 CloudFront 서비스)

OAI 설정 과정

  1. CloudFront 배포를 생성하거나 기존 배포를 수정할 때 OAI를 생성하고 선택
  2. 선택한 OAI를 사용하여 S3 버킷의 정책을 업데이트하여, 해당 OAI를 가진 CloudFront 배포만 버킷의 콘텐츠에 접근

4️⃣ Origin Access Control (OAC)

보안을 강화하고 심화된 기능 통합을 위해 지정된 배포에만 접근을 허용함으로써 S3 오리진을 보호하는 새로운 기능

  • OAI는 CloudFront에서 S3 오리진에 접근하는 안전한 방법을 제공하지만 세분화된 정책 구성, 암호화 미지원 등 제한사항 존재
  • 개선 - 보안, 포괄적인 HTTP 메서드 지원, 모든 AWS 리전에서 S3 접근…

5️⃣ 기능

  1. HTTPS 지원
    • Origin에서 https 지원을 해주지 않아도 CloudFront 안에서 https 통신을 지원하도록 구성 가능
  2. 특정 지역 콘텐츠 접근 제한 가능
    • 지리적 제한 가능. 회사 사정으로 특정 지역을 제한하거나 할 수 있다
  3. Signed Url
    • Presigned url과 비슷한 기능 ( presigned url 참고자료 - https://bosungtea9416.tistory.com/26 )
    • 허용된 사용자에게만 접근할 수 있는 signed url 제공
    • 개별 파일에 대한 access 제공 (파일 하나당 하나의 url)
    • 만료시간, IP주소 범위 등 지정 (ex) 쿠키를 구운 독자만 웹툰을 미리 볼 수 있도록 URL을 제공
  4. Signed Cookie
    • 다수의 파일에 대한 access 제공 (다수의 파일에 하나의 signed cookie)
    • 만료시간, IP주소 범위 등 지정 (ex) ID/PW를 입력해 로그인 한 유료 회원에게 유료 콘텐츠를 모두 제공하는 상황

6️⃣ 장점

  • 데이터를 제공받는 속도가 빠르다.
    • 물리적으로 멀리 떨어진 서버에서 다운로드하는 것보다, 가까운 서버에 접속하여 다운로드 받는 것이 속도가 훨씬 빠르다.
  • 트래픽 급증을 처리할 수 있다.
    • 하나의 오리진 서버로 수많은 사용자가 몰리는 것을 방지할 수 있다

'대외 활동 > ACC' 카테고리의 다른 글

[핸즈온 세션] RDS, DynamoDB  (0) 2025.04.01
[핸즈온 세션] 네트워크 구성 - VPC, Route53  (0) 2025.03.23