만자의 개발일지

[AWS/EC2] BastionHost와 NAT gateway로 Private Instance에 DB설치하기 본문

AWS

[AWS/EC2] BastionHost와 NAT gateway로 Private Instance에 DB설치하기

박만자 2021. 9. 13. 21:16

들어가기 앞서...

이번 포스트에서는 BastionHost가 무엇이고 어떻게 Public IP가 없는 Private Instance로 접속하는지 ping도 던져보고 Security group 설정과 마지막으로 NAT gateway를 이용하여 Private Instance에 Database까지 설치해보도록 하겠습니다.

 

BastionHost

BastionHost란 Public 네트워크에서 Private 네트워크로 접속하게 해주는 통로(방화벽) 역할을 해주는 서버입니다.

BastionHost는 인스턴스 이며 AWS VPC의 Public Subnet에 존재해야 합니다.

DB 인스턴스는 Private 서브넷에 존재해야하는데, DB 인스턴스는 공개적으로 액세스 할 수 없기 떄문이 이 BastionHost라는 서버를 거쳐서 액세스해야 합니다.

 

BastionHost의 Security Group을 DB 인스턴스의 Security Group에서 SSH에 액세스하기위한 소스를 BastionHost의 Security Group을 주게 되면 BastionHost를 통해서만 접속이 가능하게 됩니다.

 

위 아키텍처를 토대로 만들어 볼껀데 VPC 구성은 건너 뛰도록 하겠습니다.

 

일단 BastionHost로 쓰일 EC2인스턴스가 필요합니다. EC2인스턴스를 하나 만들어 보도록 합시다.

AMI는 아마존 리눅스를 선택해줍니다.

 

위에서 말씀드렸다시피 BastionHost는 Public 서브넷에 있어야 한다했죠? 서브넷은 Public 서브넷으로 지정해주시고 Public IP 자동 할당을 활성화 시켜 줍니다.

 

4.Add Storage는 건들지말고 넘깁니다. 테스트용이기 때문에 딱히 만질 필요가 없습니다.

Name 태그는 BastionServer로 지정해 줍니다.(원하시는 걸로 바꾸셔도 상관 없습니다.)

BastionHost의 Security Group 입니다. ICMP를 열어줘야 이따가 ping 명령어를 사용하실 수 있습니다.

 

BastionHost의 키 페어를 지정해줍니다.

 

 

이제 다음으로 Private 서브넷에 DB Server가 될 EC2인스턴스를 하나 더 만들어보도록 하겠습니다.

서브넷은 Private으로 지정해주시고 Public IP는 할당할 필요가 없기 때문에 Public IP 자동할당은 비활성화 해줍니다.

Name 태그는 DBServer로 해주도록 하겠습니다.

 

DBServer의 보안그룹입니다. 아까 BastionServer의 보안그룹은 Source를 Defualt 값으로 넣어줬는데 DBServer는 BastionServer의 보안그룹으로 지정해 주도록 하겠습니다. 이제 BastionServer의 보안그룹을 가진 인스턴스만 DBServer로 접속할 수 있게됩니다.

 

DB서버의 키 페어를 새로 생성해줍니다.

두 인스턴스가 잘 생성된 것을 볼 수 있습니다.

 

이제 PrivateSubnet과 인터넷을 연결해줄 NAT Gateway를 만들어 봅시다.

VPC에 가시면 왼쪽에 NAT Gateways가 있습니다. 클릭.

 

이름은 ngw로 한다음 서브넷은 두번째 Public 서브넷에다 만들도록 하겠습니다. NAT Gateway기 떄문에 Elastic IP도 새로 할당해줍니다.

 

그 다음 라우트 테이블로 Private Subnet과 연결해 줍니다.

VPC에 인터넷 게이트웨이도 연결해줍니다.

인터넷 게이트웨이는 Public 서브넷과 연결해줍니다.

이제 모든 세팅이 끝났으니 BastionServer에 접속해보도록 합시다.

 

잘 접속되는것을 보실 수 있습니다.

 

그럼 이제 DBServer로 핑을 한 번 보내보도록 합시다. 명령어: ping (DBServer의 Private IP)

 

그 다음 ssh [인스턴스 Private ip]를 입력해줍니다.

잘 접속이 되신 것을 보실 수 있습니다. (포스팅을 나눠서 쓰느라 인스턴스를 실수로 삭제해버려 ip가 위랑 다릅니다.

그래도 방법은 똑같으니 그냥 하도록 하겠습니다.)

 

Private 인스턴스에 접속했으니 Private 인스턴스에서도 BastionHost로 핑이 보내지는지 확인해봐야겠죠?

Public IP, Private IP 둘다 잘 보내지는것을 보실 수 있습니다.(속도차이가 심하군요)

 

자이제 그럼 Private 인스턴스에 DB를 설치해봅시다.

명령어는 sudo yum install -y mysql 입니다.

 

DB까지 잘 설치 되는 것을 확인 하실 수 있습니다. 이상 포스팅 마무리 하도록 하겠습니다.

Comments