반응형
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 )에 대해서만 설정하는 과정만 작성하였습니다. )
- S3와 ALB - EC2 생성
- 각 S3에는 객체가 있으며 EC2에는 nginx 웹서버를 기동중임
- CloudFront 생성
- default로 EC2를 Origin으로 설정하며 추가적으로 2개의 Origin ( jpg S3, png S3)를 설정
- Behavior 설정
- S3 Bucket의 Policy 수정 ( CloudFront의 OAI에 대해 s3:get:object 허용하도록 설정 )
- CloudFront - 각 Origin으로 Behavior 테스트
- Route 53 - CloudFront 연결
1. CloudFront 생성
Domain Name은 Gabia에서 발급받은 pingping2.shop 개인 도메인을 사용하였습니다.
Alias 및 SSL Certificate
- Alias : www.pingping2.shop
- SSL Certificate : Virginia 리전에서 생성한 ACM 인증서
Origins
- Origin은 3개로 구성되어 있다.
- ELB ( ELB의 Target Group은 Nginx 서버가 구동중인 EC2가 포함되어 있음)
- S3 Bucket (jpg 컨텐츠를 포함)
- S3 Bucket (png 컨텐츠를 포함)
Behaviors
- Behavior은 3개로 구성되어 있다.
- Default (0, 1의 Path Pattern에 부합하지 않을 경우 모든 Client의 요청을 ELB에서 처리)
- *.png
- *.jpg
Origin Access Identity
- OAI는 2개임
- png 객체를 포함하고 있는 S3 Bucket의 Policy의 Principle로 설정될 Origin Access Identity
- 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으로 보낼 수 있다.
반응형
'AWS' 카테고리의 다른 글
[AWS] Amazon EC2 Instance 유형 알아보기 (1) | 2021.06.05 |
---|---|
[WEB, WAS] 앞단에 ALB가 있을 때 Apache, Tomcat의 Log에서 Client IP 노출 설정 (1) | 2021.05.29 |
[AWS] NLB, ALB, Lambda를 통한 고정 IP 사용 방법 (2) | 2021.05.11 |
[EKS] EKS Cluster에 IAM User를 통한 kubectl 권한 설정하기 (1) | 2021.05.09 |
AWS Lambda를 이용한 EC2 인스턴스 정기 시작, 중지 (2) | 2021.02.28 |