NAT 게이트웨이 및 프라이빗 서브넷
관리형 NAT 게이트웨이를 사용하여 프라이빗 서브넷의 리소스가 인터넷에 연결되면서 외부에서 직접 접근되지는 않도록 구성합니다.
NAT 게이트웨이 및 프라이빗 서브넷은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
프라이빗 Subnet의 인터넷 연결 문제
프라이빗 subnets의 리소스에는 프라이빗 IP 주소만 있고 Internet Gateway로 가는 route가 없으므로 인터넷에 대한 아웃바운드 연결을 시작할 수 없습니다. 하지만 OS 패치를 다운로드하거나, Docker 이미지를 가져오거나, 타사 API를 호출하거나, 소프트웨어를 업데이트하기 위해 인터넷에 연결해야 하는 경우가 많습니다. 해결 방법은 인터넷 액세스 권한이 있고 NAT (Network Address Translation)을 수행하는 장치를 통해 프라이빗 subnet 트래픽을 라우팅하여 프라이빗 IP를 공용 IP 뒤에 숨기는 것입니다. AWS는 관리형 NAT Gateway와 자체 관리형 NAT Instance(레거시)라는 두 가지 옵션을 제공합니다.
NAT Gateway: 관리형 아웃바운드 NAT
NAT Gateway는 프라이빗 subnets의 인스턴스가 인터넷으로 아웃바운드 연결을 시작할 수 있도록 하면서 요청하지 않은 인바운드 트래픽은 차단하는 완전 관리형 고가용성 서비스입니다. 공용 subnet에 배치되며 Elastic IP를 갖고 최대 100Gbps 대역폭까지 자동으로 확장됩니다. 기본 인프라를 패치, 확장 또는 관리할 필요가 전혀 없습니다. NAT Gateway는 아웃바운드 패킷의 프라이빗 소스 IP를 자체 EIP로 변환한 다음 응답을 원래 프라이빗 IP로 반환합니다.
# Create a NAT Gateway in the public subnet
aws ec2 allocate-address --domain vpc # Get an EIP
aws ec2 create-nat-gateway \
--subnet-id subnet-public-1a \
--allocation-id eipalloc-12345678 \
--tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=nat-gw-1a}]'프라이빗 서브넷 트래픽을 NAT를 통해 라우팅하기
NAT Gateway를 생성한 후 프라이빗 서브넷의 라우팅 테이블에 경로를 추가합니다. 대상 0.0.0.0/0 → NAT Gateway ID. 이렇게 하면 프라이빗 서브넷 인스턴스에서 인터넷으로 향하는 모든 트래픽이 NAT Gateway로 이동하고, NAT Gateway가 이를 Internet Gateway를 통해 인터넷으로 전달합니다. 라우팅 테이블에는 내부 트래픽을 위한 로컬 VPC 경로(예: 10.0.0.0/16 → local)도 여전히 포함됩니다. 이 경로 항목이 없으면 NAT Gateway를 배포했더라도 프라이빗 서브넷 인스턴스는 인터넷에 액세스할 수 없습니다.
# Add route in private subnet's route table pointing to NAT gateway
aws ec2 create-route \
--route-table-id rtb-private-app-1a \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id nat-12345678다중 AZ NAT Gateway 아키텍처
NAT Gateway는 AZ별로 동작합니다. 즉, 동일한 AZ의 서브넷에서 발생한 트래픽만 처리합니다. 고가용성을 위해 AZ마다 NAT Gateway를 하나씩 배포하고 AZ별 프라이빗 라우팅 테이블을 생성합니다. AZ-a의 프라이빗 라우팅 테이블은 0.0.0.0/0을 AZ-a의 NAT-GW로 라우팅하고, AZ-b의 프라이빗 라우팅 테이블은 AZ-b의 NAT-GW로 라우팅합니다. 이렇게 하면 AZ 간 데이터 전송 요금을 피할 수 있으며, AZ-a에 장애가 발생해도 자체 NAT를 사용하는 AZ-b의 인스턴스는 계속 인터넷에 액세스할 수 있습니다.
# Architecture: two NAT gateways, two private route tables
# NAT-GW-1a in subnet-public-1a --> rtb-private-1a
# NAT-GW-1b in subnet-public-1b --> rtb-private-1b
# Associate private-1a subnets with rtb-private-1a (NAT-GW-1a)
aws ec2 associate-route-table \
--route-table-id rtb-private-1a \
--subnet-id subnet-private-app-1aNAT Gateway와 NAT Instance 비교
NAT Instance는 NAT AMI를 실행하는 자체 관리형 EC2 인스턴스로, NAT Gateway가 존재하기 전에 사용되던 기존 방식입니다. NAT Instance를 사용하려면 다음 작업을 직접 수행해야 합니다. EC2 인스턴스에서 소스/대상 검사를 비활성화하고, 대역폭과 확장을 관리하며, OS에 패치를 적용하고, 장애를 처리해야 합니다. NAT Instance는 매우 낮은 대역폭의 사용 사례에서는 더 저렴하며 배스천 호스트로 사용할 수도 있습니다. NAT Gateway는 프로덕션 환경에 권장되는 선택지입니다. 완전 관리형이고 자동으로 확장되며, AZ 내에서 99.99% 가용성 SLA를 제공하고 패치를 적용할 필요가 없습니다. 시험에서는 역사적으로 이 비교를 자주 출제해 왔습니다.
# For NAT Instance: disable source/dest check (required!)
aws ec2 modify-instance-attribute \
--instance-id i-nat-instance-id \
--no-source-dest-checkNAT Gateway 요금
NAT Gateway 요금은 두 가지로 구성됩니다. 하나는 NAT Gateway당 시간당 요금(us-east-1 기준 약 시간당 $0.045, 월 약 $32)이고, 다른 하나는 GB당 데이터 처리 요금(us-east-1 기준 약 $0.045/GB)입니다. NAT를 통해 대량의 데이터를 전송하는 워크로드(예: 대형 컨테이너 이미지 가져오기, 대량 다운로드)에서는 데이터 처리 비용이 더 커질 수 있습니다. 다음과 같은 방법으로 NAT 비용을 최적화할 수 있습니다. S3 및 DynamoDB 트래픽을 VPC Gateway Endpoint를 통해 라우팅하고(NAT를 완전히 우회하며 무료), AWS API 호출을 NAT 대신 VPC Interface Endpoint를 통해 라우팅합니다.
RDS를 위한 프라이빗 서브넷 설계
프라이빗 서브넷의 데이터베이스 인스턴스는 절대 NAT Gateway를 통해 라우팅해서는 안 됩니다. 인터넷에 연결을 시작할 이유가 없기 때문입니다. 데이터베이스에는 애플리케이션 계층(VPC 내부)에서 들어오는 연결을 수신하고, 필요한 경우 VPC 엔드포인트를 통해 S3와 같은 AWS 서비스에 연결하여 내보내기 또는 가져오기를 수행하는 기능만 필요합니다. 데이터베이스 패치와 업데이트의 경우 RDS는 관리형 서비스이므로 OS 패치를 직접 적용하지 않습니다. EC2에서 자체 관리하는 데이터베이스에는 Systems Manager Patch Manager를 사용하면 됩니다. SSM VPC 엔드포인트를 구성하면 인터넷에 액세스하지 않고도 SSM을 통해 패치를 적용할 수 있습니다.
NAT Gateway와 보안
NAT Gateway는 상태를 추적하는 아웃바운드 전용 NAT를 제공합니다. 즉, 시작된 아웃바운드 연결과 그 응답은 허용하지만, 요청하지 않은 모든 인바운드 트래픽은 차단합니다. NAT Gateway는 방화벽이 아니므로 트래픽 내용을 검사하거나 필터링하지 않습니다. 아웃바운드 트래픽을 필터링하려면(예: 프라이빗 서브넷에서 특정 대상 도메인이나 IP로만의 연결 허용) 추가 제어 기능이 필요합니다. VPC에 AWS Network Firewall을 배포하거나, Gateway Load Balancer 뒤에 서드 파티 방화벽 어플라이언스를 배치해야 합니다. NAT 사용 여부와 관계없이 프라이빗 서브넷의 인스턴스에는 보안 그룹과 NACL이 계속 적용됩니다.
프라이빗 NAT Gateway
인터넷 액세스를 위해 EIP를 사용하는 퍼블릭 NAT Gateway 외에도 AWS는 EIP가 없는 프라이빗 NAT Gateway를 지원합니다. 프라이빗 NAT Gateway는 CIDR 범위가 겹치는 VPC 간 또는 VPC와 온프레미스 네트워크 간의 트래픽에서 프라이빗 IP 주소를 변환하는 데 사용됩니다. 예를 들어 VPC-A(10.0.0.0/16)가 동일하게 10.0.0.0/16을 사용하는 온프레미스 네트워크와 통신해야 한다면, VPC-A의 프라이빗 NAT Gateway가 소스 IP를 겹치지 않는 범위로 변환한 후 Transit Gateway를 통해 온프레미스로 라우팅합니다.
NAT Gateway 지표 모니터링
CloudWatch 지표를 통해 NAT Gateway의 상태와 성능을 모니터링합니다. 주요 지표는 다음과 같습니다. ActiveConnectionCount(NAT를 통한 현재 활성 TCP 연결 수), BytesInFromDestination / BytesInFromSource(양방향 데이터 전송량), PacketDropCount(삭제된 패킷 수로, 대역폭 제한이나 오류를 나타냄), ErrorPortAllocation(NAT의 포트 할당이 소진된 상태로, 연결이 너무 많아 포트가 고갈되었을 가능성을 나타냄)입니다. 각 NAT Gateway는 고유한 대상별로 최대 55,000개의 동시 연결을 지원하며, 이 한도를 초과하면 연결이 삭제될 수 있습니다.
# Get NAT Gateway active connection count
aws cloudwatch get-metric-statistics \
--namespace AWS/NATGateway \
--metric-name ActiveConnectionCount \
--dimensions Name=NatGatewayId,Value=nat-12345678 \
--start-time 2024-01-01T00:00:00Z \
--end-time 2024-01-01T01:00:00Z \
--period 300 --statistics Maximum프라이빗 서브넷에 NAT가 필요하지 않은 경우
모든 프라이빗 서브넷 워크로드에 NAT Gateway가 필요한 것은 아닙니다. 액세스 패턴을 검토해 보십시오. 인스턴스가 다른 VPC 리소스 및 VPC 엔드포인트를 통해 액세스할 수 있는 AWS 서비스(S3, DynamoDB, SSM, ECR, Secrets Manager)와만 통신하면 NAT Gateway를 완전히 제거할 수 있습니다. 그러면 AZ당 월 약 $32와 데이터 처리 요금을 절약할 수 있습니다. 이는 모든 AWS 서비스 액세스에 VPC Interface Endpoint를 사용하는 완전한 프라이빗 마이크로서비스에 이상적인 방식입니다. 인스턴스가 호출하는 각 서비스를 평가하고, 무료 Gateway Endpoint 또는 유료 Interface Endpoint로 NAT를 대체할 수 있는지 확인하십시오.
빠른 확인
이 단원에서 배운 AWS Solutions Architect (SAA-C03) 개념을 테스트해 보십시오.
단원 요약
이 단원에서는 다음 내용을 배웠습니다. NAT Gateway는 프라이빗 IP를 Elastic IP로 변환하여 프라이빗 서브넷 인스턴스가 아웃바운드 인터넷에 액세스할 수 있도록 합니다. 또한 프라이빗 서브넷 라우팅 테이블에 NAT Gateway를 가리키는 0.0.0.0/0 경로를 추가해야 합니다. 그리고 고가용성을 확보하고 AZ 간 데이터 요금을 피하려면 AZ마다 NAT Gateway를 하나씩 배포해야 합니다. 다음 단원에서는 계층화된 VPC 방어를 위해 Network ACL과 보안 그룹을 비교합니다.
자주 묻는 질문
“NAT 게이트웨이 및 프라이빗 서브넷” 강의는 무료인가요?
네 — “NAT 게이트웨이 및 프라이빗 서브넷” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“NAT 게이트웨이 및 프라이빗 서브넷”에서 뭘 배우나요?
관리형 NAT 게이트웨이를 사용하여 프라이빗 서브넷의 리소스가 인터넷에 연결되면서 외부에서 직접 접근되지는 않도록 구성합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“NAT 게이트웨이 및 프라이빗 서브넷” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- VPC 아키텍처 및 CIDR 블록
- 인터넷 게이트웨이 및 라우팅 테이블
- NAT 게이트웨이 및 프라이빗 서브넷
- 네트워크 ACL과 보안 그룹 비교