본문 바로가기

AWS

[AWS] CloudFront Behavior을 통한 S3, ELB 연동 실습

반응형

Route53 - CloudFront - S3, ELB 연동 테스트

[1] 개요

  • example.com/*.jpg 에 대한 컨텐츠 요청은 A 버킷으로 CloudFront가 요청하고 example.com/*.png에 대한 컨텐츠 요청은 B 버킷으로 CloudFront가 요청하고⇒ CloudFront의 Behavior을 적절히 설정해주면 됩니다.
  • 그 외의 요청 (example.com or example.com/index.html, ..)에 대한 요청은 ALB를 거쳐 nginx 서비스를 구동중인 EC2 서버로 요청하고 싶을 경우가 있을 경우가 있을 경우

[2] 아키텍쳐

아키텍처는 아래와 같습니다.

  • ACM : Virginia Region에서 발급받은 Certificate, Route 53을 통해 DNS Validation하였음
  • Route 53 : pingping2.shop
  • CloudFront : 3개의 Origin, 3개의 Behavior, 2개의 OAI (S3의 Policy에 해당 OAI 설정)
  • S3 Bucket : 2개 생성 ( 1개는 jpg 용도를 담는 용도, 1개는 png 객체를 담는 용도 )
  • ALB, EC2 : Nginx 서비스가 구동 중인 EC2 Instance

[3] 과정

전체적인 과정은 아래와 같습니다.

( EC2, ALB, S3 생성하는 과정은 생략하며, 이 문서에서 설명하고자 하는 부분 ( CloudFront Behavior )에 대해서만 설정하는 과정만 작성하였습니다. )

  1. S3와 ALB - EC2 생성
    • 각 S3에는 객체가 있으며 EC2에는 nginx 웹서버를 기동중임
  2. CloudFront 생성
    • default로 EC2를 Origin으로 설정하며 추가적으로 2개의 Origin ( jpg S3, png S3)를 설정
    • Behavior 설정
  3. S3 Bucket의 Policy 수정 ( CloudFront의 OAI에 대해 s3:get:object 허용하도록 설정 )
  4. CloudFront - 각 Origin으로 Behavior 테스트
  5. Route 53 - CloudFront 연결

1. CloudFront 생성

Domain Name은 Gabia에서 발급받은 pingping2.shop 개인 도메인을 사용하였습니다.

Alias 및 SSL Certificate

  • Alias : www.pingping2.shop
  • SSL Certificate : Virginia 리전에서 생성한 ACM 인증서

Origins

  • Origin은 3개로 구성되어 있다.
    1. ELB ( ELB의 Target Group은 Nginx 서버가 구동중인 EC2가 포함되어 있음)
    2. S3 Bucket (jpg 컨텐츠를 포함)
    3. S3 Bucket (png 컨텐츠를 포함)

Behaviors

  • Behavior은 3개로 구성되어 있다.
    1. Default (0, 1의 Path Pattern에 부합하지 않을 경우 모든 Client의 요청을 ELB에서 처리)
    2. *.png
    3. *.jpg

Origin Access Identity

  • OAI는 2개임
    1. png 객체를 포함하고 있는 S3 Bucket의 Policy의 Principle로 설정될 Origin Access Identity
    2. jpg 객체를 포함하고 있는 S3 Bucket의 Policy의 Principle로 설정될 Origin Access Identity

2. CF → ELB → EC2

  • 접근 URL은 다음과 같다.

  • 캐싱 후

3. CF → S3 ( Behavior 적용 )

  • CloudFront에서의 Behavior로 인하여 클라이언트가 *.jpg 혹은 *.png 파일에 대해 요청할 경우 S3로 요청이 가게 된다.
    • Caching 기간 내 해당 컨텐츠가 CloudFront의 Edge Location에 없을 경우 S3 Bucket으로부터 가져오게 된다.
    • 해당 Bucket의 Object들은 Private하게 가져오기 위해 OAI (Origin Access Identity)설정을 하였다.

1) OAI (Origin Access Identity)이 S3 정책에 미적용인 S3일 경우

  • S3 Bucket 'test-cloudfront-png-bucket'의 Bucket Policy는 아래와 같이 설정되어 있다.

  • png 파일은 AccessDenied가 되는 것을 확인할 수 있다.

2) OAI (Origin Access Identity)이 S3 정책에 적용인 S3일 경우

  • S3 Bucket 'test-cloudfront-jpg-bucket'의 Bucket Policy는 아래와 같이 설정되어 있다.

  • 접속이 되는 것을 확인할 수 있음

3) S3 Bucket 'test-cloudfront-png-bucket'도 CloudFront의 OAI에 대한 Policy 적용 후 정상적으로 Private하게 접근 가능

  • Bucket Policy를 아래와 같이 변경

  • 곧바로 정상적으로 접근되는 것을 확인할 수 있다.

4) Route 53 생성 및 CloudFront로 라우팅 설정

  • Route 53에서 pingping2.shop Hosted Zone에 대해 A Record에서 Traffic을 CloudFront로 보냄

  • 웹서버

  • S3 Bucket

4. 결론

  • CloudFront에서는 Behavior에 따라 각각 Pattern의 요청을 각기 다른 Origin 혹은 Origin Group으로 보낼 수 있다.
반응형