본문 바로가기

About/Cloud

[AWS] VPC NAT Gateway 구성하기

AWS에서 NAT Gateway란?

NAT Gateway

NAT 게이트웨이는 NAT(Network Address Translation, 네트워크 주소 변환) 서비스입니다. 프라이빗 서브넷의 인스턴스가 VPC 외부의 서비스에 연결할 수 있지만 외부 서비스에서 이러한 인스턴스와의 연결을 시작할 수 없도록 NAT 게이트웨이를 사용할 수 있습니다. 

즉, 외부 서비스에서 프라이빗 서브넷의 인스턴스로 접근할 수 없게 하되, 프라이빗 서브넷의 인스턴스에서는 외부 서비스로 접근할 수 있게 해주는 서비스 입니다.

AWS에서 NAT Gateway 구성하기

위의 그림과 같이 VPC와 인스턴스들을 구성했다고 가정해보겠습니다. 우선 AWS 관리자는 Bastion Host를 통해 Private Subnet으로 접근할 수 있습니다. 구성이 필요한 경우 다음 포스팅을 참고하세요.

2022.03.15 - [About/Cloud] - [AWS] VPC Bastion Host 구성하기(Private Subnet 접근)

하지만 NAT Gateway가 없는 경우 Private Subnet에서는 외부 서비스 접근이 불가능합니다. (예를 들어 MySQL를 설치파일을 다운로드하는 것이 불가능)

Private Subnet의 인스턴스에서 mysql 다운로드(NAT 적용 전)

NAT Gateway 생성

AWS Management Console에 접속하여 VPC 서비스에서 NAT 게이트웨이를 선택합니다.

NAT 게이트웨이 생성 버튼을 통해 NAT 게이트웨이를 생성합니다. 구성 설정 정보는 다음과 같습니다.

설정 내용
이름 myNAT(원하는 이름으로 설정)
서브넷(중요) 사용하고자 하는 VPC의 Public Subnet
연결 유형 퍼블릭
탄력적 IP 할당 탄력적 IP 할당

NAT 게이트웨이는 Private Subnet과 외부와의 통신 매개체 이기 때문에 외부에 접근할 수 있어야 하기 때문에 서브넷을 꼭 Public Subnet으로 할당하여야 합니다.

Private Subnet의 라우팅 테이블 수정

NAT 게이트웨이를 생성했다고, Private Subnet에서 외부로 접근할 수 있는 것은 아닙니다. Private Subnet의 라우팅 테이블의 설정을 변경하여야 합니다.

서브넷에서 Private Subnet의 라우팅 테이블을 보면 다음과 같이 내부 트래픽에 대해서만 local로 보내라는 테이블만 설정되어 있을 것입니다.

라우팅 추가를 통해 다음 내용을 추가합니다. 0.0.0.0/0 즉 모든 패킷을 nat로 보내라는 테이블을 추가합니다. 이렇게 설정하면 내부가 아닌 외부로 향하는 트래픽은 모두 NAT Gateway로 보내지도록 설정됩니다. 

설정 후에는 yum을 통해 mysql이 다운로드 되는 것을 확인할 수 있습니다.

NAT를 통해 외부 서비스와 접근이 가능해짐

통신 과정을 그림으로 나타내면 다음과 같습니다. Private Subnet에서 Public Subnet에 존재하는 NAT를 통해 외부 인터넷으로 연결된 것입니다.


AWS에서 NAT Gateway를 사용해야 하는 이유와 설정하는 방법에 대해 알아보았습니다.