[AWS] VPC, 서브넷, NAT & 인터넷(IGA) 게이트웨이

hyozkim·2021년 5월 13일
0

AWS

목록 보기
1/4
post-thumbnail

들어가면서 👋

일단 AWS에서도 외부의 접속을 통제해야 하는 내부망(DB,instance)이 있고, 외부와 연결이 되어야 하는 외부망이 있다. 쉽게 말해서 내부망을 NAT 게이트웨이와 연결되도록 하고, 외부망은 인터넷 게이트웨이와 연결되게 구성해야 한다.

인터넷 게이트웨이 NAT 게이트웨이 개념을 설명하기 이전에 알아야 하는 개념이 VPN, VPC, 서브넷, 라우팅 테이블 등이 있다. 그래서 VPC, 서브넷, 라우팅 테이블에 대해 먼저 간략한 설명 후 NAT, IGA를 공부하게 된 과정과 구성 방법을 설명하겠다.

VPN

VPN(Virtual Private Network)는 한국어로 '가상사설망'이라고 한다.
같은 망 안에서 네트워크 A, B 분리를 해야 한다고 했을때 인터넷 선공사를 뜯어내고 새로 전용선을 깔아야 할 것이다. 이를 위해 VPN을 사용하게 된다.

VPC

VPC(Virtual Private Cloud)는 AWS 클라우드 내에서 가상 네트워크망을 분리하거나 지정함으로써 관리할 수 있다.

위 그림처럼 만약 VPC가 없다면 각 EC2 네트워크 관리가 무지 복잡해지고 이러한 시스템은 복잡성이 너무나 커서 관리할 수 없는 경지에 이르게 될 겁니다.

하지만 VPC로 네트워크 관리가 된다면 보다 수월하게 EC2 인스턴스의 네트워크 망을 관리하고 각각의 VPC는 완전히 독립된 네트워크로 사용할 수 있게 됩니다.

서브넷

VPC를 만들었다면 이제 서브넷을 만들 수 있다.

서브넷은 VPC를 잘게 쪼개는 작업(?)이다.

서브넷을 나누는 이유는 더 많은 네트워크 망을 만들기 위해서다.

각각의 서브넷은 가용영역이 존재하고 서브넷 안에 RDS, EC2와 같은 인스턴스 리소스를 구성할 수 있다.

라우팅과 라우팅 테이블

네트워크 요청이 발생하면 데이터는 우선 라우터로 향한다.

라우터란 목적지이고 라우팅테이블은 그 목적지로 가는 이정표를 안내해주는 역할이다.

즉, 서브넷A의 라우팅 테이블이 172.31.0.0/16 네트워크 범위를 갖는다고 하면 해당 범위 로컬내에서 찾을 수 있다. 하지만 그 이외 외부로 통신하는 트래픽은 찾을 수 없다.

이때 외부와 통신하기 위해서 인터넷 게이트웨이를 사용한다.

IGA 게이트웨이 vs NAT 게이트웨이

이제 인터넷 게이트웨이NAT 게이트웨이에 대한 공부가 필요했던 상황을 설명하겠다.

외부 채널과 통신을 위해서 인터넷 게이트웨이로 사용하여 해결될 문제가 아닌가? 싶지만 인프라팀이 따로 있지 않고 백엔드 개발자가 모든 서버를 관리,운영하고 있는 상황이었기에 우리는 ECS 서비스를 이용한 배포를 사용하고 있었다.

문제는 ECS 서비스를 이용한 서버 재배포마다 변경되는 IP는 외부채널인 VAN사가 대치해줄 수 없는 귀찮은 작업이다. 따라서 우리는 무조건적으로 고정된 IP를 전달해줘야 했다.

외부 채널과 통신
외부에서 서버 접근은 ELB 로드밸런싱을 통해 외부에서의 접근은 허용하게 구성했다. (운영계 서버와 DB를 모두 내부망)
하지만 펌뱅킹과 같은 송금 업무를 하기위해서는 외부 채널로 아웃바운드 통신이 반드시 필요했다.
이를 위해 인터넷(IGA) 게이트웨이 서브넷에 두는 방식으로 해결이 가능하지만
보안상 안전하지 않다고 판단하여 내부망인 NAT 게이트웨이를 통해 아웃바운드를 구성해야만 했다.

IP가 배포될때마다 변경되는 ECS 구조
ECS 서비스를 사용해서 만든 인스턴스는 내부망에 두고 있습니다.
ECS 서비스를 사용해서 서버를 재배포할때마다 IP가 변경되는 상황이었습니다.
펌뱅킹 VAN사에 방화벽 오픈 요청한 IP는 변경되지 않는 고정 IP이어야 합니다.

👉 해결

  1. 우선 EIP(고정 IP)를 만들기 위해 NAT 게이트웨이를 생성했다.

  2. NAT 게이트웨이를 사용하여 생성된 EIP가 대표 IP가 되어 외부채널인 VAN사와 통신이 가능하게 구성했다.

NAT 게이트웨이는 프라이빗 서브넷이 인터넷과 통신하기 위한 아웃바운드 인스턴스이다.

프라이빗 네트워크가 외부에서 요청되는 인바운드는 필요없더라도 인스턴스의 펌웨어 혹은 주기적인 업데이트 혹은 외부채널과 통신이 필요하여 아웃바운드 트래픽만 허용해야 하는 경우가 있다.

이때 퍼블릭 서브넷 상에서 동작하는 NAT게이트웨이는 프라이빗 서브넷에서 외부로 요청하는 아웃받운드 트래픽을 받아 인터넷 게이트웨이와 연결해준다.

AWS Docs 설명
1. 프라이빗 서브넷에 인스턴스를 둔다.
2. 인터넷 트래픽이 NAT 게이트 웨이를 가르키도록 프라이빗 서브넷 라우팅 테이블 업데이트한다.
3. NAT 게이트웨이가 인터넷에 엑세스할 수 있도록 하려면 NAT 게이트웨이가 속한 서브넷과 연결된 라우팅 테이블에 이터넷 게이트웨이를 가리키는 경로가 포함되어야 한다.
참고 - AWS NAT 구성 Docs

AWS가 시키는대로 했고 위와 같이 구성을 하니 생성된 EIP가 대표 IP가 되어 외부채널과 통신할 수 있었다.

profile
차근차근 develog

0개의 댓글