ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [클라우드] S3 + CloudFront
    카테고리 없음 2023. 11. 22. 10:44

    Storage service 란?

    데이터 저장, 엑세스, 보호 및 분석 기능을 갖춘 AWS의 서비스로, 아래와 같이 3종류가 있다. 

     

    Block storage 란?

    Block storage는 데이터를 일정 크기의 블록으로 나누어 저장하며, 각 블록은 독립적인 주소를 가진다. 높은 IOPS와 낮은 지연시간이 중요한 경우에 사용하며, 운영체제 또는 중요한 애플리케이션을 실행하는 사용된다. (EBS)

     

    File storage 란?

    File storage는 데이터를 파일로 저장하며, 계층적인 파일 시스템 구조를 가진다. 여러 서버나 사용자가 동일한 파일에 동시에 액세스 해야할 때 적합하며 네트워크를 통한 파일 공유가 필요한 경우에 적합하다. (EFS)

     

    Object storage 란?

    Object storage는 Rest 기반의 API 호출을 통해 데이터에 접근하는 HTTP 프로토콜이다. 대용량 미디어 파일, 이미지, 백업, 정적 웹 컨텐츠(이미지, 비디오, HTML 페이지)를 호스팅, 저렴한 비용으로 데이터를 오래 보관해야 할 때, 전세계적으로 데이터를 분산시켜야 할 때 적합하다. (S3)

     

    cf. 정적 콘텐츠란 서버(EC2)가 필요하지 않은 이미지로 S3에 저장하고, 동적 콘텐츠란 서버가 필요한 콘텐츠들(로그인 자료, 실시간으로 새롭게 추가되는 게시판 등)로 EC2나 ELB, Lambda 함수에 저장한다.

     

    S3 이란?

    데이터를 객체 단위로 저장하며, 객체 별 ACL(access control list)을 통해 데이터에 접근 가능한 사용자 특정이 가능하다. 99%내구성을 가지므로 데이터를 손실할 가능성이 매우 낮다. S3은 Bucket과 Object로 구성된다. 여기서 버킷이란 객체를 저장하는 공간이며 AWS 전역에서 단 한 개만 존재한다. 객체는 보통 파일을 의미하며, 파일 전체 경로에서 키를 가진다. 객체의 최대크기는 5TB이다.

     

    S3 Versioning 이란?

    버킷의 버전관리를 활성화함으로써 여러 버전의 객체를 보관할 수 있고 실수로 삭제되거나 덮어써진 객체를 복원할 수 있다. 한번 활성화하면 비활성화 할 수 없으며 대신 중단 상태로 전환 가능하다.

     

    S3 Replication 이란?

    버킷 내 객체를 자동으로 다른 버킷으로 복사하는 기능으로 비동기적으로 이루어진다. 방법은 CRR(cross region replication)과 SRR(same region replication)이 있다.

     

    S3 Encryption 이란?

    1) 정적 암호화

    • 서버 측 암호화(SSE)
      • SSE - S3 는 각 객체마다 고유한 키를 사용하고, 추가 보안을 위해 이 키를 다른 마스터 키로 정기적으로 암호화한다. 사용자는 키 관리에 대해 걱정할 필요없이 S3에 의해 자동으로 처리된다.
      • SSE - KMS 는 사용자가 키의 사용을 제어하고 접근을 감시할 수 있다. 
      • SSE - C 는 데이터를 업로드하거나 다운로드할 때마다 사용자는 자신의 암호화키를 사용한다. 이 방법은 키 관리의 책임이 사용자에게 있다.
    • 클라이언트 측 암호화(CSE)
      • CSE 는 클라이언트가 암호화하여 암호화된 데이터를 S3에 저장한다. 보안은 높지만 키 관리 및 암호화의 구현이 복잡하다.

    2) 동적 암호화

    전송 중 암호화는 SSL/TLS 라고 한다. S3의 경우 HTTP 엔드포인트와 HTTPS 엔드포인트를 가지고 있는데, 전송중 암호화를 하는 HTTPS를 사용하는 것을 권장한다. SSE-C의 경우 HTTPS 프로토콜을 꼭 사용해야 한다.

     

     

    S3 Security 란?

    IAM, 버킷 정책, 접근 제어목록 ACL을 사용한다. 

     

    버킷정책의 예

    {
        "Version": "2012-10-17",
        "Id": "Policy1700561013737",
        "Statement": [
            {
                "Sid": "Stmt1700560970286",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:*",
                "Resource": "arn:aws:s3:::asc-ewha-prac"
            }
        ]
    }

     

    S3 CORS 란?

    요청 프로토콜의 일부로 다른 웹사이트에 요청을 보내야 할 때 다른 오리진이 cors header을 사용하여 요청을 허용하지 않는한 해당 요청은 이행되지 않는다. (access- control- allow- origin) 만약 클라이언트가 S3 버킷에서 교차 출처 요청을 보내는 경우, 정확한 cors 헤더를 활성화해야한다. 이때 cors 헤더를 설정함으로써 특정 출처를 허용하거나 *(모든 출처)를 허용한다. 

     


     

    CDN 이란?

    지리적 제약 없이 전세계 사용자에게 빠르고 안전하게 콘텐츠를 전송할 수 있는 기술이다.

     

    Edge Location 이란?

    사용자에게 더 가까운 지리적 위치에 콘텐츠를 저장하는 데이터 센터로, CloudFront는 엣지 로케이션을 통해 콘텐츠를 제공한다. 

     

    Cloudfront 이란?

    AWS에서 제공하는 CDN 서비스로 클라이언트의 콘텐츠 요청으로 서버에서 받아온 콘텐츠를 캐싱하고 이후 같은 요청이 왔을 때 그 캐싱해 둔 것을 제공한다. 성능 향상, 데이터 전송 속도의 상승, 보안성, 안전성 및 가용성 향상이라는 장점이 있다. origin(데이터 제공의 원천)에서 HTTPS를 지원하지 않아도 cloudfront 내에서 HTTPS 통신 지원이 가능하다. shield, AWS application firewall을 제공함으로써 DDos로부터 보호한다. S3과 연동시 캐싱을 지원하기 때문에 S3에 직접 접근하지 않아도 되므로 S3의 비용이 감소한다.

     

     

    Cloudfront의 동작순서는?

    1) 사용자가 어플리케이션 요청을 한다.

    2) DNS는 사용자에게 적합한 Edge Location으로 라우팅한다.

    3) Edge Location에서 캐시를 확인하고 데이터가 존재한다면 사용자에게 전달한다.

    4) 없으면 가장 가까운 RFC(Regional Edge Caches) 로 캐시가 있는지 요청한다. 

    5) 없으면 오리진으로 요청한다.

    6) 오리진은 '오리진 > RFC > Edge Location > CloudFront' 를 거쳐 사용자에게 데이터를 전달한다.

     

    Cloudfront의 캐시 정책이란? 

    캐시 정책은 Cloudfront가 콘텐츠를 얼마나 오래 캐시할 것인지, 어떤 HTTP 헤더, 쿼리 문자열 및 쿠키를 캐시에 포함할 것인지 결정한다. TTL, 캐시할 헤더, 쿼리 문자열, 쿠키 등이 구성요소로 들어가 있다.

     

    OAI(origina access identity)란?

     ACL과 다르게 S3의 콘텐츠를 Cloudfront를 사용해서만 볼수 있도록 제한하는 방법으로,  외부 사용자가 S3 엔드포인트를 통한 직접적인 요청이 아닌 CDN을 통해 접근하도록 구성하고 싶다면 고려할 만 하다. 이를 쓰는 이유는, S3으로 직접접속시 캐싱을 못해 속도가 느려지며 국가별 라우팅과 인증이 cloudfront에만 구현되어 있는 경우도 있기 때문이다. 이를 위해서는 S3 Bucket Policy로 Cloudfront 접근을 허용해야만 한다.

     

    CloudFront Security 는?

    signed URL을 사용하여 허용된 유저가 Cloudfront의 콘텐츠에 접근할 수 있는 url을 제공하는 것으로 단 하나의 파일 또는 콘텐츠 단위로 이루어진다. S3의 Signed URL과 비슷하다. 

    signed cookie는 signed URL과 다르게 다수의 콘텐츠 제공방식을 제어한다. 예를 들면 정기구독 프리미엄 유저만 볼 수 있는 강의 동영상을 다운받는 곳에 쓰인다. 

     

     

     

    아래는 react로 작업한 후 파일을 S3에 올리고, 정적 웹페이지를 호스팅한(url) 결과이다.

Designed by Tistory.