이전 포스팅에서 VPC의 기초 개념에 대해 알아 봤다. 이번 포스팅에선 VPC를 직접 구성하며, VPC에 대해 좀 더 깊이 있는 내용을 다뤄보고자 한다.
AWS로 서비스를 배포해본 유저도 VPC를 생성하고 네트워크 세팅을 경험 해보지 않았을 수도 있다.
왜냐하면 AWS계정을 만드는 순간 각 리전마다 VPC가 기본값으로 생성되기 때문에 VPC를 생성하고 관리하지 않아도 EC2를 통해 배포가 가능하기 때문이다.
하지만 기본으로 주는 세팅으로만 사용해서는 VPC에 대해 이해하기 힘들다.
이번 포스팅에서는 VPC의 구성에 대해 하나하나 만들어 갈 것이다.
우선 AWS의 VPC탭에 들어가 VPC생성을 클릭해 VPC생성 탭으로 넘어간다.
VPC생성에는 VPC만 생성해주는 옵션과 VPC에 관련된 것을 자동으로 생성해주는 두가지 옵션이 있다.
VPC생성에 있어서 시간이 부족하거나, VPC에 대해 자세히 이해하고 있다면 자동으로 생성해주는 옵션을 권장하지만, 한번쯤은 직접 VPC를 구성해보는 것을 추천한다.
VPC를 생성하기 위해선 VPC의 이름과 IPv4 CIDR을 입력해 줘야한다.
여기서 IPv4 CIDR이란 해당 VPC에서 사용할 IPv4의 블록의 크기를 말한다.
AWS에서는 RFC 1918규격에 맞는 Private IPv4 범위에 속하는 CIDR을 정하는 것을 권장하고 있다.
RFC 1918 범위 | CIDR 블록의 예 |
---|---|
10.0.0.0 - 10.255.255.255 (10/8 접두사) | 10.0.0.0/16 |
172.16.0.0 - 172.31.255.255 (172.16/12 접두사) | 172.31.0.0/16 |
192.168.0.0 - 192.168.255.255 (192.168/16 접두사) | 192.168.0.0/16 |
여기서 IP는 다들 익숙 할것이다. 하지만 IP뒤에 있는 /16 에 대해 감이 오지 않는 사람들도 있을 것이다. 이는 서브넷 마스크라는 것이다.
IPv4는 4개의 .을 통해 분리가 되어 있는데 분리된 각 숫자는 32비트로 구성되어 있다.
/ 뒤의 숫자는 서브넷을 어떤 간격으로 나눌지 정해놓은 것이다. 서브넷이 10.10.1.24/32일 경우 해당 서브넷은 10.10.1.24인 IP 1개만 사용이 가능하며, 10.10.0.0/16 인 경우 10.10.0.0 ~ 10.10.255.255 인 총 65536개의 IP를 사용가능 하다.
가장 많이 사용하는 조합인 VPC에는 /16을 사용하고 각 서브넷에는 /24를 사용해 256개의 IP를 할당하는 방식이 보편적으로 이뤄진다.
VPC를 생성한 뒤 VPC의 Resource map을 확인하면 기본값으로 존재하는 라우팅 테이블을 제외하고 아무것도 존재하지 않는다.
지금부터 VPC의 구성을 하나씩 추가해 나갈 것이다.
서브넷이란 IP주소에서 네트워크 영역을 부분적으로 나눈 네트워크를 뜻한다. VPC 내부를 필요한 영역에 따라 나누어 네트워크 라우팅을 효율적으로 하는데 목적이 있다.
메인 사진에서 서브넷을 보면 Public 서브넷과 Private 서브넷 두개로 분리된 것을 볼 수 있다.
Public과 Private의 차이점은 이름에서 볼 수 있듯 외부 인터넷망에서 접근이 가능한 여부로 판별한다.
Public은 외부에서 상시 접근 가능한 네트워크 영역이고, Private는 외부에서 접근이 불가능한 네트워크 영역이다.
API Server나 Database와 같은 민감한 정보들은 외부에서 접근할 경우 보안에 문제가 있기 때문에 Private 서브넷에 위치 시키고, 정적 웹페이지나 API Server로 트래픽을 분산시키는 Load balancer와 같은 것들은 Public 서브넷에 위치 시켜, 영역을 분리, 보안을 향상시킨다.
VPC탭에서 좌측 서브넷 메뉴를 선택한 뒤 서브넷 생성 버튼을 클릭해 준다.
서브넷 생성 버튼을 클릭하면 위와 같은 화면이 나오게 된다.
VPC는 위에서 생성해준 VPC를 선택해 주고 서브넷 이름을 지정해 준다.
가용 영역까지 선택을 완료 했으면, IPv4 CIDR블록을 설정해 준다.
기존 VPC에서 지정한 블록과 방식은 동일하다. 하나의 서브넷에 너무 많은 CIDR블록을 설정할 경우, 다른 서브넷에 사용할 블록이 부족해 진다. CIDR의 비트수를 24를 하더라도 255개의 IP를 사용할 수 있으니 /24로 해도 충분하다.
Private 서브넷도 세팅하는 방법은 동일하다. 다만 RDS나 로드밸런서의 필수 가용영역 조건이 2개 이상의 서브넷을 사용하기 때문에, Private 서브넷은 서브넷에 1,2 와 같은 구별할 수 있는 이름으로 만든 뒤 각각 다른 가용 영역을 할당해 2개를 생성해 준다.
총 2개의 가용 영역을 사용하기 위해 Public과 Private 서브넷을 두개씩 만들어 주었다.
VPC는 생성직후 외부 인터넷과 격리되어 있다. 외부 인터넷을 사용하고 접근을 허용하기 위해선 Internet Gateway가 필요하다.
서브넷과 동일하게 VPC탭에서 인터넷 게이트웨이 메뉴를 통해 인터넷 게이트웨이 생성 아이콘을 클릭해 준다.
이름을 정하고 생성을 하게되면 상세 정보가 나오게 되는데 우측에 작업 아이콘을 클릭 VPC에 연결에 진입한다.
직전에 만들었던 VPC와 연결하면 해당 VPC전용 인터넷 게이트웨이가 연결된다.
하지만, 인터넷 게이트웨이를 연결했다고, 바로 인터넷이 연결되지는 않는다. 패킷의 전달 방법을 정하는 라우팅 테이블이 존재해야 외부 인터넷과 비로소 트래픽 이동이 가능해진다.
NAT Gateway는 Private 서브넷에 사용하며, 내부에서 요청된 트래픽은 외부 인터넷에 전송되어 데이터를 받아올 수 있지만, 외부 인터넷에서 요청된 트래픽은 절대 내부 서브넷에 도달할 수 없다.
Private 서브넷에 존재하는 인스턴스에 도커와 같은 외부 프로그램을 받아올 경우 주로 사용된다.
NAT Gateway는 Internet Gateway와 다르게 하나의 인스턴스로 작동한다. 컴퓨팅 자원을 사용한다는 것인데, NAT Gateway는 AWS 프리티어에 포함되지 않아, 요금이 청구되고, EC2 t3.micro보다 요금이 비싸다. 프리티어만 사용할 경우 NAT Gateway는 사용하지 않는것이 좋다.
VPC탭에서 좌측 NAT 게이트웨이 메뉴를 클릭한 뒤 NAT 게이트웨이 생성 버튼을 클릭해준다.
NAT 게이트웨이에 사용할 이름을 지정해 주고, 서브넷은 public으로 생성한 서브넷을 지정해 준다. 그 후 탄력적 IP할당을 클릭해 IP를 생성 후 NAT 게이트웨이 생성을 완료 한다.
라우팅 테이블은 서브넷 또는 게이트웨이의 네트워크 트래픽이 전송되는 위치를 결정하는 라우팅이라는 규칙 세트를 포함하고 있는 테이블이다.
트래픽이 향하게 될 IP 주소를 가지고 있어 지정해둔 게이트웨이를 통해 트래픽이 향하게 될 위치를 결정한다.
라우팅 테이블도 VPC탭을 통해 생성한다.
라우팅 테이블 메뉴 > 라우팅 테이블 생성 아이콘을 클릭해 라우팅 테이블 생성을 진행한다.
서브넷의 경우 Public 2개 Private 2개를 만들어 줬지만, 라우팅 테이블의 경우 Public 1개 Private 2개 총 3개를 생성해 줄것이다.
Public 서브넷의 경우 외부 인터넷과 연결되어 있어, 서브넷간 격리를 할 필요가 없기 때문에 라우팅 테이블 하나로 여러개의 Public 서브넷을 사용하고, Private 서브넷의 경우, 각 서브넷이 격리되어 있어야 하기 때문에 Private 서브넷 1개당 하나의 라우팅 테이블이 필요하다.
VPC는 생성한 것을 지정해 주고, public이 붙은 라우팅 테이블 1개와 private가 붙은 라우팅 테이블을 2개 생성해준다.
생성된 라우팅 테이블의 상세 정보를 보게되면 기존에 생성해둔 4개의 서브넷이 하단에 명시적 연결이 없는 서브넷이라는 공간에 할당되어 있다.
서브넷 연결 편집 버튼을 클릭해 해당 서브넷을 라우팅 테이블에 연결 해준다.
Public 서브넷은 라우팅 테이블을 공유한다고 했다. 그렇기 때문에 하나의 라우팅 테이블에 현재 2개의 Public 서브넷을 선택하고 연결을 저장한다.
Private 서브넷은 각각 하나의 라우팅 테이블에 연결 해 준다.
연결을 모두 마치면 기본적으로 생성된 라우팅 테이블 1개를 제외한 총 3개의 라우팅 테이블이 존재하고, public 라우팅 테이블은 서브넷이 2개 연결되고, private 라우팅 테이블은 각 각 서브넷이 1개씩 연결되어 있는것을 볼 수 있다.
게이트웨이는 VPC와 인터넷간의 통신을 할 수 있게 해준다. AWS에는 Internet Gateway와 NAT Gateway가 존재한다.
Internet Gateway는 완전 오픈된 인터넷 통로로 외부 인터넷의 접근을 허용한다. 기존에 생성해둔 Internet Gateway를 라우팅 테이블의 대상으로 지정 함으로써 해당 라우팅 테이블을 사용하는 서브넷은 외부 인터넷을 자유롭게 엑세스 할 수 있다.
public 라우팅 테이블을 클릭 한 후 우측 하단에 라우팅 편집 버튼을 클릭해준다.
위와 같은 화면이 등장하는데 대상은 0.0.0.0/0
으로 지정해 준다. 0.0.0.0/0
의 의미는 모든 트래픽에 대해 경로를 지정해 준다는 의미이며, 대상은 인터넷 게이트웨이를 지정해 모든 트래픽에 대해 외부 인터넷을 향하게 만들어준다.
NAT 게이트웨이도 Internet Gateway와 연결과정은 동일하다.
Private 라우팅 테이블 2개를 NAT Gateway를 대상으로 지정해 외부 인터넷에 엑세스가 가능하도록 지정 해 준다.
VPC의 기본적인 네트워크를 실제로 구축해 봤다. 맨 위에 위치한 사진에서 로드밸런서, EC2, RDS와 같이 서비스에 필요한 요소를 제외하고 생성을 진행해 봤다.
처음에는 구조에 대해서 이해가 가지 않았을 수도 있다. 하지만 VPC생성을 같이 진행하고, 위 구조도를 다시 한번 살펴보면, 구조가 이해가 될 것이다.
다음엔 실제로 서비스에 필요한 인스턴스를 생성해 보면서 웹 서버를 배포해 볼것이다.