이번 페이지에서는 네트워크 구성에 대한 VPC, Subnet, Route Table, Internet Gateway 구축에 대해 알아보고자 합니다. 그전에 먼저 AWS에서 제공하는 VPC와 Subnet의 개념에 대해 간단히 살펴 보도록 하겠습니다.
AWS VPC (Virtual Private Cloud) 란?
AWS Cloud 내부에서 구성되는 사용자의 AWS 계정 전용 가상 네트워크로 이곳에서 AWS 리소스를 시작할 수 있습니다. AWS에서는 디폴트로 Amazon EC2-VPC를 제공하지만 Amazon VPC는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사합니다.
또한 AWS VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. IP 주소 범위와 VPC 범위를 설정하고 서브넷을 추가하고 보안 그룹을 연결한 다음 라우팅 테이블을 구성합니다.
이 블로그에서는 임의적으로 AWS에서 디폴트로 지원하는 EC2-VPC가 아닌 Amazon VPC를 중점적으로 다루도록 하겠습니다.
VPC는 Amazon 콘솔에서 생성됩니다. 또한 하나의 VPC는 하나의 Region내에서만 생성이 가능하지만 두개 이상의 리전에 걸치는 것은 불가능합니다. 그렇지만 하나의 VPC는 여러개의 Amazon Availability Zone (이하 AZ) 에 걸쳐서 생성될 수 있습니다. 또한 가질 수 있는 IP 주소의 Range는 2^16 = 65535로 제한됩니다.
Public Subnet & Private Subnet 이란?
VPC내에는 보통 Public Subnet과 Private Subnet으로 구성되어 있습니다.
Public Subnet: Public Subnet의 특징은 Internet Gateway, ELB, 그리고 Public IP/Elastic IP를 가진 인스턴스를 내부에 가지고 있습니다. 특히, Public Subnet 내에 있는 Nat Instance를 통하여 Private Subnet내에 있는 instances이 인터넷이 가능하게 합니다.
Private Subnet: 기본적으로 외부와 차단되어 있습니다. Private Subnet내의 인스턴스들은 private ip만을 가지고 있으며internet inbound/outbound가 불가능 하고 오직 다른 서브넷과의 연결만이 가능합니다.
다음 아키텍처를 살펴보겠습니다
위의 아키텍처는 2개의 가용영역에 2개의 public subnet과 4개의 private subnet으로 구성되어 있습니다. Private subnet 1, 2에는 웹서버가 private subnet 3,4에는 db인스턴스가 위치하게 됩니다. 논리적으로 분류된 두 가용영역에 각 두개의 서브넷들과 인스턴스를 배치함으로써 HA(High Availability, 고가용성)을 높였습니다.
여기 사용되는 VPC 대역대는 172.16.0.0/24 이며 서브네팅은 public/private 모두 6개의 서브넷으로 나누었고(public subnet 두개, private subnet 4개) 각 subnet당 27개의 네트워크 ip를 할당하였습니다 (*AWS의 subnet에서는 앞 4개, 뒤 1개의 IP는 관리 용도로 사용할 수 없다는 것을 참고해 주세요)
다시 정리하자면,
VPC 대역대: 172.16.0.0/24
public subnet1: 172.16.0.0/27
public subnet2: 172.16.0.32/27
private subnet1 : 172.16.0.64/27
private subnet2: 172.16.0.96/27
private subnet3: 172.16.0.128/27
private subnet4: 172.16.0.160/27
VPC 대역대를 6개의 서브넷으로 나누었고 각 서브넷은 27개의 네트워크 ip를 가지고 있습니다.
그럼 VPC와 Public/Private Subnet을 구축해 보도록 하겠습니다
VPC 구축하기
1. [Services] -> VPC 검색 또는 타이핑
2. [Your VPCs] -> Create VPC 클릭합니다
3. 다음과 같은 창이 뜹니다. 여기에 vpc 이름을 지정하고 VPC 대역대를 입력합니다. 입력후 [Create]버튼을 클릭합니다.
그러면 VPC가 생성된 것을 볼 수 있습니다. 위의 172.31.0.0/16은 AWS에서 디폴트로 설정되어 있는 VPC입니다 (EC2-VPC)
이제 Subnet를 생성할 차례입니다.
Subnet 구축하기
1. [Services] -> [VPC] -> [Subnets] 로 이동 후 [Create Subnet] 클릭합니다
2. subnet를 생성하는 창이 뜹니다. 지금 만드는 서브넷은 public subnet으로 활용할 것이기 때문에 tulip1-public1이라 이름 지었습니다. VPC응 위에 생성한 VPC를 선택하였고 또한 가용영억 2a에 배치시킨것을 확인하실 수 있습니다. IPv4 CIDR block에 public subnet1을 위한 할당된 네트워크 주소를 입력 후 오른쪽 아래 [Create]버튼을 클릭합니다
서브넷이 만들어 진 것을 확인할 수 있습니다
3. 이러한 방식으로 나머지 서브넷 또한 만들어 주면 아래와 같이 서브넷이 구축된 것을 볼 수 있습니다 (public1, private1, private3는 가용영역 2a에 배치하고 public2, private2, private4는 가용영역 2c에 배치합니다)
Internet Gateway (인터넷 게이트웨이)
인터넷 게이트웨이는 수평 확장되고 가용성이 높은 중복 VPC 구성 요소로, VPC의 인스턴스와 인터넷 간에 통신할 수 있게 해줍니다. 따라서 네트워크 트래픽에 가용성 위험이나 대역폭 제약 조건이 발생하지 않습니다.
인터넷 게이트웨이에는 인터넷 라우팅 가능 트래픽에 대한 VPC 라우팅 테이블에 대상을 제공하고, 퍼블릭 IPv4 주소가 할당된 인스턴스에 대해 NAT(네트워크 주소 변환)를 수행하는 두 가지 목적이 있습니다. (인터넷 게이트웨이 자세한 설명 클릭 -> AWS document)
그럼 인터넷 게이트웨이를 설치해 보도록 하겠습니다.
1. [Services] -> [Internet Gateways] -> [Create internet gateway] 로 들어가 아래와 같이 ‘Name tag’ 란에 인터넷 게이트웨이를 위한 이름을 정해줍니다
2. [Create]버튼을 누르면 아래와 같이 성공적으로 인터넷 게이트웨이가 생성된 것을 볼 수 있습니다.
3. 이 생성된 게이트웨이를 활성화 시켜 주어야만 합니다. [Actions] 탭의 [Attach to VPC]를 클릭해 주세요
5. 어떤 VCP에 인터넷 게이트웨이를 적용할 지 나옵니다. Default VPC가 아닌 직접 생성한 VPC에 연결시켜 주면 됩니다.
Route Table
라우트 테이블은 ip address에 routing 경로를 정의하여 subnet에서 밖으로 나가는 outbound traffic에 대한 routing 경로를 설정하는 것입니다. AWS에서 라우트 테이블은 콘솔에서 설정이 가능합니다. Public Subnet을 위한 Route Table과 Private Subnet을 위한 Route Table 두가지를 설정해 보도록 하겠습니다. 먼저 Public Route 테이블 입니다.
1. [Services] -> [Route Table] -> [Create Route Table]
2. 다음의 창이 뜹니다. 이름과 VPC를 선택해 줍니다. [Yes, Create]버튼을 눌러 줍니다
그러면 다음과 같이 라우트 테이블이 생성된 것을 볼수 있습니다
3. 아래에 표시된 것과 같이 어떠한 서브넷과도 연결되 있지 않았다고 나와 있으므로 Public Subnet 과 연결을 시켜주어야 합니다. [Edit] 클릭해 주세요
4. 아래와 같이 public subnet을 체크한 후 [Save]를 클릭하세요
그러면 아래와 같이 성공적으로 두개의 public subnet에 tulip1-RT가 연결되어 있음을 볼 수 있습니다
5. [Routes]탭을 클릭해 줍니다. [Add another route]를 클릭하고 0.0.0.0/0 으로 destination을 잡고 target에 아까 설정한 인터넷 게이트웨이를 선택해 줍니다. 그 이후 [Save]버튼을 눌러줍니다. 0.0.0.0/0은 모든 네트워크를 의미하여 인터넷과의 연결을 위한 것입니다.
6. private subnet을 위한 route를 생성하겠습니다. 1번과 2번까지의 과정이 같습니다. private subnet을 연결시켜주고 route경로 설정이 다를 뿐입니다. private subnet 연결 과정부터 살펴보겠습니다.
[Subnet Association]탭으로 이동하여 [Edit]버튼을 눌러 전의 과정과 동일하게, 하지만 private subnets를 선택해 주시면 됩니다. [Save]를 클릭해서 저장해 주세요
7. [Edit]버튼을 클릭하여 아래와 같이 편집해 줍니다. Destination은 0.0.0.0/0으로 Target은 Nat서버의 Instance의 Instance IP을 복사해서 붙여넣어 줍니다 (아직 Nat서버를 생성하기 전이므로 추후 포스팅에서 다시 다룰 것이기에 이 과정을 생략하셔도 됩니다!)
이상으로 VPC, Subnet, Route Table, Internet Gateway까지의 구축 과정이었습니다. 다음 단계를 위한 과정이니 참고해 주시길 바라며 문의 사항은 NDS SA팀으로 연락 주시길 바랍니다.
감사합니다,
SA 이현지