오늘은 AWS Route53에 등록한 도메인에 대해 HTTPS 연결하는 방법에 대해 글로나마 간단히 정리해보고자 한다.
나는 가비아에서 도메인을 구매했고, 이를 AWS에 등록해 사용하고자 Route53에 Hosted Zone을 구매한 도메인과 동일한 name으로 생성하였다. 처음 생성하면 NS, SOA 타입의 레코드를 확인할 수 있는데, 이는 각각 'Name Server', 'Start of Authority'를 의미한다. 아무튼, 아래와 같이 NS 타입의 네임서버 주소로 네 개가 보여지는데, 이들을 모두 가비아의 네임서버 설정에 하나씩 추가해줘야 한다.
Value/Route traffic to
------------------------
ns-872.awsdns-45.net.
ns-1109.awsdns-10.org.
ns-84.awsdns-10.com.
ns-2020.awsdns-60.co.uk.
이때 끝에 .는 붙이지 말아야 한다.
네임서버 설정을 한 뒤에는 로컬에서 네임서버가 정상적으로 설정이 되었는지 CLI로 확인할 수 있다. 내 환경 기준으로 윈도우 커맨드로 다음과 같이 해주면 된다. 내 도메인주소는 tfmaster.shop이다.
nslookup -type=ns tfmaster.shop
그럼 그 결과로 아래와 같이 메시지가 출력된다.
서버: acns.uplus.co.kr
Address: 1.214.68.2
권한 없는 응답:
tfmaster.shop nameserver = ns-84.awsdns-10.com
tfmaster.shop nameserver = ns-1109.awsdns-10.org
tfmaster.shop nameserver = ns-872.awsdns-45.net
tfmaster.shop nameserver = ns-2020.awsdns-60.co.uk
이때 '권한 없는 응답'이라고 나오는 건, 해당 요청에 대해 DNS 응답이 캐시된 중간 DNS 서버(리졸버)로부터 왔다는 뜻으로, 오류를 나타내는 건 아니다. '권한 있는 응답'을 원한다면, 다음과 같이 직접 Route 53 네임서버에 질의를 하면 된다.
nslookup tfmaster.shop ns-84.awsdns-10.com
그럼 다음과 같은 응답을 받게 된다.
서버: UnKnown
Address: 205.251.192.84
이름: tfmaster.shop
중요한 내용은 아니었고, 이제 다음 차례로 넘어가자.
HTTPS를 사용하기 위해서는 SSL 인증서가 필요하다. AWS에서는 ACM(AWS Cerfiticate Manager)을 통해 인증서를 발급받을 수 있다. 인증서를 발급 받는 방법은 ACM에서 단순히 기본 설정만으로 Request함으로써 발급받을 수 있다. 보통의 인증서와 비슷하게 Key Algorithm을 필요로 하며, 추가로 Validation method를 선택할 수 있는데, 보통 권장되는 DV(DNS validation)을 선택하게 되면, 이는 도메인의 소유권을 AWS Route53을 통해 검증하도록 한다는 뜻이다. ACM에서 요청한 인증서는 Route53 레코드로 등록할 것이니, 특별한 이유가 없다면 DNS validation을 선택하면 된다.
그리고 만약 도메인을 단순히 tfmaster.shop으로만 사용할 게 아니라, abc.tfmaster.shop, def.tfmaster.shop과 같이 사용해야 한다면, 처음 ACM 요청 시 도메인 이름을 *.tfmaster.com으로 등록해주면 된다. 이 부분 때문에 왜 제대로 주소를 찾지 못하는지 헤맸는데, 아무튼 그렇다.
요청한 뒤에는 다시 Route53으로 접속하여 생성했던 Hosted Zone에 레코드를 추가해준다. Record name은 ACM 인증서에 명시된 CNAME name과 동일하게 입력해주고, Value도 마찬가지로 CNAME value와 동일하게 입력해준다. 그리고 레코드 타입은 CNAME으로 잡아주면 된다. 여기서 CNAME은 'Canonical Name'의 약자로, 별칭 도메인을 실제 도메인으로 매핑하는 역할을 한다. 레코드 생성까지 완료되면 ACM 인증서가 정상적으로 발행될 때까지 대기해야 한다. ACM 요청 직후에는 상태가 Pending validation으로 나타나지만, 정상 확인되면 Issued로 나타나게 된다. 대기시간은 경험상 보통 한 시간 안으로 해결되는 것 같다.