사용 동기
클라이언트 웹사이트를 가비아에서 도메인을 구입하여 사용중이었다.
근데 Beanstalk 환경으로 생성한 서버 URL도 깔끔하게 보이기 위해 도메인을 붙이고자 했는데
도메인을 또 사기에는 돈이 아까워서 서브 도메인을 적용하게 되었다.
서브 도메인 적용 해보기
> 도메인 하나가 등록됐다고 가정하고 진행
> Bean stalk으로 환경을 생성했다고 가정하고 진행
2. 등록한 도메인을 클릭
3. 레코드 생성 클릭
- '레코드 이름'은 서브 도메인 이름이다.
- '레코드 유형'은 CNAME을 사용하자. 이는 서브 도메인을 다른 도메인으로 트래픽을 전달할 때 쓰인다.
- 값에는 트래픽을 보낼 도메인을 넣어주자. 위 경우에서는 Beanstalk 환경으로 생성한 인스턴스의 Domain name을 주었다.
- 레코드 생성 클릭
4-1. HTTPS 적용을 위한 SSL 인증서 발급
먼저 우리는 서브 도메인에 대한 SSL 인증서를 발급받아야한다.
이는 AWS의 ACM 서비스로 가능하다.
(1) ACM 콘솔에 들어가서 '인증서 요청'을 클릭하자.
(2) '퍼블릭 인증서 요청'을 클릭하고 다음 클릭
(3) 도메인 이름으로는 모든 서브 도메인 사용을 위해 *.{HOST_DOMAIN}을 입력한다.
(4) 도메인 소유권을 검증하자.
> 이제 우리는 서브 도메인에 대한 SSL 인증서가 발급이 되었고 HTTPS 프로토콜 적용이 가능해졌다.
4-2. HTTPS 적용을 위한 Load balancer 리스너 추가
기본적으로 Load balancer 리스너는 HTTP 프로토콜만 추가되어있다.
따라서 HTTPS 리스너를 추가해야한다.
EC2 콘솔의 로드벨런서 탭 -> 리스너 탭 -> 리스너 추가를 클릭하자
(1) HTTPS를 선택한다
(2) Default Action에서 'Forward'선택
(3) Target group으로는 Beanstalk이 생성한 Target group 선택한다.
* Target group의 프로토콜이 HTTP인 이유는 Client -> Load balancer 에서 이미 Request 데이터를 암호화하여
데이터를 주고받았기 때문이다. 그 뒤에 있는 Load balancer -> Target group 단계에서는 VPC 안에서 통신하기 때문에 안전하다. 그러므로 굳이 HTTPS 프로토콜 써가면서 CPU 자원을 낭비할 필요는 없다.
- 마지막으로 4-1 파트에서 발급한 SSL 인증서도 추가해준다.
5. HTTP 프로토콜 HTTPS로 리다이렉트
이제 HTTPS 리스너가 추가되었다.
근데 우리는 사용자가 HTTP로 들어와도 안전한 통신을 위해 HTTPS로 Redirection 하고싶다.
이를 위해선 로드 밸런서 탭에서 HTTP:80 리스너를 선택하고 편집을 누른다.
(1) Default action으로 Redirect
(2) HTTPS 프로토콜로 보내고 확인
5. 마무리
이제 끝났다.
등록한 서브 도메인을 검색창에 입력하고, 요청을 보내면
응답이 잘 오는 것을 볼 수 있다.
그리고 HTTP로도 요청을 해서 Redirection이 잘 되는지 확인해보자.
6. How about security group in target group?
지금까지 우리는 ALB에 HTTPS를 붙여주었고, ALB는 Target group으로 트래픽을 보내주게 하였다.
근데 Target group의 Security group은 설정을 안해주었는데 괜찮을까?
Beanstalk이 프로비저닝해준 Target group(EC2)는 내부적으로 nginx가 80 포트에서 listen하고 있다.
그러다가 해당 포트로 HTTP 요청이 들어오면 Node.js 서버로 proxying 해준다. 그렇기 때문에 Security 그룹은 다른 프로토콜을 추가해주지 않아도 된다.