10장 커스텀 도메인과 DNS 준비하기
도메인
인터넷 상에는 많은 서버가 연결되어 있고 이러한 서버들을 구분짓기 위한 정보로 IP주소를 이용한다.
하지만, IP주소는 숫자의 나열로 사람들이 기억하기 어렵다. 그래서 문자를 이용한 표현 수단이 도메인 이름이다.
우리가 흔히 사용하는 www.naver.com 같은 도메인 주소들 말이다.
DNS
도메인 이름에서 IP 주소를 결정하는 것을 이름 결정이라고 하고, 이 이름을 결정하는 시스템을 제공하는 것이 DNS 이다.
- DNS 서버가 관리하는 도메인이면 존재하는 IP 주소를 반환
- DNS 서버가 관리하는 도메인의 서브 도메인이면, 서브 도메인을 관리하는 DNS 서버에 질의
- 그 이외의 도메인이면 자신이 소속된 상위 DNS 서버에 질의
SSL 서버 인증서
브라우저에서 통시할 때 수행하는 프로토콜로 HTTP와 HTTPS를 이용한다.
- HTTP : 암호화되지 않은 상태
- HTTPS : 암호화된 상태
사이트가 위장되지 않았음을 보장해주는 회사들이 있다. 이 회사들을 인증기관이라고 한다.
인증기관에서는 보장을 증명하는 SSL 서버 인증서를 발급해준다.
Route 53
AWS에서 DNS 역할을 하는 네이티브 서비스인 Route 53 를 제공한다.
2가지 기능을 제공한다.
- 도메인 이름 등록
- DNS 서버
도메인 이름 등록
상위 도메인을 관리하는 조직에 자신의 도메인을 요청해서 등록한다.
도메인 이름을 관리하는 조직에 요청을 보낸뒤 요청이 통과되면 도메인을 획득할 수 있다.
Route 53 이 이러한 과정을 대행해준다.
DNS 서버
Route 53은 DNS 서버의 기능을 제공하는 매니지드 서비스이다.
EC2 로 DNS 서버를 구축할 수도 있다. 안정성, 비용, 성능, 로드밸런서와 연계 등의 장점을 가진 Route 53 을 이용하자.
DNS 서버는 용도에 따라 2가지로 구분된다.
퍼블릭 DNS
외부로부터의 통신에 대해 공개하는 서버의 도메인을 결정하는데 쓰인다.
웹 서버나 로드 밸런서등을 공개할 때 이용되는 서버.
퍼블릭 IP를 반환한다.
프라이빗 DNS
시스템 내부에 생성한 리소스에 이름 붙여서 관리할 때 사용.
시스템 내부에서만 참조되는 것을 전제로하는 서버.
private ip를 반환.
즉, public dns는 외부와의 통신을 위해서 사용하는 것이고, private dns는 내부에서 참조하기 쉽게 사용하는 거라고 이해하면 된다.
Certificate Manager
AWS에서 SSL 서버 인증서도 발행해준다.
SSL 서버 인증서는 3단계로 나눈다.
- 도메인 검증 완료 (DV) 인증성 : 도메인 이름을 보증
- 조직 검증 완료(OV) 인증서 : 도메인 이름과 도메인 관리하는 회사명 보증
- 확장 인증(EV) 인증서 : 도메인 관리하는 회사의 실제 존재 여부와 신뢰성까지 보증
AWS에서는 DV 인증서만 보장한다.
도메인 이름 취득
Route 53 -> 등록된 도메인 -> 도메인 등록
- 도메인을 검색하고 구매
- 연락처 세부 정보 등록
구매 후 도메인 취득까지 며칠 걸린다. Route 53 대기중인 요청에서 확인할 수 있다.
퍼블릭 DNS에 리소스 정보 추가
Route 53 을 통해서 도메인을 취득하면 자동으로 취득한 도메인을 관리하는 public dns가 생성된다.
public dns에 점프 서버와 로드 밸런서를 추가해주자.
점프서버 정보 추가
Route 53 -> 호스팅 영역 -> 레코드 생성
- 라우팅 정책 : 단순 라우팅
- 레코드 구성 -> 단순 레코드 정의
- 레코드 유형 : IPv4 주소 및 일부 AWS리소스 선택
- 값/ 트래픽 유형 : 점프서버의 퍼블릭 Ip
로드밸런서 정보 추가
점프서버랑은 달리 값/트래픽 라우팅 대상에서 로드밸런서를 지정해준다.
점프서버와 로드밸런서에 대한 레코드들을 정의해준뒤에 레코드를 생성한다.
작동확인
도메인 이름이 올바르게 IP주소로 변환되는지 nslookup
명령으로 확인할 수 있다.
결과를 하나의 도메인에 여러 IP주소가 존재할 수 있다.
로드밸런서와 같은 시스템에서 이러한 방식은 많이 사용된다.
도메인 이름으로 접속
ssh의 config 설정에서 bastion의 Hostname을 도메인 이름으로 바꿔준다.
Host bastion
Hostname bastion.learn8run.com
User ec2-user
IdentityFile ~/.ssh/chanho.pem
Host web01
Hostname {web01의 private ip}
User ec2-user
IdentityFile ~/.ssh/chanho.pem
ProxyCommand ssh bastion -W %h:%p
Host web02
Hostname {web02의 private ip}
User ec2-user
IdentityFile ~/.ssh/chanho.pem
ProxyCommand ssh bastion -W %h:%p
Private DNS 준비하기
private dns 이용가능 여부 확인
VPC -> 세부정보 -> DNS 호스트이름/ DNS 확인 활성화 확인
아니라면 작업 -> VPC 설정 편집 -> 활성화
호스팅 영역 생성
Route 53 -> 호스팅영역 -> 생성
- 유형 : 프라이빗 호스팅 영역 선택
- 연결하려는 VPC 선택
EC2 정보 추가
ec2의 정보들을 private dns에 추가한다.
만들어진 호스팅영역에 레코드를 EC2 들의 정보를 추가해준다.
public dns에 레코드를 추가할 때는 public ip를 사용한 것과는 다르게 private ip를 사용한다.
RDS 정보추가
RDS의 엔드포인트도 등록해준다.
레코드 유형이 다름에 유의한다.
작동확인
점프서버에서 nslookup 하여 확인할 수 있다.
rds에 ip 주소가 할당되는데 이는 RDS 내부 시스템에 의해서 변경될 수 있다. 엔드포인트는 변경되지 않아서 문제가 되진 않는다.
config의 private ip도 내부 도메인으로 바꿔준다.
Host bastion
Hostname bastion.learn8run.com
User ec2-user
IdentityFile ~/.ssh/chanho.pem
Host web01
Hostname web01.home
User ec2-user
IdentityFile ~/.ssh/chanho.pem
ProxyCommand ssh bastion -W %h:%p
Host web02
Hostname web02.home
User ec2-user
IdentityFile ~/.ssh/chanho.pem
ProxyCommand ssh bastion -W %h:%p
SSL 서버 인증서
SSL 인증서를 발행하고 취득한 SSL 서버 인증서를 이용해서 HTTPS용 로드 밸런서 리스너를 생성하고 HTTPS 통신을 확인해보자.
SSL 서버 인증서 발행하기
Certificate Manager -> 인증서 요청
- 도메인 이름은 실제 브라우저에서 입력하는 도메인이다.
발행 요청을 하면 검증대기 상태가 되고, 수분이 지나면 발급이된다.
다음으로는 도메인을 검증한다.
DNS레코드를 생성해준다
로드 밸런서에 리스너 추가
발행한 서버 인증서를 이용해서 HTTPS를 받는 리스너를 로드밸런서에 추가해준다.
EC2 -> 로드 밸런서 -> 리스너 추가
HTTPS를 프로토콜로 설정하고 대상그룹을 설정해준다.
SSL인증서를 선택한다.