이 연재글은 AWS CloudFormation의 1번째 글입니다.

Amazon VPC( Virtual Private Cloud )

AWS에서 인프라의 구성의 시작은 Amazon Virtual Private Cloud(Amazon VPC)라고 볼 수 있습니다. VPC는 사용자의 AWS 계정 전용 가상 네트워크입니다. AWS는 기본적으로 다양한 고객들이 공용으로 사용하는 환경인데 이 환경 위에 EC2나 RDS 등의 리소스를 설치하여 사용합니다. 클라우드 위에 생성한 리소스들은 네트워크를 통해 서로 접근하고 통신하는데 만약 개인 네트워크가 존재하지 않는다면 한정된 공인 ip의 네트워크 안에서 서로 충돌되지 않는 범위 내에서 인프라를 설치하고 사용해야 합니다. 이렇게 사용하면 너무 불편하므로 VPC가 나온 것이며 VPC를 사용하면 사용자가 정의한 가상 네트워크에서 AWS 리소스를 사용할 수 있습니다. 쉽게 말해 사용자의 AWS 계정 내에서 리소스들을 설치할 논리적으로 격리된 가상의 네트워크(영토! 땅!)를 만들어주는 기능을 VPC라고 합니다.

  • 공인 ip 네트워크와는 구별되는 나만의 전용 사설 ip 대역의 네트워크를 만들어 사용할 수 있습니다.
  • 전용의 사설 ip 대역을 나누어 구역을 정의하므로 aws 리소스들을 용도에 맞게 그룹핑하여 관리할 수 있습니다.

VPC에서 사용할 수 있는 가상 IP 대역 정하기

사설 ip는 모든 대역을 사용할 수 있는 것은 아닙니다. 공인 ip와 사설 ip로 사용할 수 있는 ip 대역은 이미 정해져 있으며 VPC를 생성할 때는 다음의 3가지 사설 ip 대역을 선택할 수 있습니다.

  • 10.0.0.0~10.255.255.255
  • 172.16.0.0~172.31.255.255
  • 192.168.0.0~192.168.255.255

위와 같은 IP 대역을 짧게 표시해주는 방식을 CIDR이라고 하는데 CIDR형식으로 표현하면 다음과 같이 표현됩니다.

  • 10.0.0.0/8
  • 172.16.0.0/11
  • 192.168.0.0/16

아래의 CIDR Calculator를 통해 IP 대역을 확인할 수 있습니다.

https://www.subnet-calculator.com/cidr.php

10.0.0.0/8 대역은 10.0.0.0~10.255.255.255의 범위를 갖고 최대 16,777,214개의 IP를 사용할 수 있습니다.

동일하게 계산해보면 172.16.0.0/11은 2,097,150개의 IP를 사용할 수 있고, 192.168.0.0/16은 65,534개의 IP를 사용할 수 있습니다. 넓은 IP대역과 향 후 여러 개의 VPC 사용을 고려하고 있다면 10.0.0.0/8 대역을 분할해서 VPC를 생성하는 것이 좋습니다.

여러개의 VPC 생성시 고려해야 할 사항

VPC안의 네트워크는 격리된 네트워크이기 때문에 중복된 IP대역을 가진 여러 VPC를 생성하더라도 동작하는데는 전혀 문제가 없습니다. 다만 한 계정 내에서 VPC를 여러 개 생성할 경우 하나의 VPC에 위치한 리소스들이 다른 VPC의 리소스들과 통신이 필요한 경우 IP가 충돌하면 문제가 생길 수 있습니다. 이러한 경우에는 서로의 VPC IP대역이 겹치지 않도록 생성해야 VPC 간 리소스들의 통신이 가능하니 염두에 두고 VPC를 생성해야 합니다.

Subnet (public, private)으로 ip대역을 세분화 하기

위에서 정한 VPC CIDR을 Subnet으로 나누어 좀 더 세분화하여 관리할 수 있습니다. subnet에는 public, private 두 가지 타입이 있는데 public subnet은 인터넷에 직접 연결해야 하는 인스턴스를, private subnet에는 인터넷으로부터 숨겨야 하는 인스턴스를 배치할 수 있습니다. 보통 public subnet에는 webserver 인스턴스가 위치하고 private subnet에는 db 인스턴스가 위치합니다. 그럼 aws에서 subnet은 보통 몇 개씩 생성하는지 알아보겠습니다.

subnet은 해당 계정에서 지원하는 az(availability zone) 개수 만큼 생성

aws는 보통 크게 region(북미, 서울, 싱가포르, 런던 등…)으로 구획이 나뉘는데 region 하위에 az(availability zone)로 구획이 한번 더 나누어집니다. 이렇게 나뉘는 이유는 고가용성 때문인데 한 region안에 aws 리소스를 생성하면 az 내에 하나씩 동일한 리소스가 생성됩니다. 즉 여러 개의 az에 리소스를 분산시킴으로써 하나의 리소스에 문제가 생기더라도 다른 az의 리소스를 이용하여 지속적으로 정상 운영이 가능한 서비스를 유지하는 것입니다.

보통 Region안에는 az가 3~4개 존재합니다. 즉 subnet은 az의 개수에 따라 3~4개씩 보통 생성한다고 보면 됩니다.

subnet CIDR 정하기

VPC CIDR을 10.10.0.0/16 (65534개의 ip)으로 정했다고 가정하고 4개의 az가 존재하는 region에 4개의 subnet을 만든다고 가정하면 다음과 같이 subnet CIDR을 정할 수 있습니다. subnet 대역 역시 아래 계산기 링크를 통해 확인할 수 있습니다.

https://www.subnet-calculator.com/subnet.php

10.10.0.0/19을 조회하면 8,190개의 ip를 사용할 수 있다고 나오며 65,534개의 ip를 8개의 subnet이 나눠 가질 경우 개당 8,190개로 정확히 나누어 가질 수 있게 됩니다.

public subnet 4개

  • public-subnet-a – 10.10.0.0/19 (10.10.0.1 – 10.10.31.254)
  • public-subnet-b – 10.10.32.0/19 (10.10.32.1 – 10.10.63.254)
  • public-subnet-c – 10.10.64.0/19 (10.10.64.1 – 10.10.95.254)
  • public-subnet-d – 10.10.96.0/19 (10.10.96.1 – 10.10.127.254)

private subnet 4개

  • private-subnet-a – 10.10.128.0/19 (10.10.128.1 – 10.10.159.254)
  • private-subnet-b – 10.10.160.0/19 (10.10.160.1 – 10.10.191.254)
  • private-subnet-c – 10.10.192.0/19 (10.10.192.1 – 10.10.223.254)
  • private-subnet-d – 10.10.224.0/19 (10.10.224.1 – 10.10.255.254)

Router, Route Table

네트워크 요청이 발생하면 데이터는 우선 Router로 향하게 됩니다. Router에서 각 목적지에 대한 주소를 파악하고 해당 목적지로 이동하는데 그 이정표를 Route Table이 제공합니다. public subnet, private subnet용 Router와 Route Table이 각각 존재하며 그림으로 표시하면 아래와 같습니다.

Internet Gateway

인터넷 게이트웨이는 VPC와 인터넷 간에 통신할 수 있게 해줍니다. VPC의 퍼블릭 서브넷에 속한 인스턴스에 대해 인터넷 송수신 액세스를 활성화하려면 인터넷 게이트웨이를 생성하여 VPC에 연결합니다. 그리고 인터넷 바인딩된 트래픽을 인터넷 게이트웨이로 전달하는 라우팅을 Public 서브넷의 Route Table에 추가하면 됩니다.

Nat Gateway

private subnet에 위치한 인스턴스는 기본 세팅으로는 외부에서 접근도 외부로의 접근도 안되는 상태입니다. NAT(network address translation) Gateway를 사용하면 프라이빗 서브넷의 인스턴스를 인터넷 또는 기타 AWS 서비스에 연결할 수 있습니다.

  • 외부로 접속하기 위해 NatGateway는 Public Subnet에 위치해야 합니다.
  • NatGateway를 통해 외부 인터넷과 통신하려면 NatGateway에 EIP(Elastic IP = 고정IP)가 필요합니다.
  • 인터넷 바인딩된 트래픽을 NAT Gateway로 전달하는 라우팅을 Private 서브넷의 라우팅 테이블에 추가해야 합니다.

여기까지 하면 대략적인 VPC의 모습이 완성됩니다. AWS Console을 이용하면 VPC 리소스들을 하나씩 생성해 볼 수 있으며 실습에서는 Cloudformation Template을 작성하여 리소스를 관리하는 실습을 해보겠습니다.

연재글 이동
[다음글] CloudFormation으로 AWS 인프라관리 – Virtual Private Cloud(VPC) 생성하기