본문 바로가기

Cloud/AWS

CloudFront

공식 매뉴얼

 

CloudFront의 사용 예

  • 정적 컨텐츠 전송 가속화
  • 시스템 처리 과정 중 특정필드 암호화 
  • 주문형 비디오 또는 라이브 스트리트 비디오에 동영상 제공
    • VOD 스트리밍의 경우 Cloudfront를 사용하면 MPEG DASH, Apple HLS, MS Smooth Stream, CMAF 등과 같은 일반적인 포맷으로 디바이스와 상관없이 스트리밍할 수 있습니다.
    • 라이브 스트림 경우에는 에지에 미디어 조각을 캐싱하여 해당 조각을 올바른 순서로 전송하는 매니페스트 파일에 대한 여러 요청을 결합함으로써 오리진 서버의 부하를 줄일 수 있습니다.
  • 에지에서 맞춤제작
    • Maintenance Page Redirection
  • Lambda@Edge 맞춤화를 사용하여 개인 컨텐츠를 제공(뭔지 모름 ㅋ)

AWS 공식 문서의 CDN작동 순서

  1. 파일 요청
  2. DNS가 요청을 최적으로 서비스 할 수 있는 Cloudfront POP으로 요청 라우팅
  3. 캐시여부에 따라 에지 또는 오리진에서 Contents Serving

설정 변경 값

  • 오리진 관련
    • Origin Domain Name : DNS Name
    • Origin Path : Directory (e.g. /production)
    • Origin ID : 오리진 그룹을 고유하게 식별하는 ID
    • 오리진 연결 시도 횟수
    • 오리진 연결 제한 시간(Origin Connection Timeout)
      • The number of seconds that CloudFront waits when trying to establish a connection to the origin.
    • 오리진 사용자 지정 헤더 : 오리진에 보낼때 지정하는 Header
  • 사용자 지정 오리진에 관한 설정
    • 최소 오리진 SSL 프로토콜 : TLS/SSL 프로토콜 지정
    • 오리진 프로토콜  정책 : Upstream SSL 지정
    • 오리진 응답 제한 시간(Origin Response Timeout) : 오리진으로부터 응답 패킷을 수신한 후 다음 패킷을 수신할 때까지 대기하는 시간 (이 설정으로 504이슈를 해결할 수 있다)
    • 오리진 연결 유지 제한 시간(Origin Keep-alive Timeout) : 마지막 패킷을 가져온 후 연결을 유지하기 위해 시도하는 시간
    • HTTP 포트
    • HTTPS 포트
  • 캐시 동작 설정
    • 경로 패턴 - 적용 경로 Condition
    • 오리진 또는 오리진 그룹 - Origin Condition
    • Viewer Protocol Policy - HTTP Only처럼 유저가 Edge로 접속할때 프로토콜 작동방식
      • HTTP and HTTPS
      • Redirect HTTP to HTTPS
      • HTTPS Only
    • Allowed HTTP Methods
      • GET, HEAD
      • GET, HEAD, OPTIONS
      • GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
    • 필드 레벨 암호화 구성 - 특정 데이터 필드에 필드 레벨 암호화
    • Cached HTTP Methods - OPTION 요청시 캐시 여부 결정
      • 참고로 OPTION은 브라우저에서 서버가 Request를 받을 수 있는지를 확인하기 위해 "preflight"(data-less)을 만들때 사용한다.
      • Access-Control-Request-Method, Access-Control-Request-Headers는 이러한 Preflight 요청을 만들때 사용된다.
    • 선택한 요청 헤더 기반의 캐시 - 헤더를 기준으로 캐시할지 결정함
      • None - 항상 캐시
      • Whitelist - 지정된 헤더값 기준으로 객체를 캐시
      • 모두 - 캐시를 하지 않음
    • Whitelist Headers
    • Object Caching
      • Use Origin Cache Headers - 오리진 헤더 그대로 사용
      • Customize - Cloudfront에서 직접 헤더를 만듬
    • Minimum TTL
    • Maximum TTL
    • 기본 TTL
    • 쿠키 전달 - 오리진에 쿠키를 전달할지 여부
    • 화이트리스트 쿠키
    • Query String Forwarding and Caching  - Drop Query String
    • Query String Whitelist
    • Smooth Streaming
    • 최종 사용자 액세스 제한(서명된 URL 또는 서명된 쿠키 사용)
    • Trusted Signers
    • AWS Account Numbers
    • 자동으로 객체를 압축
      • Accept-Encoding: gzip요청이 들어왔을 때 압축할지 여부
  • 배포 설정
    • 요금 계층
    • AWS WAF 웹 ACL
    • Alternate Domain Names (CNAMEs)
    • SSL 인증서
    • 사용자 지정 SSL 클라이언트 지원
    • 보안 정책
    • Supported HTTP Versions
    • 기본 루트 객체
    • Logging
    • Bucket for Logs
    • Log Prefix
    • Cookie Logging
    • IPv6사용
    • Comment
    • Distribution State
  • 사용자 지정 오류 페이지 및 오류 캐싱
    • HTTP 오류 코드
    • Response Page Path
    • HTTP 응답 코드
    • 오류 캐싱 최소 TTL(초)
  • Restrictions
    • 지리적 제약 활성화
    • Restriction Type
    • Countries

 

Compression 

Accept-Encoding -> Content-Encoding

 

Etag의 문제점

서버종류마다(예: Apache) Etag를 만드는 방법이 다르므로 캐싱 로직에 혼돈이 올 수 있다고 한다.

cyberx.tistory.com/9

Origin Access Identity

  • S3 컨텐츠에 대해 서명된 URL 또는 서명된 쿠키를 사용하여 엑세스를 제한할때 S3에서 직접 파일에 엑세스를 제한 할 필요가 있다. 이 때 Cloud Front에서만 접근 가능하게 하는 기능이다(서명이 필요하든 아니든 상관없이 막는경우도 있음).

Geo-blocking Rule

  • CloudFront도 제3의 GeoIP DB를 사용한다.
  • Edge에서 Blocking을 당하면 403 Forbidden을 사용자에게 반환한다 

암호화 - Upstream SSL기능을 지원하는지는 모르겠다(아마 하겠지?)

  • 2048비트인 키페어 생성(퍼블릭 & 프라이빗키 둘다 포함)
    • openssl genrsa -out private_key.pem 2048
  • 퍼블릭키 추출
    • openssl rsa -pubout -in private_key.pem -out public_key.pem

캐시관리 (공식문서 228 페이지 참고)

  • Cache-Control : Max-Age를 따른다 (또한 시스템 자체의 TTL설정 변경으로 캐싱 시간 조절 가능)
  • 쿼리 기반 캐싱
    • 대문자 소문자, 쿼리이름 순서를 맞게해줘야 맞게 캐시된다
      • E.g : parameter1=a&parameter2=a
  • 쿠키값 기반 캐싱
    • 쿠키값에 따른 맞는 컨텐츠 버전을 Serving하게 만들 수 있다.
  • 요청 헤더 기반 캐싱
    • User-agent 기반은 AWS 자체 변수를 제공한다
      • CloudFront-Is-Desktop-Viewer, CloudFront-Is-MobileViewer, CloudFront-Is-SmartTV-Viewer, CloudFront-Is-Tablet-Viewer
  • 압축이 불필요 할때는 Accept-Encoding 헤더 제거
  • 언어별로 서비스를 하고 싶을때는 Accept-Language

백업오리진-aka 오리진 그룹 (공식 문서 236페이지 참고)

  • 장애 조치 기준으로 사용할 HTTP 상태 코드를 정할 수 있다.
    • 500, 502, 503, 504, 404, 403
    • GET, HEAD, OPTIONS인 경우에만 조치를 취한다

Chunking 

  • CDNetworks와 마찬가지로 오리진이 Range GET요청에 대해 206코드를 Return한다면 Chunking이 지원된다.

 

Apex 도메인 이름을 다른 배포로 이동

도메인 이름의 일부로 와일드카드를 사용하여 도메인 라우팅을 설정해야함(AWS Support가 필요함)

 

WebSocket 지원

OCSP Stapling

인증서의 유효함을 CA에 직접 확인하여 CA의 응답을 캐싱하여 네트워킹 효율을 늘리는 방법

(원래는 유저가 확인해야한다)

Response Error Code

  • 301 - Moved Permanently
  • 302 - Found
  • 304 - Not Modified
  • 400 - 요청 형식 자체가 잘못 됨
  • 403 - Forbidden
  • 404 - Not Found
  • 413 - 요청 길이가 너무 김(Query같은걸로 생길 수 있음)
  • 500 - Lambda 실행 오류
  • 502 - 잘못된 게이트웨이
    • CloudFront가 오리진 서버에 연결할 수 없다
      • 오리진이 응답하지 않는경우 
      • SSL/TLS 협상 실패 (인증서 잘못업로드 되거나 만료됨, 또는 인증서 프로토콜을 지원하지 않는다)
      • 오리진이 오리진 설정의 지정된 포트에서 응답하지 않음
        • 오리진에서 포트의 트래픽을 거부하거나
        • 백엔드 서버가 포트에서 응답하지 않는 경우, CloudFront가 연결되지 않습니다.
        • 방화벽에서 IP가 차단하지 않았는지 확인하자
      • DNS이슈로 인한 오리진 Domain을 찾을 수 없음
    • In General, Reverse Proxy didn't receive a valid response from the origin server.
  • 503 - Service Unavailable
    • 일반적으로 오리진 서버의 성능 문제를 나타낸다.
      • 오리진이 가용 리소스를 넘겼을시
      • requEdge 로케이션의 가용 리소스를 넘겼을시
    • 드믈게 엣지 로케이션의 리소스 제한 때문에 CloudFront가 일시적으로 요청을 충족할 수 없음을 나타낸다.
  • 504 - 게이트웨이 제한시간
    • 오리진이 504를 반환할 시
    • 요청이 만료되기전에 응답이 없을 시

CloudFront에서 항상 캐시하는 응답들

  • 404 찾을 수 없음
  • 405 허용되지 않은 메소드
  • 414 요청-URI가 너무 큼
  • 500 내부 서버 오류
  • 501 구현되지 않음
  • 502 잘못된 게이트웨이
  • 503 서비스 사용 불가
  • 504 게이트웨이 시간 초과

CloudFront에서 헤더에 따라 캐시하는 응답들

  • 400 잘못된 요청
  • 403 금지됨
  • 412 사전 조건 실패
  • 415 지원되지 않는 미디어 유형

 

'Cloud > AWS' 카테고리의 다른 글

AWS 인터뷰 정리  (0) 2020.09.06
Simple Email Service - SES  (0) 2020.09.05
S3 Glacier  (0) 2020.09.04
ELB - Elastic Load Balancer  (0) 2020.09.02
S3 - Simple Storage Service  (0) 2020.09.02