AWS - VPC (1): 기초
in DEV on DevOps, Aws, Vpc, Subnet, Public-subnet, Private-subnet, Nat, Igw
이 포스트는 VPC 기초에 대해 알아본 후 VPC 의 Public Subnet 과 Private Subnet 구성을 해본다.
- 1. VPC (Virtual Private Cloud)
- 2. 네트워크 기본
- 3. VPC Resource
- 4. Public Subnet VPC 구성 테스트
- 5. Private Subnet VPC 구성 테스트
- 6. Public Subnet → 외부 인터넷과 Private Subnet → 외부 인터넷의 통신 흐름
- 7. Resource 삭제
아래는 이번 포스트에서 다뤄볼 범위 도식화이다.
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 은 네트워크를 통해 통신하는데 사용되는 통신 규약의 모음을 말한다.
- 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
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 수)
2.3. TCP, UDP, Port 번호
TCP | UDP | |
연결 | 연결 지향 | 비연결 지향 |
신뢰성 | 신뢰성 보장 | 신뢰성 보장하지 않음 |
순서 | 데이터 순서 봅장 | 데이터 순서 보장하지 않음 |
속도 | 상대적으로 느림 | 상대적으로 빠름 |
서비스 | 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 53 의 1. DNS (Domain Name System) 를 참고하세요.
2.6. Routing
라우팅은 네트워크 통신을 수행할 때 거쳐가는 경로를 잡아주는 ISO 7 layer 중 3계층인 Network 계층의 핵심 기능을 수행한다.
네트워크는 여러 개의 Subnet 으로 이루어져있으며, 목적지 IP 로 향할 때 여러 노드를 거쳐서 통신이 되고 있는데 이 때 최적의 경로를 잡아주는 것이 라우팅이다.
3. VPC Resource
3.1. Subnet
Subnet 은 네트워크 영역을 부분적으로 나눈 망을 말하며, 클라우드 환경의 VPC 에서도 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 있다고 가정해보자.
Destination | Target |
---|---|
10.0.0.0/16 | local |
0.0.0.0/0 | your-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 - Internet 의 1.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 - Internet 의 1.2. NAT Device (NAT Instance & NAT Gateway) 를 참고하세요.
3.5. Security Group, Network ACL
VPC 는 Instance 레벨과 Subnet 레벨로 대상 필터링을 할 수 있다.
- 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 구성 테스트 의 목표 구성도는 아래와 같다.
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 생성 시 가상 라우터가 자동으로 생성되고, 기본 라우팅 테이블을 활용한다.
4.2. Public Subnet 생성
[VPC] - [Subnets]
아직은 가상 라우터가 갖고 있는 기본 라우팅 테이블을 이용한다.
4.3. IGW 생성 및 VPC 연결
외부 인터넷 구간과 통신을 하기 위해 IGW 를 생성하고 VPC 와 연결한다.
[VPC] - [Internet gateways]
IGW 생성 후 상세 화면에서 [Actions] - [Attach to VPC] 메뉴를 통해 VPC 와 연결한다.
4.4. Public Routing Table 생성 및 Subnet 연결
VPC 에 라우팅 테이블을 생성한 후 Public Subnet 과 연결한다.
[VPC] - [Routing tables]
[Routing tables] - Detail - [Subnet associations] - [Explicit subnet associations] - [Edit subnet associations]
도식화 상으론 변한 게 없어보이지만 기존의 기본 라우팅 테이블이 방금 생성한 퍼블릭 라우팅 테이블로 교체되었다.
4.5. Public Routing Table 경로 추가
현재 설정된 Public Routing 테이블에 모든 네트워트(0.0.0.0/0)(=외부 인터넷 통신을 위해) 가 IGW 로 향하는 라우팅 경로를 추가한다.
[VPC] - [Routing tables] - Detail - [Routes]
4.6. EC2 Instance 생성 및 통신 확인
외부 인터넷이 정상적으로 통신 가능한 상태인지 확인한다.
$ 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]
아직은 가상 라우터가 갖고 있는 기본 라우팅 테이블을 이용한다.
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 에 배치되는 것에 주의하자.
5.3. Private Routing Table 생성 및 Subnet 연결
[VPC] - [Routing tables]
[Routing tables] - Detail - [Subnet associations] - [Explicit subnet associations] - [Edit subnet associations]
도식화 상으론 변한 게 없어보이지만 기존의 기본 라우팅 테이블이 방금 생성한 프라이빗 라우팅 테이블로 교체되었다.
5.4. Private Routing Table 경로 추가
현재 설정된 Public Routing 테이블에 모든 네트워트(0.0.0.0/0)(=외부 인터넷 통신을 위해) 가 NAT G/W 로 향하는 라우팅 경로를 추가한다.
[VPC] - [Routing tables] - Detail - [Routes]
5.5. EC2 Instance 생성 및 통신 확인
위의 User data 는 EC2 instance 가 부팅될 때 값을 읽어서 적용되며, SSH 접속 시 EC2 instance 에 key-pair 없이 root 계정의 암호 입력방식으로 로그인을 하는 설정이다.
#!/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
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 → 외부 인터넷 통신 흐름
① 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 네트워크 입문를 기반으로 스터디하며 정리한 내용들입니다.
- 따라하며 배우는 AWS 네트워크 입문
- 따라하며 배우는 AWS 네트워크 입문 - 책가이드
- 따라하며 배우는 AWS 네트워크 입문 - 팀블로그
- 라우팅 테이블 구성 - AWS docs
- What is Destination and Target in Route table (AWS VPC)? - stackoverflow