본문 바로가기
개발 - Coding/Infra

네트워크 영역에서의 NAT와 AWS NAT Gateway: 2편

by dev_jinyeong 2023. 6. 20.

AWS NAT Gateway

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-nat-gateway.html

 

NAT 게이트웨이 - Amazon Virtual Private Cloud

보조 IPv4 주소는 선택 사항이며 NAT 게이트웨이를 사용하는 워크로드가 단일 대상(동일한 대상 IP, 대상 포트 및 프로토콜)에 대한 동시 연결 55,000개를 초과하는 경우 지정하거나 할당해야 합니다

docs.aws.amazon.com

AWS NAT Gateway는 AWS 클라우드 환경에서 NAT 서비스를 제공해주는 게이트웨이입니다.

일반적으로 게이트웨이는 외부 인터넷과 연결해주는 엔드포인트를 지칭하곤 하는데요.

AWS NAT Gateway는 private subnet에 있는 리소스가 외부 인터넷과 연결될 수 있도록 하는 게이트웨이 역할을 합니다.

그런데 AWS NAT Gateway는 아웃바운드 트래픽에 대한 응답 트래픽은 응답하지만, 이외의 경우 트래픽을 모두 무시합니다.

트래픽이 나갈 수만 있는 게이트웨이인 것입니다.

이런 서비스가 왜 필요할까요? 그리고 작동 원리는 무엇일까요?

 

AWS 아키텍처 예시와 NAT Gateway 활용

AWS 클라우드 아키텍처에서 외부와 통신하는 리소스는 public subnet에 위치시키고, 외부와 직접적으로 통신하지 않는 리소스는 private subnet에 위치시킵니다.

이러한 아키텍처를 통해서 얻을 수 있는 것은 두 가지입니다.

  1. 보안상 더 안전한 형태입니다.
  2. 리소스 간 관계가 명확해집니다.

위와 같은 AWS 상에 구축된 간단한 아키텍처가 있다고 해보겠습니다.

이 경우에 웹 서버 인스턴스는 외부 인터넷과 인터넷 게이트웨이를 통해서 트래픽을 수신할 수 있어야 합니다.

그런데 DB와 같은 리소스는 외부 인터넷과 직접적으로 트래픽을 송수신할 필요 없이, 웹 서버와 상호작용하면 됩니다.

그러므로 subnet의 라우팅 테이블을 외부로 향하지 않도록 하여 애초에 외부와 직접 상호작용할 수 없도록 할 수 있습니다.

이렇게 구성하면 private resource의 보안 면에서 더 유리합니다.

 

두 번째로 리소스의 역할이 명확해집니다.

Web Server 역할을 하는 인스턴스는 트래픽을 받아서 처리하는 역할만 수행하고, DB는 웹 서버로부터 요청을 받아 데이터베이스 역할만 수행하면 됩니다.

만약 모든 리소스가 public 영역에 있다면 모든 리소스가 엔드포인트가 될 수 있기 때문에 역할에 맞게 설정되지 않은 것이고 맡은 역할 이상의 권한을 가지고 있는 것입니다.

NAT 게이트웨이의 필요성

그런데, 여기서 문제가 있습니다.

private resource에서 쓰이는 프레임워크나 라이브러리가 업데이트가 필요하거나, 새로운 데이터를 받아야 한다면?

 

이 경우에는 외부 인터넷과 연결되어야 하지만, private subnet의 라우팅 테이블에는 외부 인터넷으로 갈 수 있는 라우팅이 없습니다.

이 때, AWS NAT Gateway를 활용할 수 있습니다.

AWS NAT Gateway의 경우 아웃바운드 트래픽과 아웃바운드 트래픽에 대한 인바운드 트래픽만 허용합니다.

따라서 프레임워크나 라이브러리를 다운로드 할 수 있고, 데이터도 받아올 수 있습니다.

 

다만, 이를 위해서 NAT Gateway는 public 영역에 속해 있어야 하고, Elastic IP를 지정해주어야 한다는 제약 사항이 있습니다.

 NAT 게이트웨이 동작 방식과 SNAT와 DNAT

먼저 NAT 기술은 SNAT와 DNAT 두 가지로 나뉩니다.

  • SNAT(Source NAT) - 출발지 주소를 변경하는 NAT
  • DNAT(Destination NAT) - 도착지 주소를 변경하는 NAT

두 가지를 그래픽으로 알아보면 다음과 같습니다.

DNAT는 SDAT와 반대입니다.

SNAT와 DNAT를 이해했다면 AWS NAT Gateway의 동작 방식을 쉽게 이해할 수 있습니다.

SNAT만 지원하고 DNAT를 지원하지 않으면 아웃바운드 트래픽과 아웃바운드 트래픽에 대한 응답 인바운드 트래픽 외의 다른 트래픽을 제외할 수 있습니다.

이를 통해 private subnet에 위치한 리소스에 대해서 외부 인터넷으로부터 필요한 정보를 요청할 수 있고, 자유롭게 아키텍처를 구성할 수 있습니다.