Network & AWS

[AWS로 HTTPS 설정]

Haksae 2022. 3. 28. 01:44
AWS로 HTTPS를 설정하려고 했는데.. 최근에 AWS가 업데이트 되었는지,
기존의 자료들과 상이한 부분이 있어서 여러 어려움이 있었다..

마침내 셋팅이 완료되었고, 나같은 초보자를 위해 간단한 셋팅법을 작성하려한다.

1. HTTPS

먼저 HTTPS의 간단한 정의와 HTTPS를 구현했던 기존 방식에 대해서 간략히 기술하겠다.

1) HTTPS란?

  • 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer) 프로토콜을 이용하여 클라이언트와 서버가 데이터를 주고 받는 통신 규약
  • 당연히 HTTP보다 보안과 안정성이 뛰어나다.

2) 기존의 HTTPS 구현 방식

  • HTTPS 인증서 구매/발급 (약간의 비용 발생하기도함)
  • 인증서 병합 및 설정
  • 웹 서버에 인증서 설치
  • 웹 서버 설정 변경
    • HTTPS 적용
    • HTTP 리다이렉션 등

=> 생각보다 복잡한? 기존의 HTTPS 구현 방식을 AWS 인프라를 통해서 쉽게 구현할 수 있다!

 

2. AWS에서 HTTPS 구현하기

  • AWS에는 다양한 인프라를 제공하고 있는데, AWS 인프라들을 활용하면, 웹 서버가 아닌 아마존 인프라 레벨에서 쉽고 간단?하게 HTTPS를 구현할 수 있다.
  • 해당 글에서는 간단하게 2가지 방법을 설명하고, 내가 실제로 설정한 방법을 기술하겠다.

1) Amazon Cloud Front 이용하는 방식

  • 클라이언트가 Route53을 통해서 Cloud Front와 HTTPS로 통신하고, Cloud Front와 웹 서버와 HTTP로 통신하는 방법
  • Cloud Front와 Origin과 HTTP로 통신하기 때문에, 매우 간단한 방법이고, AWS 안에서 보안 설정을 걸어두면 HTTP라고 하더라도 매우 안전하기에 걱정하지 않아도 된다.
  • HTTPS 인증서는 ACM(Aws Certificate Manager)에서 제공해준다.
  • 참고로 Cloud Front는 CDN이다.

2) Application Load Balancer를 이용하는 방식

  • 클라이언트가 Route53을 통해서 ALB와 HTTPS로 통신하고 ALB와 웹 서버와 HTTP로 통신하는 방법
  • 위와 동일하게 매우 간단하고, 보안상 문제가 없는 방법이다.

3. HTTPS 구현하기

0) 아키텍쳐

  • 위에서 설명한 것과는 다른 아키텍쳐에 당황?하셨을 수 있다.
  • 이유를 구차하게 설명하자면..
    • 실전프로젝트 진행 중인데, 우리는 아직 학생이여서 FE와 BE가 각자 HTTPS를 구현해보았다.
    • 이 과정에서 원래대로라면 불필요하게? 2번 작업하고 있다.
    • 나중에 일단락되면 정리하여 하나의 과정으로 변경하겠다.
  • 해당 글은 위의 아키텍쳐에서 BE 파트의 HTTPS 구현이다.

1) 가비아 & Route53

  • HTTPS를 구현하려면 도메인이 있어야한다. 본인은 가비아에 도메인이 하나 있으므로 그것을 사용하였다.
  • 먼저 가비아와 Route53을 연결해주어야한다.

a) 호스팅 영역 생성

 

- Route53에서 호스팅 영역을 생성해준다.

- 도메인을 아래의 양식과 같이 넣고, 퍼블릭 호스팅 영역으로 만들면 된다.

- 완료되면 아래와 같이 생성된다.

b) 가비아에서 도메인 네임서버 설정

- 가비아 도메인 관리 페이지에서 네임서버 설정으로 가면 아래와 같은 화면이 뜬다.

- 검은색 빈칸 (1-4차)에 위의 레코드 유형의 NS(네임서버)에 있는 4개의 값을 작성한다.

- ex) ns-1328.awsdns-38.org를 아래 1차에 기입하라는 뜻

- 참고로 Route53의 네임서버 값의 마지막 . (root domain)은 빼야한다. (가비아에서 빼라고 한다)

- 완료하고 적용하면 된다.

 

2) ACM에서 인증서 발급 받기

a) 인증서 요청하기

- 이제 ACM에서 SSL 인증서를 발급받을 단계다.

- ACM으로 가서 퍼블릭 인증서 요청을 한다.

- Route53에서 기입했던 도메인을 기입한다.

b) Route53에 레코드 생성

- 인증 요청하고 조금만 기다리면, 검증 대기중이 뜨고,

- 도메인에 CNAME 이름과 값이 뜬다.

- 그러면 Route 53에서 레코드 생성을 누른다.

- 그러면 다음과 같이 Route 53에 DNS 레코드 생성을 해준다.

- 그러면 다음과 같이 Route 53 호스팅 영역에 CNAME 레코드가 생성된다.

* 인증서 발급까지 검증이 조금 오래걸릴 수도 있다. 가비아는 도메인은 20-30분정도 소요되었다.

발급되면 다음과 같이 뜬다.

 

3) ALB 생성하기

a) 대상 그룹 설정하기

- EC2-> 로드밸런싱 -> 대상 그룹에 들어가서, Create target group을 누른다.

- 아래와 같은 화면에서 Basic configuration은 "Instances"로,

- Target Group Name은 원하는대로

- 프로토콜은 HTTP: 80을 설정하고 NEXT를 누른다.

b) 타겟 등록

- 그러면 타겟을 등록하는 페이지가 뜬다.

- 여기서 설정하기 원하는 인스턴스를 누르고 "Include as pending below"를 눌러서 타겟을 만들어주고

- Create target group을 눌러준다.

- 그러면 본 화면처럼 나온다.

c) 로드 밸런서 생성

- 로드 밸런서 페이지가 바뀌어서 여기 부분은 약간? 자세하게 설명하겠다.

- 이번에는 로드밸런서 생성으로 가서 생성을 누르고, 가장 왼쪽에 있는 ALB 생성을 누른다.

- 원하는 이름을 기입하고, 아래의 셋팅과 동일하게 셋팅한다.

- 네트워크 매핑에서 VPC는 그대로 두고, Mappings은 4개 전부 체크해준다.

- 보안 그룹은 디폴트 값과 EC2의 보안그룹을 설정한다.

- 리스너는 HTTPS로 설정하고, 액션은 좀 전에 설정했던 타켓 그룹을 설정해주면 된다.

- 아래로 조금 내려가서 보안 리스너 셋팅에서 SSL 인증서를 좀 전에 만들어준 인증서로 셋팅해준다.

- 위의 셋팅을 마치면 별 다른 셋팅을 하지 않고, create load balancer를 누른다.

- 작성을 완료하면 아래와 같이 뜬다.

d) Route53에서 레코드 생성하기

- 끝으로 Route 53 페이지로 가서 레코드 생성을 해준다.

- 아래의 화면에서 별칭을 눌러준다.

- 별칭을 누르면 트래픽 라우터 대상이 나온다.

- 엔드포인트는 Application/Classic Load Balancer에 대한 별칭으로 설정하고

- 리전은 서울로 셋팅한다.

- 그리고 로드밸런서를 방금 생성한 로드밸런서로 설정하고 레코드를 생성한다.

- 모든 것이 완료되면, 아래와 같이 레코드가 뜰 것이다.

- 여기서 라우팅 정책에 A, NS, SOA, CNAME이 다 있는지 마지막으로 확인해라.

- 이렇게되면 모든 셋팅이 완료된 것이다.

- 로드밸런서에 가서 상태가 "활성"으로 바뀌면 HTTPS 셋팅이 마무리된다.

* 참고로 EC2나 S3의 보안그룹 셋팅을 잘 체크해주길 바랍니다.