VPC를 사용하는 이유?
클라우드에서 네트워크를 분리함으로써 Private Network / Public Network로 구성하기위한 솔루션
。기존 AWS 서비스를 사용 시 Public IP에 의해 외부에 노출되므로 보안 상 취약한 단점이 존재
▶ VPC를 통해 외부로 노출되면 안될 AWS 서비스( ex. RDS )들을 Private로 설정하여 외부에서 접근 못하도록 설정
ex ) VPC 내 EC2 인스턴스가 AWS 서비스를 사용 시 AWS 내부에서 접근하는게 아닌 인터넷을 거쳐서 AWS로 접근
AWS VPC( Virtual Private Cloud )

。사용자 전용의 가상 데이터센터 개념의 독립된 가상 Private Network
▶ 일종의 Private IP 대역으로서, 네트워크 범위를 의미
。 AWS에서 다른 가상 네트워크와 논리적으로 분리 및 원하는 만큼 격리된 가상 Private Network를 프로비저닝
。각 AWS의 인스턴스( IP주소 범위, 서브넷, 라우팅 테이블, Gateway 등 )들이 VPC들에 구성되도록 설정함으로써 네트워크 단위로 구분할 수 있음.
。각 VPC는 독립적이므로, 서로 통신이 불가능
▶ 각 VPC 간 통신이 필요한 경우 VPC 피어링 서비스를 사용
VPC는 Private IP 대역 범위 내에서 IPv4 CIDR 영역을 설정
Private IP대역
。AWS는 /16 ~ /28 비트의 서브넷 마스크를 허용
▶ VPC / 서브넷을 생성할 수 있는 가장 큰 IP대역 : /16 이며, 가장 작은 IP대역 : /28으로 CIDR을 설정해야함.
。VPC에서 설정된 IP 대역은 한번 설정 시 수정이 불가능
VPC는 각 리전( Region )에 종속
。VPC는 리전 단위로 오직 하나의 리전에만 소속이 가능하며, 다른 리전까지 확장이 불가능
▶ VPC의 서브넷은 동일 리전 내 오직 하나의 AZ에 소속 가능
。주로 VPC 내부에서 EC2, RDS, Lambda 등의 AWS 자원을 외부에 노출되지 않도록 분리하여 실행하는 용도로 사용
。AWS 계정 생성 시 외부 인터넷과 자동 연결된 기본 VPC와 기본 서브넷이 생성
VPC 구성
。사용자는 원하는 방식대로 IP주소 범위 선택 및 서브넷 생성 / 라우팅 테이블 / 네트워크 게이트웨이 구성 등 가상 네트워크 환경을 구성해서 VPC를 생성

。서브넷, 인터넷 게이트웨이, NACL / 보안그룹, 라우팅 테이블, NAT Instance / NAT Gateway, Bastion Host, VPC Endpoint으로 구성
VPC 종류
기본 VPC
。AWS 계정 생성 시 자동으로 생성되며 IGW가 자동 정의되어 인터넷과 연결된 VPC
▶ 초기 계정 생성 후 EC2 인스턴스 생성 시 별도의 설정을 하지않아도 인터넷에서 접근 가능한 이유.
。 기본적으로 각 AZ마다 Public Subnet을 생성이 가능
커스텀 VPC
。직접 생성하는 VPC
▶ IGW를 자동 설정하지 않으므로 기본적으로 인터넷과 차단
。IGW와 라우팅 설정 없이 Public Subnet 생성이 불가능
▶ 해당 설정이 없는 경우 커스텀 VPC 내부에 인터넷과 연결 가능한 EC2 인스턴스의 생성이 불가능
서브넷 : 서브네트워크 서브넷
。VPC에 할당된 IP주소 대역을 더 작은 단위로 분할하는 VPC의 하위단위 네트워크
▶ 서브넷의 IP 대역은 VPC IP 대역 내 속해야함
。서브넷 CIDR : 10.0.1.0/24인 경우, 10.0.1.0 ~ 255까지의 IP주소를 사용
。 VPC의 서브넷은 동일 리전 내 오직 하나의 AZ에 종속
▶ 서브넷은 일반적으로 가용 영역 단위 ( AZ )로 분할하여 사용
。EC2 인스턴스와 같은 자원은 AWS VPC 내 특정 Subnet에 생성되고, Subnet의 IP 범위 내 IP를 할당

▶ 특정 AZ의 서브넷은 다른 AZ으로 확장이 불가능
- CIDR Block으로
IPv4 또는 IPv6 주소의 IP 영역을 지정
。AWS는 /16 ~ /28 비트의 서브넷 마스크를 허용
。서브넷 지정 시 IPv4의 경우 최소 /28 ~ 최대 /16 범위의 CIDR을 지정
▶ 서브넷은 최소한 32-28 = 4 → 24=16으로 16 - 5 = 11개의 IPv4 주소를 가진다.
。IPv6의 경우 최소 /44 ~ 최대 /64 범위의 CIDR을 지정
서브넷에서 사용가능한 IP주소 수는 예약된 IP를 제외한 (IP주소 수 - 5)개 만큼만 사용가능
。10.0.0.0/24으로 서브넷 설정 시
10.0.0.0 : 네트워크 주소
10.0.0.1 : VPC Router
10.0.0.2 : DNS Server
10.0.0.3 : 예비 IP
10.0.0.255 ( 마지막 숫자 ) : 네트워크의 Broadcast 주소
▶ 다음처럼 5개의 IP는 예약되어 자동으로 점유하므로 사용자가 사용이 불가능하며 28−5=256−5=251개 만큼의 IP주소만 사용가능
서브넷 내 인스턴스 생성 시 해당 Subnet IP 주소대역의 IP주소를 할당받아서 생성

VPC 내 에서 구성되는 Subnet의 종류
Public Subnet
。인터넷을 통해 외부에서 접근할 수 있는 서브넷
▶ 내부 인스턴스에 Public IP를 부여가능
。 IGW ( = 인터넷 게이트웨이 )를 통해 VPC Router를 경유하여 인터넷과 연결
。주로 사용자에게 노출되어야하는 인프라인 EC2 ( = 어플리케이션 서버 ) 등으로 구성
▶ 외부에서 접근하는 SW ( Nginx Proxy Manager, Front End 등 )은 Public Subnet의 EC2 인스턴스에 구성
Private Subnet
。외부와 차단되어 인터넷으로부터 접근할 수 없는 서브넷
▶ 오직 해당 Private Subnet의 로컬 또는 동일 VPC 내 서브넷에만 접근이 가능
。원칙적으로 외부에서의 접근은 차단하고, 운영 / 개발자에 의한 접근을 Bastion Host 등의 설정으로 접근을 허용
。VPC 라우터의 Route Table에서 인터넷으로 경로가 설정되지 않아 외부와 차단되어 Private Subnet에서 직접 IGW로 접근이 불가능하며, Public IP의 부여 불가능
。주로 외부에 노출될 필요가 없는 인프라인 RDS( = 데이터베이스 서버 ) 등 을 설정
▶ 외부에서 접근을 차단해야하는 SW ( DB , Backend App' )은 Private Subnet의 EC2 인스턴스으로서 구성하도록 설정하여 외부로부터의 접근을 차단
VPC Router

。VPC의 서브넷 간 전달되는 트래픽( = IP 패킷 )을 hop( = VPC Router, IGW 등 )으로 라우팅하는 용도의 가상의 라우터
▶ 모든 서브넷의 트래픽은 VPC 라우터를 통해 목적지로 전달
。VPC Router는 Route Table을 가지고 해당 테이블을 기반으로 트래픽의 전송방향을 결정
。VPC 생성 시 자동으로 생성 및 관리됨
▶ 사용자는 오직 Route Table만 관리 가능
Route Table 라우팅 테이블
。VPC Router에서 트래픽 수신 시 목적지에 대해 트래픽을 전달할 경로상의 다음 hop을 결정하여 경로를 형성하는 테이블
▶ VPC 생성 시 기본적으로 하나를 제공하며 추가 정의 가능
。VPC Router의 Route Table에서 특정 hop이 Target으로 지정되어 경로가 형성되어야 트래픽을 전달이 가능
。 IP주소 수신 시 Destination의 CIDR Block에 해당하지 않는 경우 전달하지않음.
。서브넷 당 개별적인 라우트 테이블을 생성하여 가질 수 있다.
라우트 테이블 구성요소

Destination :
。 VPC router에서 트래픽을 수신 시 설정된 Target으로 전송하는 CIDR Block을 정의
▶ 해당 CIDR Block에 해당하는 목적 IP 주소로 전송되는 트래픽을 수신 시 매핑된 Target에 정의된 라우터 또는 게이트웨이로 전송
。각 Destination의 CIDR Block 범위가 겹치는 경우 CIDR Notation의 /E가 가장 크기에 네트워크 주소가 구체화된 Destination의 Target으로 전송
。Destination : ( 10.0.0.0/16 )은 10.0.0.0 ~ 10.0.255.255 까지의 트래픽을 Target : ( local )로 전송
。Destination : ( 172.31.0.0/16 )은 172.31.0.0 ~ 172.31.255.255 까지의 트래픽을 Target : ( pcx )로 전송
。그 외 모든 IP 대역으로 전송된 트래픽은 0.0.0.0/0에 매핑된 IGW로 전송
▶ 172.31.2.125/16으로 전송 시 0.0.0.0/0 은 모든 IP주소를 가지므로 후순위이며 172.31.0.0/16에 매핑된 Target으로 전송
Target :
。VPC Router에서 수신한 트래픽을 실제로 전송할 대상이 되는 hop (로컬, VPC 라우터, 인터넷 게이트웨이)
▶ 논리적 자원 ID로 설정
ex ) Internet Gateway의 경우 IGW-xxxxxx
。Destination의 CIDR Block에 해당하는 트래픽을 수신 시 매핑된 Target으로 전송
。 Local : Local Network : VPC 자체 IP 대역
▶ VPC 내 정의된 서브넷은 해당 Local에 의해 통신이 가능
인터넷 게이트웨이 ( IGW : Internet Gateway )
。VPC와 인터넷 간 논리적 연결로서, VPC에서 인터넷으로 나가는 관문
。VPC의 내부 자원과 외부 인터넷이 통신할 수 있도록 경로를 생성하는 역할을 수행
▶ VPC 라우터만으로 외부 인터넷에 접근할 수 없으므로, 추가적으로 IGW에 대한 정의를 설정해야 외부 인터넷과의 통신이 가능.
。기본적으로 무료이며 확장성과 고가용성이 확보
▶ VPC에 추가 IGW를 정의할 필요는 없음.
。IPv4, IPv6 지원
▶ IPv4의 경우 [NAT](https:

IGW는 VPC 당 1개만 연결이 가능
VPC Router를 통해 Route Table에서 Target을 IGW으로 설정 후 Public Subnet에서 인터넷으로 접근이 가능
。Public Subnet의 Route Table에 외부 인터넷으로 나가는 Target을 IGW로 설정해야한다.

▶ Subnet의 Route Table은 10.0.0.0/16의 IP 대역의 트래픽은 내부 서브넷으로 전송하고, 나머지 IP 대역의 트래픽은 IGW로 전송하여 인터넷과 통신을 수행
。 Private Subnet은 인터넷과 차단되어있으므로 Route Table에 경로가 정의되있지 않아 IGW와 직접 연결이 불가능
▶ NAT Instance를 통해 외부 인터넷과 연결을 수행
NAT Gateway / NAT Instance NAT
。VPC의 Private Subnet 내 인스턴스에서 외부 인터넷에 연결할 수 있도록 지원하는 서비스
。NAT Gateway / NAT Instance는 모두 서브넷 단위이며 외부 인터넷과 Private Subnet을 중계하는 역할을 수행하므로 Public Subnet에 존재해야한다.
。유료서비스

Private Subnet 내부 인스턴스 → 외부인터넷으로 단방향으로만 통신이 가능
。Private Subnet 내부 EC2 인스턴스는 Public Subnet 내부의 NAT Gateway / Instance를 통해 외부 인터넷에 트래픽을 전송
▶ NAT Gateway가 Private IP를 Public IP로 변환하여 통신을 수행
。그러나, NAT을 통해 외부 인터넷에서 Private Network로 통신은 불가능
▶ 외부 인터넷이 Private Subnet 내 인스턴스으로 접근 시 Bastion Host를 사용
NAT Instance :
。단일 EC2 인스턴스로서 가용성이 떨어지는 단점이 존재
。저렴한 비용의 특징으로 주로 테스트용도로 사용
NAT Gateway :
。AWS에서 제공하는 가용성 높은 관리형 서비스
。고가용성의 특징으로 대규모 서비스 또는 운영 레벨에서는 NAT Gateway를 사용하는 것을 권고
▶ 단, 고가용성 확보를 위해서는 2개 이상의 AZ에 각각 정의된 서브넷이 필요
통신흐름
Private Subnet의 인스턴스가 외부 인터넷과 통신하기 위해 Private IP로 가상 라우터로 트래픽을 전송
가상 라우터는 Private Route Table을 참고 후 NAT Gateway로 가는 라우트 경로를 확인 후 트래픽을 전송
NAT Gateway는 인스턴스의 Private IP를 Public IP로 전환 후 IGW를 경유하여 클라이언트에게 전달
▶ 클라이언트는 NAT Gateway에서 변환된 IP 주소로서 수신받음
Bastion Host
。외부 인터넷에서 Private Subnet의 인스턴스에 트래픽을 전송할 수 있도록 Public Subnet내에 위치하여 경로를 확보하는 용도의 EC2 인스턴스
▶ 외부인터넷 → Private Subnet 내부 인스턴스로 트래픽으로 전송하는 역할을 수행
。 NAT Gateway / Instance과 방향이 반대.

▶ 외부 인터넷은 Public Subnet 내부의 Bastion Host를 통해 Private Subnet 내부 EC2 인스턴스에 트래픽을 전송
NACL ( Network Access Control List )