AWS - VPC (1): 기초


이 포스트는 VPC 기초에 대해 알아본 후 VPC 의 Public Subnet 과 Private Subnet 구성을 해본다.


아래는 이번 포스트에서 다뤄볼 범위 도식화이다.

이번 포스트 범위 도식화

1. VPC (Virtual Private Cloud)

  • AWS Cloud 내 논리적으로 독립된 섹션을 제공하여 사용자가 정의한 가상 네트워크 상에서 다양한 AWS 리소스를 실행할 수 있도록 지원
  • 독립된 가상의 클라우드 네트워크
  • VPC 내에서 IP 대역, Subnet, Routing table, Internet G/W, Security Group, N/W ACL 등을 생성/제어 가능
  • instance 레벨과 subnet 레벨에서 inbound, outbound 필터링을 수행할 수 있도록 Security Group 과 N/W ACL 을 제공하여 보안 강화

2. 네트워크 기본

2.1. OSI 7 Layer 모델

OSI 7 Layer 는 네트워크 동작 과정을 7개의 계층으로 나누어 네트워크 통신을 이해할 수 있도록 도와준다.

TCP/IP Protocol 은 네트워크를 통해 통신하는데 사용되는 통신 규약의 모음을 말한다.

OSI 7 Layer vs TCP/IP Protocol

  • 1 Layer (Physical)
    • 네트워크의 하드웨어 전송 기술
    • 물리적인 링크의 연결/유지 해제
  • 2 Layer (Data Link)
    • Physical 계층에서 송수신되는 정보의 오류와 흐름을 관리하여 데이터의 전달 수행
  • 3 Layer (Network)
    • 데이터를 목적지까지 안전하게 전달(routing) 하기 위한 것
    • 여러 노드를 거칠때마다 최적의 경로를 찾아줌
  • 4 Layer (Transport)
    • 종단의 사용자 간 데이터 통신을 다루는 최상위 계층
    • 데이터 전달의 유효성과 효율성 보장받음
  • 5 Layer (Session)
    • 종단의 사용자 간 응용 프로세스 통신을 관리하기 위한 방법 제공
    • 데이터 통신을 위한 논리적인 연결
  • 6 Layer (Presentation)
    • 데이터의 형식상 차이에 대해 송/수신자 간 이해할 수 있는 형태로 데이터 표현
    • 데이터의 암호화 및 압축 등
  • 7 Layer (Application)
    • 응용 프로세스와 직접 연계하여 실제 응용 프로그램을 사용하게 함

2.2. IP, Subnet Mask

IP (Internet Protocol)

  • 인터넷상의 네트워크 자원을 구분하는 고유 주소
  • ISO 7 에서 Network(3 계층) 에 해당

Public IP vs Private IP

  • Public IP (공인 IP)
    • 인터넷 구간의 통신 대상을 식별하기 위해 ISP (Internet Service Provider) 에서 제공하는 IP 주소
    • 전 세계의 인터넷 구간에서 유일함
  • Private IP (사설 IP)
    • 독립된 네트워크에서 사용하는 내부 IP 주소
    • 독립된 네트워크 상에서 유일함
    • Private IP 를 통해 외부 인터넷 구간과 통신 불가
    • Private IP 는 3개의 Class 로 고정되어 있음
      • Class A: 10.0.0.0 ~ 10.255.255.255
      • Class B: 172.16.0.0 ~ 175.31.255.255
      • Class C: 192.168.0.0 ~ 192.168.255.255

Public IP vs Private IP

Subnet 과 Subnet Mask

위 그림을 보면 프라이빗 네트워크 1과 2로 나누어져 있는 것을 볼 수 있는데 이것이 바로 Subnet 으로 분리된 부분 네트워크 망이다.

이렇게 나누어진 Subnet 은 Subnet Mask 를 사용하여 구분할 수 있다.

  • Subnet Mask
    • IP 주소에 Network ID 와 Host ID 를 구분하는 기준값 (32 bits)
    • Network ID
      • Subnet 을 식별하는 영역
    • Host ID
      • Subnet 에서 대상을 식별하는 영역
    • 동일한 Subnet 에 속한 IP 주소의 Network ID 는 모두 동일하며, Host ID 를 통해 구분함
    • 255.255.255.0 처럼 10진수로 표현하거나, 10.1.1.0/24 처럼 prefix 형태로 표현하는데 prefix 로 표현하는 방법을 IP CIDR (Classless Inter Domain Routing) 이라고 함
      (/24 는 1의 갯수, Network ID 의 bits 수)

Subnet Mask 를 통한 Subnet 구분


2.3. TCP, UDP, Port 번호

 TCPUDP
연결연결 지향비연결 지향
신뢰성신뢰성 보장신뢰성 보장하지 않음
순서데이터 순서 봅장데이터 순서 보장하지 않음
속도상대적으로 느림상대적으로 빠름
서비스HTTP, SSH, FTP..DNS, DHCP..

서비스 구분 시 포트 번호를 통해 구분할 수 있다.
TCP, UDP 의 정해진 포트 번호 범위가 있으며, 범위에 따라 3가지로 구분된다.

  • Well-Known Port: 0~1,023
  • Registered Port: 1,024~49,151
  • Dynamic Port: 49,152~65,535

예를 들어 TCP 의 포트 번호 80 은 HTTP 서비스로 예약된 Well-Known Port 이고,
UDP 의 포트번호 53 은 DNS 서비스로 예약된 Well-Known Port 이다.


2.4. DHCP (Dynamic Host Configuration Protocol)

DHCP 는 동적으로 IPv4 주소를 일정 기간 임대하는 프로토콜이다.
UDP 프로토콜을 사용하며, 포트 번호 67, 68 을 사용하여 동작한다.


2.5. DNS (Domain Name System)

DNS 는 도메인 네임을 제공하기 위한 기술로, UDP 프로토콜을 사용하며 포트 번호 53을 사용하여 동작한다.

도메인 네임
IP 주소의 복잡한 주소 체계를 해소하기 위해 문자 형태로 된 이름

DNS 에 대한 상세 내용은 AWS - Load Balancing (2): Route 531. DNS (Domain Name System) 를 참고하세요.


2.6. Routing

라우팅은 네트워크 통신을 수행할 때 거쳐가는 경로를 잡아주는 ISO 7 layer 중 3계층인 Network 계층의 핵심 기능을 수행한다.

네트워크는 여러 개의 Subnet 으로 이루어져있으며, 목적지 IP 로 향할 때 여러 노드를 거쳐서 통신이 되고 있는데 이 때 최적의 경로를 잡아주는 것이 라우팅이다.


3. VPC Resource

3.1. Subnet

Subnet 은 네트워크 영역을 부분적으로 나눈 망을 말하며, 클라우드 환경의 VPC 에서도 Subnet 을 통해 네트워크를 분리할 수 있다.

Subnet

Subnet 의 IP 대역은 VPC 의 IP 대역에 속해있어야 하며, Subnet 은 1개의 가용 영역에 속해있어야 한다.

Subnet IP 대역의 예약된 IP 주소
Subnet IP 대역에서 1~4번째까지 IP 주소와 마지막 IP 주소는 예약되어 있다.
VPC 내에 여러 개의 Subnet 이 존재하는 경우 첫 번째 Subnet 의 세 번째 주소를 DNS 서버 주소로 사용하고,
나머지 Subnet 의 세 번째 주소는 AWS 에 예약되어 있다.

e.g. Subnet 에 할당된 IP 대역이 10.0.0.0/24 일 경우 10.0.0.0 ~ 10.0.0.255 중에서
10.0.0.0 → 네트워크 주소
10.0.0.1 → VPC 가상 라우터 주소
10.0.0.2 → DNS 서버 주소
10.0.0.3 → 향후 새로운 기능에 활용할 주소
10.0.0.255 → Broadcast 주소

Public Subnet, Private Subnet

  • Public Subnet
    • 공인 네트워크 개념
    • 외부 인터넷 구간과 직접적으로 통신 가능한 공공 네트워크
    • Public IP 를 갖고 Internet G/W 를 통해 외부 인터넷 구간과 통신 가능
  • Private Subnet
    • 사설 네트워크 개념
    • 외부 인터넷 구간과 직접적인 통신할 수 없는 폐쇄 네트워크
    • 기본적으로 외부 인터넷 구간과 통신이 불가하지만, Private IP 를 Public IP 로 변환해주는 NAT G/W 가 있으면 외부와 통신 가능

3.2. 가상 라우터와 라우팅 테이블

VPC 를 생성하면 자동으로 가상 라우터가 생성되며, 이 가상 라우터는 라우팅 테이블을 갖고 있다.

3.2.1. 라우팅 테이블의 Destination 과 Target

  • Destination
    • 요청이 Destination address 와 일치해야 하는 패턴 지정 (IP or CIDR)
  • Target
    • 이러한 요청이 라우팅되어야 하는 위치 (Gateway, Network Interface 등)
    • 예를 들어 같은 VPC 안에 target 으로 보내는 것이면 local (local 은 VPC 내 통신을 위한 기본 라우팅)
    • 요청이 외부로 라우팅되어야 하면 gateway-ID

10.0.0.0/16 VPC 있다고 가정해보자.

DestinationTarget
10.0.0.0/16local
0.0.0.0/0your-igw-id

VPC 내의 destination 으로의 모든 요청은 local target 으로 라우팅된다. 만일 패턴이 10.0.0.0/16 과 맞지 않으면 예를 들어 0.0.0.0/0(모든 외부)면 요청은 gateway-id 로 라우팅된다. 가장 구체적인 경로가 선택되므로 경로의 순서는 중요하지 않다.


3.3. Internet Gateway

IGW 는 VPC 와 인터넷간의 논리적인 연결이다. (=VPC 에서 인터넷 구간으로 나가는 관문)
IGW 는 VPC 당 1개만 연결 가능하여, IGW 를 통해 외부 인터넷 구간으로 통신할 수 있는 대상은 Public IP 를 사용하는 Public Subnet 내의 자원이다.

양방향 연결을 지원하기 때문에 외부 인터넷 ↔ Public Subnet 의 Public IP 으로의 통신이 가능하다.

IGW 에 대해선 AWS - Internet1.1. Internet Gateway 을 참고하세요.


3.4. NAT Gateway (Network Address Translation)

NAT
IP를 변환해주는 기술

NAT GW 도 IGW 처럼 외부 인터넷 구간과 VPC 구간을 연결한다.
다만, Private IP 는 인터넷 구간으로 넘어올 수 없는데 이 때 NAT GW 가 Private IP 를 Public IP 로 변환하여 통신이 가능하게 해준다.

  • IGW
    • Public Subnet 의 외부 인터넷 구간 연결
    • 양방향 연결을 지원 (외부 인터넷 ↔ Public Subnet 의 Public IP)
  • NAT GW
    • Private Subnet Instance 의 Private IP 를 Public IP 로 변환하여 외부 인터넷 구간과 연결 가능하게 해줌
    • 단방향으로만 동작 (Private Subnet → 외부 인터넷 만 가능)

NAT Instance 에 관한 내용은 AWS - Internet1.2. NAT Device (NAT Instance & NAT Gateway) 를 참고하세요.

IGW

NAT GW


3.5. Security Group, Network ACL

VPC 는 Instance 레벨과 Subnet 레벨로 대상 필터링을 할 수 있다.

Security Group, Network ACL

  • Security Group
    • Instance 레벨에서의 보안 기술
    • Instance 별로 지정
  • Network ACL(Access Control List)
    • Subnet 레벨에서의 보안 기술
    • Subnet 별로 지정

Security Group, Network ACL 의 상세한 내용은 AWS - Security (1): Security Group, ACL, VPC Flow Log 을 참고하세요.


4. Public Subnet VPC 구성 테스트5. Private Subnet VPC 구성 테스트 의 목표 구성도는 아래와 같다.

"Public Subnet → 외부 인터넷" 과 "Private Subnet → 외부 인터넷" 의 통신 흐름

4. Public Subnet VPC 구성 테스트

Public Subnet 에 속한 EC2 인스턴스와 외부 인터넷 통신이 가능하도록 구성해본다.

  • VPC 생성
  • Public Subnet 생성
  • IGW 생성 및 VPC 연결
  • Public Routing Table 생성 및 Subnet 연결
  • Public Routing Table 경로 추가
  • EC2 Instance 생성 및 통신 확인

4.1. VPC 생성

VPC 생성

아래는 VPC 생성 도식화이다.
VPC 생성 시 가상 라우터가 자동으로 생성되고, 기본 라우팅 테이블을 활용한다. VPC 생성 - 도식화

4.2. Public Subnet 생성

[VPC] - [Subnets]

Public Subnet 생성

아직은 가상 라우터가 갖고 있는 기본 라우팅 테이블을 이용한다. Public Subnet 생성 - 도식화

4.3. IGW 생성 및 VPC 연결

외부 인터넷 구간과 통신을 하기 위해 IGW 를 생성하고 VPC 와 연결한다.

[VPC] - [Internet gateways] IGW 생성

IGW 생성 후 상세 화면에서 [Actions] - [Attach to VPC] 메뉴를 통해 VPC 와 연결한다.

IGW 생성 - 도식화

4.4. Public Routing Table 생성 및 Subnet 연결

VPC 에 라우팅 테이블을 생성한 후 Public Subnet 과 연결한다.

[VPC] - [Routing tables] Routing Table 생성

[Routing tables] - Detail - [Subnet associations] - [Explicit subnet associations] - [Edit subnet associations]

Routing Table - subnet 연결

도식화 상으론 변한 게 없어보이지만 기존의 기본 라우팅 테이블이 방금 생성한 퍼블릭 라우팅 테이블로 교체되었다.

Routing Table 생성 후 subnet 연결 - 도식화

4.5. Public Routing Table 경로 추가

현재 설정된 Public Routing 테이블에 모든 네트워트(0.0.0.0/0)(=외부 인터넷 통신을 위해) 가 IGW 로 향하는 라우팅 경로를 추가한다.

[VPC] - [Routing tables] - Detail - [Routes] Public Routing Table 에 경로 추가

Public Routing Table 에 경로 추가 후 화면

Public Routing Table 에 경로 추가 - 도식화

4.6. EC2 Instance 생성 및 통신 확인

EC2 생성(1) EC2 생성(2)

EC2 생성 - 도식화

외부 인터넷이 정상적으로 통신 가능한 상태인지 확인한다.

$ ssh -i sandbox-jh.pem ec2-user@43.200.xxx.xx

[ec2-user@ip-10-10-0-xx ~]$ ping google.com
PING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from nrt12s36-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=46 time=32.7 ms
64 bytes from nrt12s36-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=46 time=32.7 ms

5. Private Subnet VPC 구성 테스트

Private Subnet 에 속한 EC2 인스턴스와 외부 인터넷 통신이 가능하도록 구성해본다.

  • Private Subnet 생성
  • NAT G/W 생성
  • Private Routing Table 생성 및 Subnet 연결
  • Private Routing Table 경로 추가
  • EC2 Instance 생성 및 통신 확인

5.1. Private Subnet 생성

[VPC] - [Subnets]

Private Subnet 생성

아직은 가상 라우터가 갖고 있는 기본 라우팅 테이블을 이용한다. Private Subnet 생성 - 도식화

5.2. NAT G/W 생성

NAT G/W 는 Private IP 를 Public IP 로 변환해주어 Private Subnet 에서 외부 인터넷 구간 통신을 가능하게 해준다.

Public Subnet 에서 외부 인터넷 구간과 통신할때는 IGW 를 통해 통신이 되고,
Private Subnet 에서 외부 인터넷 구간과 통신할 때는 NAT G/W 를 통해 통신이 된다.

[VPC] - [NAT gateways]

NAT G/W 는 Private Subnet 과 외부 인터넷 구간을 통신하게 해주지만 위치는 Public Subnet 에 배치되는 것에 주의하자. NAT G/W 생성

NAT G/W 생성 - 도식화

5.3. Private Routing Table 생성 및 Subnet 연결

[VPC] - [Routing tables] Routing Table 생성

[Routing tables] - Detail - [Subnet associations] - [Explicit subnet associations] - [Edit subnet associations]

Routing Table - subnet 연결

도식화 상으론 변한 게 없어보이지만 기존의 기본 라우팅 테이블이 방금 생성한 프라이빗 라우팅 테이블로 교체되었다.

Routing Table 생성 후 subnet 연결 - 도식화

5.4. Private Routing Table 경로 추가

현재 설정된 Public Routing 테이블에 모든 네트워트(0.0.0.0/0)(=외부 인터넷 통신을 위해) 가 NAT G/W 로 향하는 라우팅 경로를 추가한다.

[VPC] - [Routing tables] - Detail - [Routes] Public Routing Table 에 경로 추가

Public Routing Table 에 경로 추가 후 화면

Public Routing Table 에 경로 추가 - 도식화

5.5. EC2 Instance 생성 및 통신 확인

EC2 생성(1) EC2 생성(2) EC2 생성(3)

위의 User data 는 EC2 instance 가 부팅될 때 값을 읽어서 적용되며, SSH 접속 시 EC2 instance 에 key-pair 없이 root 계정의 암호 입력방식으로 로그인을 하는 설정이다.

User data download

#!/bin/bash
(
echo "qwe123"
echo "qwe123"
) | passwd --stdin root
sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
service sshd restart

EC2 생성 - 도식화

3.4. NAT Gateway (Network Address Translation) 에서 말한 바와 같이 NAT G/W 를 통해 Private Subnet → 외부 인터넷으로 단방향으로만 동작함.
(외부 인터넷 구간 → Private Subnet 으로는 통신 불가)

Private Subnet 은 외부 네트워크에서 접속이 불가하므로 Public EC2 instance 에 접속 후 로컬 통신을 통해 Private EC2 instance 로 SSH 접근하여 Private Subnet → 외부 인터넷이 정상적으로 통신 가능한 상태인지 확인한다.

$ ssh -i sandbox-jh.pem ec2-user@43.200.xxx.xx

[ec2-user@ip-10-10-0-xx ~]$ ssh root@10.10.1.xxx

[root@ip-10-10-1-xxx ~]# ping google.com
PING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from nrt12s36-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=104 time=32.8 ms

6. Public Subnet → 외부 인터넷과 Private Subnet → 외부 인터넷의 통신 흐름

Public Subnet → 외부 인터넷과 Private Subnet → 외부 인터넷의 통신 흐름

Public Subnet → 외부 인터넷 통신 흐름

① Public Subnet 의 Public EC2 instance 가 외부 인터넷과 통신하기 위해 Public IP 를 사용하여 데이터를 가상 라우터로 보냄
② 가상 라우터는 Public Routing Table 을 참고하여 IGW 로 향하는 라우팅 경로 확인
③ 가상 라우터는 IGW 로 데이터를 전달하고, 인터넷 구간으로 넘어감
④ 인터넷 구간을 통하여 데이터가 사용자에게 전달됨

데이터의 흐름이 반대로 외부 인터넷 → Public Subnet 의 EC2 instance 인 경우에도 Public IP 를 Target 으로 하여 정상 통신이 가능하다.

Private Subnet → 외부 인터넷 통신 흐름

① Private Subnet 의 Private EC2 instance 가 외부 인터넷과 통신하기 위해 Private IP 를 사용하여 데이터를 가상 라우터로 보냄
② 가상 라우터는 Private Routing Table 을 참고하여 NAT G/W 로 향하는 라우팅 경로 확인
③ 가상 라우터는 NAT G/W 로 데이터를 전달하고, NAT G/W 에서 Private IP 를 Public IP 로 전환함
④,⑤ NAT G/W 에서 인터넷 구간을 넘어가기 위해 IGW 를 거쳐 사용자에게 데이터가 전달되는데 이 때 사용자는 NAT G/W 에서 변환한 Public IP 로 전달받음

데이터의 흐름이 반대로 외부 인터넷 → Private Subnet 의 EC2 instance 인 경우 사용자는 NAT G/W 의 Public IP 만 알고 있을 뿐 EC2 instance 의 IP 주소를 모르기 때문에 통신이 불가하다.


7. Resource 삭제

아래의 순서대로 Resource 를 삭제한다.

  • EC2 instance 종료
  • NAT G/W 삭제
  • EIP 삭제 ([VPC] - [Elastic IPs] - [Release Elastic IP address])
  • VPC 삭제 (VPC 삭제 시 IGW, 라우팅 테이블, 서브넷 동시에 삭제됨)

참고 사이트 & 함께 보면 좋은 사이트

본 포스트는 김원일, 서종호 저자의 따라하며 배우는 AWS 네트워크 입문를 기반으로 스터디하며 정리한 내용들입니다.






© 2020.08. by assu10

Powered by assu10