EC2 도메인 연결 및 HTTPS 적용하기
이번엔 AWS에서 서버 배포를 할때, 도메인을 적용시키고, 추가적으로 HTTP가 아닌 HTTPS로 적용시켜 배포하는것을 알아보도록 하겠습니다.
우선, 이 과정을 진행하기 위해선 필요한것들은 다음과 같습니다.
- EC2 (서버실행되는 EC2)
- 도메인 (가비아 사용)
- Route53 (도메인서비스)
- Certfication Manager (SSL/TLS 인증서)
- Load Balancer (로드밸런서)
- RDS 데이터베이스 (필수X)
우선 진행과정은 다음과 같습니다.
1. EC2, RDS 배포(여기서는 생략)
2. 도메인 구매
3. Route 53 도메인 적용
4. Certification Manager 인증서 발급 및 도메인 적용
5. 로드 밸런서 생성 및 타겟그룹 설정
6. 로드밸런서와 Route 53 연결
일단 EC2 생성과 서버 배포는 이미 되어있다는 가정하에, 도메인 연결 및 HTTPS 적용과정을 순차적으로 진행하겠습니다.
도메인 구매
우선 도메인을 적용시키기 위해 도메인을 구매해야 합니다. 도메인을 구매할 수 있는 곳은 여러개가 있는데, 대표적으로는 AWS Route 53에서 도메인 구매하거나, 가비아에서 도메인을 구매합니다.
가비아가 첫 구매시 도메인 가격이 싸기 때문에 저는 가비아에서 구매하도록 하겠습니다.
가비아에 들어가서 회원가입을 진행하고 본인이 사고싶은 도메인을 입력하면 다음과 같이 추천 도메인이 뜨는데, 여기서 원하는 도메인을 선택하면됩니다.
이렇게 도메인을 선택하고 서비스 신청을 한 후, 결제를 하면 도메인 구입이 완료됩니다.
이렇게 구매를 하게 되면 가비아에서 해당 도메인 구입을 완료한 상태가 됩니다.
도메인 생성이 정상적으로 완료됐으면, 다음 단계로 넘어가면 됩니다.
Route 53 도메인 적용
이제는 위에서 구입한 도메인을 AWS Route 53에 적용하는 단계입니다. 저희가 Route 53에서 도메인을 구매한게 아니라, 이 과정에서 가비아의 도메인과 Route 53을 서로 연동시키는 추가적인 과정이 있습니다.
우선 AWS Route 53의 호스팅 영역에 들어가서 '호스팅 영역 생성'을 누릅니다.
호스팅 영역 생성창에서 '도메인 이름'에 방금 전에 구매한 가비아 도메인의 이름을 입력합니다.
이렇게 도메인 이름을 입력하고 호스팅 생성을 누르면됩니다.
이렇게 호스팅 영역을 생성하고, 호스팅의 세부정보 레코드를 보면 다음과 같이 레코드들이 있습니다.
(현재 A와 CNAME은 나중에 추가 예정이고, NS와 SOA 2개만 있는게 정상입니다!)
여기서 각 레코드들의 유형을 보면 A,NS,SOA,CNAME가 있는데 각 레코드들의 개념은 다음과같습니다.
- A 레코드
-저희가 호스팅한 도메인 주소와 서버의 IP주소를 매핑시키는 레코드입니다.
즉 해당 레코드를 만듦으로써, 도메인 주소 클릭시 서버의 IP주소로 바꿔서 서버에 들어올 수 있게 하는 레코드입니다. - NS 레코드 (Name Server)
-네임 서버 레코드로, 해당 도메인에 대한 네임서버 의 권한을 누가 관리하고 있는지 알려주는 레코드입니다.
즉, 해당 레코드를 클릭했을때, DNS 처리과정에서 해당 도메인 DNS 쿼리를 처리할 서버가 지정되어있는 레코드입니다.
이때, DNS 시스템의 안정성과 고가용성을 위해 1개가 아닌 4개의 값이 존재합니다. - SOA 레코드 (Start of Authority)
-NS레코드의 네임서버가 해당 도메인에 관하여 핵심 정보를 가지고 있음을 증명하는 레코드입니다.
즉, SOA 레코드의 값은 NS 레코드 값중 하나이며, 도메인 이름, 도메인 관리아 메일, 도메인 일련번호 등의 필수적인 정보를 가지고 있습니다. - CNAME 레코드 (Canonical Name Record)
-도메인 별명 레코드며, 다른 도메인 주소를 A 레코드의 도메인 주소로 이중매핑 시키는 레코드입니다.
즉, 고정IP가 아닌 유동IP인 상황에서 CNAME 레코드를 활용하여 도메인과 IP 매핑 수정을 최소화 할 수 있는 장점을 가진 레코드입니다.
이제 여기에 있는 NS 레코드를 가비아의 도메인에 적용시킬 것입니다. NS레코드에 존재하는 4개의 값들을 가비아의 도메인 정보에 입력하면됩니다.
가비아 페이지의 '내 서비스 관리 -> 도메인 통합 관리툴 -> 도메인 정보 변경 -> 내도메인 클릭 -> 네임서버 설정'에 들어가서 방금 4개의 값들을 차례대로 1차~4차까지 등록을 하면됩니다.
Certificate Manager 인증서 발급 및 도메인 적용
Route 53 도메인 적용까지 완료 했으면 이제 HTTPS를 적용하기 위해 Certification Manager를 통해 SSL/TLS 인증서를 발급해야 됩니다.
AWS의 Certificate Manager에 들어가서 인증서 요청을 클릭하면 다음과 같은 창이 뜹니다.
여기서 퍼블릭 인증서 요청을 한 후, 다음장으로갑니다
도메인이름은 전에 사두었던 도메인의 이름으로 설정을 한 후, 검증 방법 및 키 알고리즘은 기본 권장값으로 설정합니다.
이렇게 설정 완료를 안후, 인증서 리스트를 확인하면 다음과 같은 창이 나올겁니다.
(지금 저는 전에 만들어둔 인증서기 떄문에 '발급됨'이 뜨는데 발급까지 시간이 좀 소요가 됩니다.)
이제 인증서 ID를 클릭하고 Route 53에 레코드 생성을 하면됩니다.
'Route 53에서 레코드 생성'을 클릭합니다.
그럼 아래와 같은 창에서 '레코드 생성'을 눌러서 CNAME을 생성 할 수 있습니다.
(현재 저는 전에 미리 만들어두어서 막혀있습니다.)
이렇게 CNAME 레코드를 생성하였으면, 다시 Route 53에 가서 CNAME 레코드가 제대로 생성되었는지 확인하고, 이 레코드 이름과 레코드 값을 다시 가비아에 DNS 설정에 업데이트해야 합니다.
아래와 보이는것처럼 레코드 이름과 레코드 값을 복사합니다.
(이때, 레코드 이름의 끝에 '.도메인주소' 부분은 생략하여 복사합니다.)
복사 했으면, 가비아에 가서 DNS 관리툴로 갑니다.
이제 DNS 설정에 들어가서 CNAME레코드를 추가하면됩니다.
타입을 CNAME으로 바꾸고, 복사한 값을 순서대로 '호스트 이름'과 '값/위치'에 붙여넣으면 됩니다.
이렇게 Certificate Manager를 활용해 인증서까지 발급하고 적용을 하였습니다.
로드 밸런서 생성 및 타겟그룹 설정
이렇게 전의 설정들이 잘되었다면, 로드밸런서를 만들기 전에 만들어둔 EC2에서 인바운드 보안 규칙을 설정합니다.
현재는 로드밸런서와 EC2들을 각각 다른 보안그룹에 포함시켜 오직 로드밸런서만 EC2에 접근가능하게 적용하였습니다.
즉, 사용자가 IP주소로 직접 서버에 접근하는것을 막고 오직 도메인으로 로드밸런서를 거쳐서 접근가능하게 적용하였습니다.
아래 사진이 지금 배포할 서버의 전체적인 구조입니다.
로드밸런서는 외부로 부터 443,80포트로 요청을 받고, 해당 요청을 EC2 서버 3개에 순차적으로 분배합니다. 이때 서버로 보내는 포트는 EC2에 할당된 서버의 포트번호인데, 이것은 여러분의 서버가 할당된 포트번호로 바꾸면됩니다.
또한 서버에서 데이터베이스를 건드릴 일이 있다면, 각 EC2에서 RDS 데이터베이스로 3306포트쪽으로 전송하게 됩니다
따라서 저희가 가지고 있어야할 보안그룹은 총 3가지이며, 각 보안그룹의 인바운드 규칙은 다음과 같습니다.
- 로드밸런서 보안규칙
- 80(HTTP)
- 443(HTTPS)
- EC2 보안규칙
- 8080 (서버 포트) (로드밸런서 보안그룹에서 온 것만 받음)
- RDS 보안규칙
-3306 (EC2 보안그룹에서 온 것만 받음)
이렇게 보안 그룹에서의 인바운드 규칙을 설정하였으면 로드밸런서의 타겟그룹을 만들 차례입니다.
EC2 - 로드밸런싱 - 대상그룹을 차례대로 들어갑니다.
여기서 '대상 그룹 생성'을 누르면 다음과 같은 생성창이 나타나게 되는데, 여기서 '대상 그룹 이름'을 본인이 원하는 이름으로 설정하고 나머지는 기본값으로 냅두고 다음으로 갑니다.
이제 다음으로 타겟 대상을 정해야합니다. 위의 정보는 현재 저희가 운영하고 있는 EC2의 정보이고, 아래는 이제 저희가 타겟으로 등록할 대상입니다.
위의 EC2를 클릭하고 대상으로 지정할 port번호를 입력하고 '아래에 보류 중인 것으로 포함'을 누릅니다.
이렇게하면 저희가 이따가 로드밸런서를 구동할때, 트래픽이 들어오게 되면 로드밸런서가 여기서 등록한 대상들에게 트래픽을 전달하게 됩니다.
(저는 ec2에 서버 배포를 8080포트로 했기때문에 8080포트로 대상을 등록했습니다.)
이렇게 타겟 그룹을 생성하게 되었으면, 로드밸런서를 생성할 차례입니다.
아까와 똑같이 EC2 - 로드 밸런싱 - 로드밸런서로 들어간후, '로드밸런서 생성'을 누릅니다.
그 이후 저희는 Application Load Balancer를 생성할 거기 때문에 맨 첫번쨰 로드밸런서를 클릭합니다.
그다음, 사용자가 원하는 로드밸런서 이름을 입력하고 로드밸런서 네트워크 매핑은 첫번째와 세번째거인 2a,2c를 선택합니다.
그 다음으로는, 로드밸런서의 '보안그룹'을 설정합니다.
그다음으로는 Listener 설정인데 저희는 로드밸런서로 들어오는 요청은 HTTPS와 리다이렉션할 HTTP요청이 끝이므로, 443(HTTPS)포트와 80(HTTP)포트를 열어둡니다. 이제 로드밸런서에 443포트와 80포트로 요청이 들어오면 대상그룹에 전달 할 수 있습니다.
이제 마지막으로 보안 Listner설정인데, https를 적용할때 설정하는 것입니다.
저희는 전에 Certificate Manager를 통해 인증서를 생성 했으므로, 보안정책은 권장값인 TLS1.3버전으로하고, 인증서는 전에 저희가 만들어둔 인증서를 선택합니다.
로드밸런서와 Route 53 연결
이제 생성된 로드밸런서에 Route 53을 연결하여 도메인 적용을 해주면 끝입니다.
이제 아까 전에 만들어 두었던 Route 53 호스팅 영역으로 갑시다.
이제 그러면 Route 53에 레코드가 NS, SOA, CNAME 이렇게 3개 존재할 것입니다.
저흰 여기서 A레코드를 생성하여 로드밸런서와 Route53을 연결시킬겁니다.
이제 '레코드 생성'으로 들어가면됩니다.
여기서 '값' 정보에서 로드 밸런서의 IP주소를 입력해도 되는데, IP주소 대신에 '별칭'을 통해 로드밸런를 찾아보겠습니다.
여기서, 맨위는 Cloassic Load Balancer를 선택한후, 저는 서울 리전에 생성했기 때문에 서울로 선택하고 해당 로드밸런서를 선택하면됩니다.
이렇게 레코드 생성을 하게 되면 Route 53 레코드에 A 레코드가 생성되게 되고, 이를 통해 저희의 로드밸런서에 도메인이 적용되어, 조금만 시간이 지나면 https로 저희 도메인으로 접속이 가능합니다.
완벽히 적용되기까지 시간이 조금걸립니다.(적용되기까지 502 Bad GateWay 오류가 나옵니다.)