[Deployment] AWS ACM + CloudFront를 활용하여 S3 HTTPS로 배포하기

MinWoo Park·2021년 4월 28일
0

Deployment

목록 보기
2/4
post-thumbnail

Deployment

기존 AWS S3로 클라이언트 배포를 CloudFront를 활용하여 HTTPS로 배포하였습니다.
진행 과정을 기록하며 정리하는 글을 작성합니다.


ACM(Amazon Certificate Manager)

ACM은 SSL 인증서를 발급해주는 서비스입니다.
주의할 점은 us-east-1(미국 동부 버지니아 북부) 리전에서 SSL 인증서를 요청해야 합니다.
CloudFront에서 사용되는 Custom SSL Certificate는 us-east-1에서 생성되어야 하기 때문입니다.


1. ACM 발급받기

인증서 프로비저닝을 시작합니다.

ACM 첫 화면 - 시작하기 - 인증서 요청 클릭

도메인 이름을 적어야 합니다.
저는 calming-signal.ml과
서브 도메인은 와일드카드를 사용하여 *.calming-signal.ml 두 개를 작성했습니다.

도메인 이름 추가

인증서를 받기 위해서는 도메인을 검증 받아야 합니다.
DNS 검증을 사용하면 DNS 서비스에 추가할 CNAME 레코드가 유지되는 한 자동으로 인증서가 갱신되어 편리합니다.
DNS 검증은 Route53을 DNS로 사용할 경우에만 선택 가능한 옵션입니다.
앞서 DNS 설정을 해두었었기 때문에 가능한 것입니다.

검증 방법 선택

다음으로 넘어가면 태그가 나옵니다.
태그는 생략하고 넘어갑니다.
그 다음 창에서 내용을 확인하시고 요청을 클릭합니다.

검증은 5~10분 정도 소요되는 거 같습니다.
인증서 검증에 사용할 CNAME 레코드가 표시됩니다.
검증 전에도 생성이 가능하니 클릭 후 생성합니다.

이렇게 인증서는 다 만들었습니다.
인증서를 활용하여 CloudFront를 배포해 보겠습니다.

모든 설정 후 요청 클릭 시 화면


CloudFront

전 세계에 파일을 빠른 속도로 배포하는 CDN(Contents Delivery Network)입니다.
CDN이란 컨텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하여 제공하는 시스템입니다.
즉 전 세계 곳곳에 위치한 캐시 서버에 복제해 주는 서비스입니다.

CloudFront를 사용해야 하느 이유는 전송 속도 향상과 비용 절감에 있습니다.
모든 리전에 S3 버킷을 생성하는 것을 비효율적이니 CloudFront를 사용합니다.
그리고 이번에는 HTTPS 프로토콜을 사용하기 위해서도 사용합니다.

1. CloudFront 생성하기

S3 오리진에서 CloudFront 배포를 생성하겠습니다.
CloudFront 서비스로 들어간 후 Create Distribution - Get Started를 클릭합니다.

CloudFront 서비스 첫 화면

다음과 같이 많은 설정들이 나옵니다.
기본적인 셋팅만 다루고 이외에 필요한 것이 생길 때마다 추가로 설정해 주시면 됩니다.

Create Distribution 화면

순차적으로 설명 드리면 먼저 Origin Settings입니다.
CDN에서 오리진은 원본에서 파일을 복사해 가져올 때, 파일을 가져오는 서버를 뜻합니다.
주의할 점은 Origin Domain Name인데 클릭하여 S3 버킷 목록을 선택하는 것이 아닌
S3 - 속성 - 정적 웹 사이트 호스팅에서 엔드포인트를 직접 복사해 와서 붙여 넣기를 해야 합니다.
이에 관한 설명은 링크를 걸어두겠습니다.
CloudFront + S3 Website: “The specified key does not exist” when an implicit index document should be displayed

Restrict Bucket Access은 S3 버킷에 CloudFront만 접근할 수 있도록 설정하는 옵션입니다. Yes를 선택합니다.
그럼 Origin Access Identity이 생깁니다.
OAI는 오리진에 접근할 수 있는 식별자입니다. 처음 CloudFront를 생성하면 없을테니 Create a New Identity를 클릭합니다.

Grant Read Permissions on Bucket는 CloudFront가 S3에서 파일을 읽을 수 잇는 권한을 버킷의 Bucket Policy에 설정합니다.
Yes로 설정하여 다른 모든 접속을 제한하고 CloudFront만 접근할 수 있도록 합니다.

다음은 Default Cache Behavior Settings입니다.
저는 HTTPS만 사용할 것이기에 Viewer Protocol Policy에서 Redirect HTTP to HTTPS를 선택했습니다.

그 다음 Distribution Settings입니다.
Alternate Domain Names은 Route 53에서 도메인을 연결하기 위해 설정해야 합니다.
구입한 도메인 이름을 설정합니다.

SSL Certificate은 Custom SSL Certificate을 선택하여 ACM으로 얻은 인증서를 선택합니다.

Default Root Object에는 CloudFront 배포 도메인에 접속했을 때 보여줄 파일의 이름입니다.
index.html로 설정합니다.

이로써 모든 설정이 끝났습니다.
맨 아래 Create Distribution을 클릭합니다.


2. Route 53 레코드 설정하기

이전 시간에는 CloudFront를 사용하지 않아 A 레코드 생성 시 트래픽 라우팅 대상을 S3로 설정했습니다.
이제는 CloudFront로 변경해 주시고 배포 선택은 클릭하시면 cloudFront 주소가 나옵니다.
클릭 후 저장합니다.

Route 53 A 레코드 트래픽 라우팅 대상 편집


모든 설정을 완료하였습니다.
앞선 단계 ACM 발급 후 CloudFront까지 배포했으면 HTTPS 사용이 가능합니다.

HTTPS 사용 가능, 자물쇠 표시가 나옵니다.


Reference :
AWS CloudFront 배포를 만들거나 업데이트할 때 지정하는 값 공식문서

profile
물음표를 느낌표로 바꾸는 순간을 사랑하는 개발자입니다.

0개의 댓글