-
[AWS] #3 VPC 구축 실습 2(Bastion Host, NAT Gateway)Software engineer/Infra 2023. 5. 18. 01:42

오늘은 지난 글에 이어서 Bastion Host, NAT Gateway를 구성해보려 합니다.
실습 순서
- Public EC2(Bastion Host)/ Private EC2(MySQL 설치용) 생성
- Bastion Host를 통해 Private EC2 접속
- NAT Gateway 만들기
- NAT Gateway로 Private EC2에 MySQL 설치
실습을 원활하게 진행하기위해 기존 생성했던 public subnet NACL의 인바운드, 아웃바운드 설정을 수정하고 진행했습니다.


Bastion Host(바스천 호스트)란
보안을 강화하기 위해 외부에서 내부 네트워크에 접근할 수 있는 접근 지점으로 사용되는 서버입니다.
일반적으로 Bastion Host는 공개적으로 액세스 가능한 공용 네트워크에 배치되며, 보안 그룹 등의 보안 설정을 통해 액세스 제어가 엄격하게 관리됩니다. 내부 네트워크에 직접 액세스 하기 위해 Bastion Host를 통해 SSH 또는 RDP와 같은 리모트 액세스 프로토콜을 사용할 수 있습니다.
Bastion Host는 외부에서 내부 리소스에 접근해야 할 개발자나 관리자와 같은 인원에게 제한된 액세스를 허용하여 보안을 강화합니다. 이를 통해 내부 네트워크에 직접적인 접근을 제한하고, 인증 및 권한 부여 등의 보안 정책을 적용할 수 있습니다.
또한, Bastion Host는 일반적으로 SSH 터널링 등을 통해 다른 보안 요구 사항에 따라 내부 서버에 접근하는 역할을 수행할 수도 있습니다. 이를 통해 외부 네트워크에서 안전한 통신을 확립하고, 보안을 강화한 상태로 내부 리소스를 관리할 수 있습니다.
요약하자면, Bastion Host는 외부에서 내부 네트워크로의 접근을 제한하고 보안을 강화하기 위해 사용되는 중요한 보안 요소입니다.Public EC2(Bastion Host)/ Private EC2(MySQL 설치용) 생성
Bastion Host 만들기

EC2 인스턴스 생성을 시작합니다. 이름을 지정해줍니다.
이후 키 페어를 선택하고 네트워크 편집으로 넘어가도록 합니다.

Bastion Host는 public subnet 상에 생성해야 합니다. 그리고 ssh 접속을 위해 보안그룹을 생성합니다.
Private EC2 만들기

이름을 지정해 줍니다.



이번엔 private subnet을 선택합니다.
Private EC2에서는 Bastion Host만을 통해 통신요청을 받도록 하기 위해 소스유형을 사용자 지정으로 선택 후 Bastion Host의 보안 그룹을 선택합니다. 또한 ping 요청을 허가하기 위해 모든 ICMP를 추가하고 마찬가지로 Bastion Host 보안 그룹을 추가합니다.
이렇게 해서 Bastion Host EC2, Private EC2 를 모두 생성하고, 접속 테스트를 진행합니다.
Bastion Host를 통해 Private EC2 접속
Bastion Host 접속 테스트

Bastion Host 에서 Private EC2로 ping 테스트

Bastion Host EC2에 접속한 상태에서 Private EC2의 프라이빗 IPv4 주소로 ping을 요청합니다.
이후 packet 결과를 확인합니다!
Bastion Host를 통해서 Private EC2 직접 접속 테스트
Bation Host를 통해 Private EC2로 접속하는 방법은 매우 다양합니다. Bastion Host EC2 서버에 Private EC2 키 페어 파일을 scp를 통해 업로드 후 해당 파일을 통해 ssh 접속하는 방법도 있을 수 있고, ProxyCommand를 통해 한번에 접속하는 방법도 있습니다.
저는 ProxyCommand를 통해 접속 해보겠습니다.
ProxyCommand란?
Proxy command는 SSH 클라이언트에서 SSH 연결을 전달하기 위해 중간 호스트를 통해 터널링 하는 기능으로, 원격 서버에 직접 접근하지 않고 다른 호스트를 거쳐 접근할 때 사용됩니다.
ProxyCommand를 통해 Bastion Host를 거쳐 Private EC2로 성공적으로 접속하는 모습입니다.

NAT Gateway란
프라이빗 서브넷 내의 인스턴스가 인터넷과 통신할 수 있도록 하는 AWS의 관리형 네트워크 주소 변환 서비스입니다.
NAT Gateway는 VPC 내에 배포되며, 프라이빗 서브넷의 인스턴스가 인터넷에 대한 아웃바운드 통신을 요청할 때 NAT Gateway를 통해 트래픽이 변환됩니다. 이를 통해 인스턴스는 공인 IP 주소를 직접 할당받지 않고도 인터넷에 연결될 수 있습니다.
NAT Gateway는 보안 그룹을 통해 구성되며, 인스턴스에서 나가는 트래픽에 대한 필터링 및 보안 설정을 제공합니다. 또한, 자동으로 확장되며 고가용성을 제공하여 가용 영역 간의 장애 발생 시에도 지속적인 인터넷 연결을 보장합니다.
NAT Gateway는 AWS에서 제공하는 완전 관리형 서비스이므로 별도의 관리나 설정이 필요하지 않습니다. 프라이빗 서브넷 내의 인스턴스가 인터넷 리소스와 안전하게 통신할 수 있도록 하는 데 사용되며, 주로 아웃바운드 통신에 활용됩니다.NAT Gateway 만들기

NAT 게이트웨이 생성으로 들어갑니다.

이름을 지정합니다. NAT Gateway는 인터넷 통신이 가능해야 하므로 당연히 public subnet을 선택합니다.
이후 "탄력적 IP 할당"을 통해 IP를 할당을 받고 NAT Gateway를 생성합니다.
기존 실습에서 생성했던 private-route-table에서 라우팅 편집을 진행합니다.

위 그림처럼 대상은 모든 IP로 지정하고 모든 IP는 NAT Gateway를 통하도록 선택합니다.
이렇게 변경 사항 저장을 하게 되면 Private EC2에서도 NAT Gateway를 통해 인터넷 통신이 가능합니다!
NAT Gateway로 Private EC2에 MySQL 설치

wget https://dev.mysql.com/get/mysql80-community-release-el6-7.noarch.rpm
sudo yum install -y mysql80-community-release-el6-7.noarch.rpm이처럼 NAT Gateway를 통해 Private EC2 에서도 인터넷 통신을 통해 MySQL 설치가 완료되는 것까지 확인했습니다!
위 실습은 유튜브 'AWS강의실'의 VPC 강좌 2편을 보고 진행했습니다.
참고: https://www.youtube.com/watch?v=lqnncuQgz28&t=129s&ab_channel=AWS%EA%B0%95%EC%9D%98%EC%8B%A4
'Software engineer > Infra' 카테고리의 다른 글
[CI/CD] Django + GithubAction + EC2 (1) 2023.06.01 [AWS] #5 VPC 구축 실습 4(ELB) (2) 2023.05.19 [AWS] #4 VPC 구축 실습 3(Auto Scaling) (1) 2023.05.19 [AWS] #2 VPC 구축 실습 1 (2) 2023.05.17 [AWS] #1 3 계층 구조, VPC (3) 2023.05.16