본문 바로가기
Server&Infra/Network

AWS VPC 인프라 구축(Subnet, Routing, Internet Gateway)

by Deoking 2023. 4. 17.
반응형

Overview

본 글에서는 VPC 네트워크를 AWS 리소스로 구성하는 방법에 대해 기술합니다.

 


1. VPC(Virtual Private Cloud)

VPC는 사용자가 정의하는 aws 계정 사용자 전용 가상의 네트워크입니다.
사용자는 자기가 원하는 대로 IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워크 환경을 구성해 VPC를 생성할 수 있습니다.

아래 그림에서 알 수 있듯이 AWS Cloud 내에는 IDC의 집합인 'Region'이 존재하며 Region은 2개의 'Availability Zone(AZ)'으로 이루어져 있습니다. 

VPC는 각 region에 종속되며 RFC1918 규약에 따라 사설망은 다음과 같은 대역을 사용하도록 권고하고 있습니다.

The Internet Assigned Numbers Authority (IANA) has reserved the following three blocks of the IP address space for private internets:

10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

 

AWS VPC는 On-premise와 동일한 대역의 사설 IP를 이용해 범위 내에서 vpc의 ipv4 CIDR영역을 설정할 수 있습니다.
유의할 점은, 원래 규정된 사설 IP 범위와는 다르게 AWS에서는 /16 ~ /28 비트의 서브넷 마스크만을 허용한다는 것입니다. 또한 VPC에서 한번 설정된 IP 대역은 수정할 수 없으며, 각각의 VPC는 독립적이기 때문에 서로 통신할 수 없습니다. 만일 통신을 원한다면 VPC 피어링(peering) 서비스를 통해 VPC 간에 트래픽을 라우팅 할 수 있도록 설정할 수 있습니다.

 

VPC 생성하기

먼저, 리전(아시아 태평양 (서울) ap-northeast-2)을 확인하고 AWS VPC 콘솔로 이동합니다.

'VPC 생성' 버튼을 클릭합니다.

서브넷 등 기타 설정은 나중에 설정하기로 하고 'VPC만' 선택하고 이름을 입력합니다.
IPv4 CIDR은 10.0.0.0/16 으로 입력 후 'VPC 생성' 클릭.(원하는 대역으로 설정)

 

아래와 같이 설정한 VPC가 생성된 걸 볼 수 있습니다.
다음으로 VPC를 선택 한 후 '작업'을 클릭 후 'VPC 설정 편집'을 클릭하고 'DNS 호스트 이름 활성화'를 체크해 주고 변경 사항을 저장합니다.

 

 

2. 서브넷 (Subnet)

서브넷은 VPC의 IP 주소를 나누어 리소스가 배치되는 물리적인 주소 범위를 뜻합니다. 하나의 VPC에 N개의 서브넷을 가질 수 있으며 하나의 AZ에만 생성이 가능합니다.
서브넷 역시 VPC와 같이 CIDR 범위는 /16(65536개) ~ /28(16개)을 사용할 수 있으며, VPC CIDR 블록 범위에 속하는 CIDR 블록을 지정할 수 있습니다.

아래 그림은 VPC(10.0.0.10/6) 대역에서 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24, 10.0.4.0/24의 4개의 대역을 나누어 서브넷을 구성하고 있습니다.

참고로 서브넷 대역폭을 지정해 호스트를 사용할 때 유의할 점이 있습니다. 
범위의 첫 번째 주소는 네트워크 주소, 마지막 주소는 브로드캐스트 주소이므로 사용할 수 없고, AWS의 경우 관리용으로 사용하는 IP도 존재하는데 이는 AWS의 관리 IP로서 사용자가 사용할 수 없는 AWS의 예약 주소입니다.

(10.0.0.0/24 기준)

10.0.0.0 네트워크 주소 (Network ID)
10.0.0.1 AWS에서 VPC 라우터용으로 예약 (Default Gateway)
10.0.0.2 DNS 서버 주소
DNS 서버의 IP 주소는 기본 VPC 네트워크 범위에 2를 더한 주소이다.
CIDR 블록이 여러 개인 VPC의 경우, DNS 서버의 IP 주소가 기본 CIDR에 위치하게 된다.
10.0.0.3 AWS에서 앞으로 사용하려고 예약한 주소
10.0.0.255 네트워크 브로드캐스트 주소


결과적으로 총 사용가능한 주소에 5개를 제외하면 실제 사용 가능한 주소 수가 됪니다.

 

Public Subnet/Private Subnet

서브넷은 Pblic SubnetPrivate Subnet으로 구분됩니다. 따라서 public subnet에 존재하는 인스턴스는 Public IP와 Elastic IP를 보유하여 인터넷에 연결되어 아웃바운드, 인바운드 트래픽을 주고받을 수 있는 반면, private subnet은 외부에 노출이 되어 있지 않기 때문에 접근할 수 없습니다.

- Private Subnet : 인터넷에 접근 불가능한 subnet (VPC 내부에서만 통신)
- Public Subnet : 인터넷에 접근 가능한 Subnet (VPC 외부/내부와 통신)

이처럼 Private 서브넷 내부의 인스턴스들은 오직 다른 서브넷과만 연결이 가능한데, 만일 데이터를 업데이트하는데 인터넷 연결이 필수라면 뒤에 배울 NAT instance를 통해서 Private 내부의 인스턴스들이 인터넷을 가능하게 만들 수도 있습니다.

 

Subnet 생성하기

아래와 같이 2개의 AZ에 서브넷을 Public 2개, Private 2개로 구성해 봅니다.

구분 ap-northeast-2a (AZ) ap-northeast-2b (AZ)
Public Subnet 10.0.1.0/24 10.0.2.0/24
Private Subnet 10.0.2.0/24 10.0.140/24

 

콘솔 우측 메뉴에서 '서브넷' 클릭 후 우측 '서브넷 생성'을 클릭합니다.

 

위에서 생성한 VPC를 선택합니다.
서브넷 이름을 작성하고, 가용 영역과 IPv4 CIDR 블록을 위 표와 같이 설정 후 '서브넷 생성' 버튼을 클릭합니다.

 

위 과정을 만들고자 하는 서브넷 수만큼 반복하면 아래와 같이 생성된 서브넷을 볼 수 있습니다.

 

퍼블릭 서브넷에 public IP 자동 할당 설정

public subnet은 외부 인터넷과 통신이 가능한 서브넷입니다. 때문에 서브넷 내 리소스들은 public ip가 할당되어야 하며 리소스 생성 시 매번 설정을 해주어야 합니다.

이를 자동화해주는 옵션을 제공하고 있는데, 서브넷을 선택하고 우측 '작업 > 서브넷 설정 편집'을 클릭합니다.
'퍼블릭 IPv4 주소 자동 할당 활성화'를 체크한 후 저장 하기를 클릭합니다.

 

 

3. 라우팅 테이블 (Routing Table)

각각의 Subnet은 서로 다른 네트워크 영역을 가지고 있습니다. 따라서, 한 Subnet이 다른 Subnet으로 가기 위해서는 'Routing'이 필요하게 되고, 라우팅 테이블은 VPC 안에서 발생한 네트워크 요청을 처리하기 위해 어디로 트래픽을 전송해야 하는지 알려주는 표지판 역할을 수행합니다.

각 서브넷들은 이러한 네트워크 트래픽 전달 규칙에 해당하는 라우팅 테이블을 가지고 있으며, 요청이 발생하면 이 라우트 테이블을 사용해서 목적지를 찾게 되는 것입니다.

 

참고로, AWS VPC 내부(모든 Sunbet)에 대해서는 디폴트로 Routing이 자동으로 생성 되며, 별도의 설정 없이 한 Subnet에서 다른 Subnet으로 통신이 가능합니다.

라우팅 테이블 생성
아래와 같이 라우팅 테이블을 생성해보겠습니다.

  • test-public-rt: Public subnet의 라우팅 테이블
  • test-private-rt: Private subnet의 라우팅 테이블

기본적으로 명명 되지않은('-') 라우팅 테이블 하나가 생성되어져 있습니다. 이 테이블을 그대로 활용해 private 테이블로 활용 하겠습니다. 

추가적으로 public 라우팅 테이블만 생성해줍니다.

 

라우팅 테이블 생성 결과는 아래와 같습니다.

 

퍼블릭 라우팅 테이블에 서브넷 등록하기

생성된 퍼블릭 라우팅 테이블에 퍼블릭 서브넷을 등록해 보겠습니다.
퍼블릭 테이블을 선택하고 아래 '서브넷 연결' 탭으로 이동 후 '서브넷 연결 편집'을 클릭합니다.

 

이용 가능한 서브넷 목록중 퍼블릭 서브넷 2개를 선택 후 '연결 저장'합니다.

 

 

4. 인터넷 게이트웨이 (Internet Gateway)

VPC는 기본적으로 격리된 네트워크 환경입니다. 따라서 VPC에서 생성된 리소스들은 기본적으로 인터넷을 사용할 수 없기 때문에 인터넷 게이트웨이는 VPC의 인스턴스와 인터넷간에 통신을 할 수 있게해줍니다.

인터넷 게이트웨이는 VPC의 리소스와 인터넷 간의 통신을 활성화하기 위해 VPC에 연결하는 통로입니다. 외부망으로 데이터를 보내야한다면 당연히 인터넷 게이트웨이로 트래픽을 전달해야 합니다.

 

앞서 생성한 서브넷 private 2개, public 2개는 실제로는 private 서브넷 4개 이고, 인터넷 게이트웨이가 라우팅 테이블에 등록이 되어야 public 서브넷이라 할 수 있습니다.

위 라우팅 테이블 예시를 보면,
Destination에 10.0.0.0/16은 local 타겟으로 가르키고 있습니다. 이는 해당 대역 내의 ip는 모두 로컬에서 찾아 라우팅 한다는 의미입니다. 아래 0.0.0.0/0(그 외 모든 트레픽)은 인터넷 게이트웨이로 라우팅 한다는 의미입니다.

 

인터넷 게이트웨이 생성하기

좌측 '인터넷 게이트웨이' > '인터넷 게이트웨이 생성' 버튼을 클릭합니다.

 

이름 입력 후 간단히 생성 가능합니다.

 

아직 VPC에 연결되지 않아 상태는 Detached 로 표시됩니다. 해당 항목을 선택하고 '작업 > VPC 연결' 을 클릭하고 VPC를 연결해줍니다.

 

라우팅 테이블에 인터넷 게이트웨이 연결하기

인터넷 게이트웨이를 연결을 위해 퍼블릭 라우팅 테이블을 선택하고 하단 '라우팅' 탭 클릭 후 '라우팅 편집' 버튼을 클릭합니다.

 

우측 '라우팅 추가' 버튼을 클릭하고 외부의 모든 네트워크 트래픽(0.0.0.0/0)을 대상으로 인터넷 게이트 웨이를 통과할 수 있도록 규칙을 설정합니다.

 

5. Subnet에 EC2 인스턴스 생성 및 테스트

지금까지 설정한 VPC 네트워크의 서브넷에 EC2 인스턴스를 추가해 보겠습니다.
테스트를 위한 인스턴스 이기 때문에 OS와 인스턴스 사양은 기본값으로 진행하고 아래와 같이 네트워크 설정만 public과 private를 구분하여 생성해 줍니다.

Public 서브넷 인스턴스 생성

위에서 생성했던 VPC와 public subnet을 선택해 줍니다. 퍼블릭 IP 나동 할당은 '활성화' 해주고 보안 그룹 필요시 생성하여 설정해 줍니다. 저는 테스트 용도이기 때문에 기존 보안그룹으로 선택하겠습니다.

 

Private 서브넷 인스턴스 생성

위에서 생성했던 VPC와 private subnet을 선택해 줍니다. 퍼블릭 IP 나동 할당은 '비활성화' 해주고 보안 그룹 필요시 생성하여 설정해 줍니다. 저는 테스트 용도이기 때문에 기존 보안그룹으로 선택하겠습니다.

 

추가적으로,

VPC에서 AWS Resource(EC2 등)가 외부 인터넷과 통신하고자 할 경우 아래 항목을 참고하세요.

  1. Resource의 공인 IP가 존재해야 합니다.
  2. Resource가 속해있는 서브넷의 라우팅 테이블에 '0.0.0.0/0'을 허용하는 Internet Gateway가 연결되어 있어야 합니다.
  3. 보안 설정(Network ACL, Security Group)에 특정 트래픽을 허용합니다. (아래 글을 참고하세요~)
 

AWS VPC 보안 설정(Security Group, Network ACL)

 

deoking.tistory.com

 

 


Conclusion

지금까지 VPC 네트워크를 구축하는 과정에 대해서 알아보았습니다. 가장 기본 형태의 VPC 구성으로 점차 필요한 구성들을 채워나갈 예정입니다. (NAT-gateway, 방화벽 설정, Bastion Host 등).
-
본 글은 개인적 기록을 목적으로 작성하였습니다.
작게나마 도움 되셨기를 바라며, 더 좋은 의견이나 잘못된 부분이 있다면 댓글을 남겨주세요~

 

반응형

댓글