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 생성 후 서버들과 연결.

 

+ Recent posts