[배포] AWS S3로 배포한 앱에 HTTPS 적용하기

기록일기📫·2021년 4월 9일
20
post-thumbnail

이번 포스팅에서는 저번 포스팅에 이어 S3를 이용해서 배포한 앱에 HTTPS를 적용하는 과정을 정리해 볼 것이다!

Route53, Cloudfront, ACM을 이용해 도메인 구입부터 HTTPS 적용 후 배포에 이르는 전 과정을 정리할 예정이다. 👏👏

💡 AWS S3를 이용한 앱 배포 과정은 여기서 확인 하실 수 있습니다.

Route53

Route53이란 AWS에서 제공하는 DNS 서비스이다. 우리는 Route53을 통해 도메인을 구매하고 호스팅 영역을 생성 및 NS(네임서버) 구축을 통해 DNS에 요청을 처리할 수 있다.

뿐만 아니라 Route53은 라우팅 정책을 등록할 수가 있기 때문에 효율적인 트래픽 분배가 가능하다. 단순 라우팅, 가중치 기반 라우팅, 지연 시간 기반 라우팅 등 여러가지 DNS 요청에 대한 응답 방식을 설정할 수 있다.

Route53은 DNS 서비스이기 때문에 동작방식의 이해를 위해서는 DNS에 대한 기본지식을 가지고 있어야 하지만, 배포가 목적이다! 라고 한다면이 튜토리얼 대로만 하면 어렵지 않게 https 도메인을 적용한 ✨내 어플리케이션✨을 배포할 수 있다!

CloudFront

AWS CloudFront란 AWS 제공하는 CDN 서비스이다. CDN은 Contents Delivery Network의 약자로 콘텐츠 제공자와 사용자 간 지리적으로 떨어져 있는 환경에서 콘텐츠를 빠르게 제공하기 위한 기술이다.

CloudFront는 전 세계에 분포된 엣지 로케이션이라고 하는 데이터 센터의 엣지 서버를 사용해 콘텐츠를 캐싱하고, 사용자가 위치한 곳에서 가장 가까운 엣지 로케이션에서 콘텐츠를 제공받을 수 있도록 해주는 역할을 한다.

또 CloudFront는 SSL 인증서를 이용한 HTTPS 호스팅을 지원한다. 사실 이번에 우리가 CloudFront를 이용하는 이유는 HTTPS 호스팅 때문인데, S3로 배포한 앱은 SSL 인증서 적용이 불가능하다. 따라서 우리는 CloudFront를 이용해 S3를 호스팅 함으로써 HTTPS를 적용해 볼 것이다!

ACM

ACM은 Amazon Certificate Manager의 약자로 AWS 서비스 및 연결된 내부 리소스에 사용할 공인 및 사설 SSL/TLS(Secure Sockets Layer/전송 계층 보안) 인증서를 손쉽게 관리 및 배포할 수 있도록 지원하는 서비스이다.

SSL/TLS 인증서란 네트워크 통신을 보호하고 웹 사이트의 자격 증명을 위해 사용되는데, 쉽게 말해서 내 도메인에 HTTPS를 적용할때 필요한 인증서라고 생각 하면 된다.

ACM을 이용하여 인증서를 받은 후 Elastic Load Balancer, Amazon CloudFront 배포, API Gateway 기반 API와 같은 AWS 리소스에 배포할 수 있다.

시작🙌

이제 우리가 사용할 서비스에 개념에 대해 알아보았으니 시작해보자!

도메인 구입

우선 https를 적용할 도메인을 구입해야한다. Route53에 들어가서 적절한 도메인을 구매해보자.

route53을 이용해서 도메인을 구입하면 NS(네임서버)는 자동으로 등록된다!

ACM으로 SSL(인증서) 등록

도메인을 구입 하였으면, HTTPS를 적용하기 위해 필요한 SSL 인증서를 등록해보자.

콘솔 -> certificate manager 클릭!

CloudFront는 N.Virginia region만을 지원하므로, 꼭 N.Virginia로 설정해야한다!

Provision Certificates를 선택해주고,

우리는 공인인증서를 가져올거니까 public certificate 선택하고 도메인을 입력해주자!

DNS 검증

도메인을 입력한 다음에 해당 도메인에 대해 DNS 인증하는 과정을 거쳐야한다.

DNS 검증은 등록하려는 도메인이 실제로 내가 소유한 도메인인지 확인을 하는 절차로, CNAME 레코드 설정을 통해 진행할 수 있다.

제공해준 값 그대로 Route53에서 등록해주면 된다.

그렇게 DNS 검증까지 완료 하면 드디어 인증서 발급이 완료 되었다!

CloudFront

HTTPS 적용

인증서를 발급 받았으니, CloudFront를 사용해 HTTPS를 적용해보자.

AWS console에서 CloudFront 검색 후 클릭!

Create distribution을 선택!

여기서는 여러 값이 많으니, 변경해야할 부분만 살펴보자.

우선적으로 버켓의 endpoint를 지정해줘야한다! 우리는 S3 bucket으로 배포한 값을 호스팅 할 거니까, S3를 통해 배포된 버켓의 주소를 복사해서 붙여넣자.

💡 list에서 선택을 하는게 아니라, S3 주소를 직접 복사해서 붙여넣어야 합니다!

허용할 HTTP Method를 체크하고 http로 접속한 user를 https로 redirect 시켜주는 옵션인 redirect HTTP to HTTPS도 체크해주자.

마지막으로 ACM에서 받은 SSL 인증서 세팅을 해주면 끝난다!

정상적으로 배포가 되었으면 CloudFront에서 'Enabled'된 것을 확인 할 수 있다!

이제 Route53에서 www.domain.com과 domain.com에 대한 DNS를 등록해주자.

CloudFront 배포 별칭은 두 개의 다른 도메인 레코드가 참조할 수 없다. 따라서 우리는 www.domain.com의 cloudfront 도메인의 CNAME으로 등록하고,

domain.com을 A record로 alias 설정을 해 주어 www를 쓴 유저와 그렇지 않은 유저 모두 정상적으로 연결 될 수 있도록 해줄 것이다.

말로 하면 좀 어려운데, 아래 사진을 보고 이해해보자😊

www CNAME record 설정

A record alias 설정


이렇게 해서 CloudFront, route53, S3를 이용한 https 설정을 진행해 보았다.👏👏👏

6개의 댓글

잘 참고했습니다. 감사합니다!

1개의 답글
comment-user-thumbnail
2022년 12월 28일

좋은글 감사해요!

1개의 답글
comment-user-thumbnail
2023년 5월 8일

감사합니다! s3부터 cloudfront로 https까지 완료했어요ㅎㅎ

1개의 답글