← 아티클 목록

NAT 게이트웨이와 프라이빗 서브넷 — 안전하게 외부로 나가기

2027-08-09#cloud#NAT#VPC

DB나 백엔드 서버를 프라이빗 서브넷에 숨겨 두면 보안은 좋지만, apt update나 외부 API 호출처럼 나가는 트래픽이 필요할 때 문제가 생깁니다. 외부에서 들어오는 연결은 막되 안에서 나가는 연결만 허용하고 싶을 때 쓰는 것이 NAT 게이트웨이입니다.

IGW와 NAT, 무엇이 다른가

구분인터넷 게이트웨이(IGW)NAT 게이트웨이
방향양방향(인바운드+아웃바운드)아웃바운드만
대상 서브넷퍼블릭프라이빗
필요한 IP인스턴스에 퍼블릭 IP 필요프라이빗 IP만으로 가능
외부 접근외부에서 직접 접속 가능외부에서 먼저 연결 불가

핵심 차이는 연결을 누가 먼저 시작하느냐입니다. NAT는 내부에서 시작한 연결의 응답만 돌려보내므로, 외부 공격자가 프라이빗 인스턴스로 직접 접속하는 경로가 원천 차단됩니다.

트래픽이 흐르는 경로

프라이빗 서브넷의 서버가 외부로 나갈 때 패킷은 이렇게 흐릅니다.

TEXT
프라이빗 EC2 → 프라이빗 라우팅 테이블(0.0.0.0/0 → NAT) → NAT GW(퍼블릭 서브넷) → IGW → 인터넷

NAT 게이트웨이 자체는 퍼블릭 서브넷에 위치하고 IGW를 통해 나갑니다. 그래서 NAT만 두고 IGW가 없으면 외부로 못 나갑니다.

구성 순서

  1. NAT 게이트웨이를 퍼블릭 서브넷에 생성하고 탄력적 IP(EIP)를 붙입니다. 프라이빗 서브넷에 두면 동작하지 않습니다.
로컬 터미널
aws ec2 create-nat-gateway \
  --subnet-id subnet-public-xxxx \
  --allocation-id eipalloc-xxxx
  1. 프라이빗 서브넷의 라우팅 테이블에 기본 경로를 NAT로 향하게 추가합니다.
로컬 터미널
aws ec2 create-route \
  --route-table-id rtb-private-xxxx \
  --destination-cidr-block 0.0.0.0/0 \
  --nat-gateway-id nat-xxxx
  1. 검증: 프라이빗 인스턴스에서 외부로 나가지는지 확인합니다. 동시에 외부에서 그 인스턴스로 접속이 안 되는지도 봅니다.
로컬 또는 서버
curl -s https://checkip.amazonaws.com   # 나가는 트래픽 확인

이때 보이는 IP는 인스턴스가 아니라 NAT의 EIP입니다. 외부 API 화이트리스트에는 이 IP를 등록합니다.

비용 함정 주의

  • NAT 게이트웨이는 시간당 요금 + 처리 데이터(GB)당 요금이 모두 붙어, 트래픽이 많으면 비용이 빠르게 늘어납니다.
  • 가용영역(AZ)마다 NAT를 따로 두면 안정적이지만 그만큼 비용이 배가됩니다.
  • S3·DynamoDB 같은 AWS 서비스는 VPC 엔드포인트로 NAT를 우회하면 데이터 처리 요금을 아낄 수 있습니다.

요점 정리

  • NAT는 프라이빗 서브넷의 아웃바운드만 허용하고 인바운드는 막습니다.
  • NAT 게이트웨이는 퍼블릭 서브넷에 두고 IGW와 함께 동작합니다.
  • 프라이빗 라우팅 테이블의 0.0.0.0/0 → NAT 경로가 핵심입니다.
  • 외부에서 보는 IP는 NAT의 EIP이며, 비용은 VPC 엔드포인트로 절감합니다.

NAT 게이트웨이와 프라이빗 서브넷을 직접 구성하고 트래픽 경로를 확인하는 실습은 클라우드 트랙에서 회원가입 없이 무료로 할 수 있습니다.