1. 인터넷 게이트웨이(Internet Gateway)
- VPC와 외부 인터넷 간의 통신을 가능하게 하는 논리적 연결 통로 (VPC 당 IGW 하나)
- 주요 기능
- 인터넷 접속 허용: VPC 내부 자원이 인터넷에 연결되거나, 외부에서 VPC 내부(주로 ALB나 Public EC2)로 접속할 수 있게
- 주소 변환(NAT): 인스턴스의 사설 IP와 공인 IP를 1:1로 매핑하여 트래픽을 중계함
- 설정 값 (매칭)
- Target: 라우팅 테이블(Route Table)에서 0.0.0.0/0의 대상(Target)을 igw-xxxxxxxx로 지정하여 경로를 생성
- VPC 연결: 하나의 IGW는 하나의 VPC에만 연결(Attach)할 수 있음
- 퍼블릭 서브넷이 외부 트래픽을 받기 위해서는 인터넷게이트 웨이 연결이 되어 있어야 함 (Inbound)
- 퍼블릭 서브넷이 외부에 응답을 보내기 위해서는 라우팅테이블을 생성하여 0.0.0.0/0 일 때 igw를 찾아갈 수 있도록 함(Outbound)
2. NAT 게이트웨이
- 외부 인터넷에서 서브넷으로 접근할 수는 없지만 서브넷에서 외부 인터넷으로 접근할 수 있게 해주는 장치
(서브넷 당 NAT 게이트웨이 하나)
=> ‘서브넷 → 외부 인터넷’의 방향으로만 통신이 가능
=> 서브넷에 포함된 EC2 인스턴스에서 외부 API(ex. 날씨 API, OpenAI API 등)를 호출하거나 외부 라이브러리 설치 시 등
- NAT 게이트웨이는 퍼블릭 서브넷에 연결 / 프라이빗 서브넷의 라우팅 테이블은 NAT 게이트웨이를 연결


** 트래픽 체인 **
[프라이빗 EC2] → (라우팅 테이블: NAT행) → [NAT 게이트웨이] → (퍼블릭 라우팅 테이블: IGW행) → [인터넷 게이트웨이] → [외부 인터넷]
# 헷갈리는거 정리
1. private subnet은 어떻게 연결해서 들어가는가? aws 에서도 UI로 연결되지 않음
- public subnet을 통해 접근 가능 (동일 vpc 면 통신가능하기 때문)
step1. 퍼블릭 서버로 키 복사
- 로컬(내 컴)에 있는 키를 퍼블릭 서버로 복사해야 그 안에서 다시 프라이빗 서버로 들어갈 수 있음
- 파워 쉘 실행 후 아래 script 실행
* 사용자 계정은 os 마다 다름
Ubuntu: ubuntu
Amazon Linux 2 / 2023: ec2-user
Debian: admin
# 내 컴퓨터 파워쉘에서 실행
scp -i "public-server.pem" "web-pri-server.pem" ec2-user@<퍼블릭_서버_공인IP>:~/
step2. public ec2 접속(AWS UI 또는 파워쉘에 이어서 script 실행) 후 private ec2로 접속
# 1. 퍼블릭 서버 접속
ssh -i "public-server.pem" ec2-user@<퍼블릭_서버_공인IP>
# 파일 권한을 '나만 읽기 가능'으로 변경
chmod 400 <프라이빗_서버_사설IP>
# 2. 퍼블릭 서버 안에서 프라이빗 서버로 접속 (전달받은 키 사용)
ssh -i "web-pri-server.pem" ec2-user@<프라이빗_서버_사설IP>

3. Bastion Host
- 사설망(Private Subnet) 자원 관리를 위한 외부 관문 서버
- 별도 서비스가 아니라 일반적인 EC2 인스턴스를 Bastion Host라는 역할을 보안그룹으로서 부여한 것
=> 보통 사양을 많이 타지 않아 t3.nano나 t3.micro 같은 저렴한 사양을 씀
=> 22번 포트를 내 IP에만 열어주고, 다른 서버들로 연결될 수 있는 '입구' 역할을 하도록 설정한 EC2임.
1) 존재 이유
- 사설망(Private Subnet) 내부 인스턴스에 접근하기 위한 단일 진입점. (퍼블릭 서브넷도 SSH 포트를 배스천 호스트에게만 오픈하는 것을 권장)
- 핵심 목적: 모든 서버의 SSH(22번) 포트를 외부에 열지 않고, 오직 배스천 한 대만 관리하여 공격 면적(Attack Surface)을 최소화함.
2) 위치 및 네트워크 구성
- 반드시 퍼블릭 서브넷에 배치하며 공인 IP를 보유해야 함.
- 배스천 호스트는 인터넷 게이트웨이(IGW)를 통해 외부 관리자와 통신함.
3) 보안 그룹(Security Group) 설정 정석
- 배스천 호스트 SG: 인바운드 22번(SSH) 포트를 관리자의 특정 공인 IP로만 제한함. (0.0.0.0/0 개방 금지)
- 내부 인스턴스 SG: 인바운드 22번(SSH) 포트의 소스를 IP가 아닌 배스천 호스트의 보안 그룹 ID로 설정함.
4) 2026년 최신 보안 트렌드 (중요)
- 포트리스(Port-less) 접속: 최근 AWS는 배스천의 22번 포트조차 열지 않는 방식을 권장함.
- AWS Systems Manager(SSM) Session Manager: 배스천 호스트 없이, 또는 배스천의 22번 포트를 닫은 상태에서 AWS 내부망을 통해 안전하게 셸 접속을 수행함. (가장 안전한 방식)
5) 요약
- SSH 접속을 배스천으로 단일화하여 관리
다만, 최근에는 배스천의 22번 포트조차 노출하지 않고 IAM 권한으로 접속하는 방식이 공식 권장 사항임.
6) 접속 단계 (2단계 과정)
1차 접속: 내 PC에서 퍼블릭 서브넷에 떠 있는 배스천 호스트(EC2)로 SSH 접속을 수행함. (이때 내 IP만 허용된 상태여야 함)
2차 접속: 배스천 호스트에 접속된 터미널 창 안에서, 다시 ssh [대상 서버 IP] 명령어를 입력해 프라이빗 혹은 퍼블릭 서브넷에 있는 다른 EC2로 들어감.

# !최종 정리! 아래와 같은 아키텍처로 구축 시 순서

- VPC 및 IGW: VPC 생성 및 Internet Gateway 연결.
- Subnets: 가용 영역별 Public Subnet 2개, Private Subnet 2개 생성.
- NAT Gateways: Public Subnet A, B 각각에 NAT Gateway 생성 (EIP 필요).
- Routing Tables:
- Public RT: 0.0.0.0/0 -> IGW (Public A, B 서브넷 연결).
- Private RT A: 0.0.0.0/0 -> NAT GW A (Private A 서브넷 연결).
- Private RT B: 0.0.0.0/0 -> NAT GW B (Private B 서브넷 연결).
- Security Groups:
- Bastion SG: 22번 포트 허용 (내 IP만).
- Web Server SG: 80/443 포트 허용(ALB로부터), 22번 포트 허용 (Bastion SG로부터).
- EC2 Instances: * Public Subnet에 Bastion Host 생성.
- Private Subnet에 Application Server 생성.
- Load Balancer (선택이나 권장): Public Subnet에 ALB 생성 후 서버들과 연결.
'Cloud & Infra > AWS' 카테고리의 다른 글
| [AWS] ALB - 분산 환경에서의 로그 분석과 스티키 세션 (0) | 2026.03.02 |
|---|---|
| [AWS] 프라이빗 서브넷에 RDS 인스턴스 추가하기 (0) | 2026.03.02 |
| [AWS] 보안 그룹(SG) 및 네트워크 ACL(NACL) 비교 (0) | 2026.03.02 |
| [AWS] VPC / 서브넷 (0) | 2026.03.01 |
| [AWS] AWS 서비스 개요 (0) | 2026.02.28 |