VPC 구축하기 (AWS로 시작하는 인프라 구축의 정석)
본 포스트는 AWS로 시작하는 인프라 구축의 정석 책을 활용한 스터디 기록입니다.
(CHAPTER 4 가상 네트워크 만들기)
네트워크
네트워크란?
네트워크는 일상 생활 속에서도 많이 사용하고 전문 용어로도 많이 사용되는 단어인데요.
네트워크의 정의는 무엇일까요? 국제 전기 전자 공학회 IEEE에서는
몇 개의 독립적인 장치가 적절한 영역 내에서 적당히 빠른 속도로 물리적 통신 채널을 통하여 서로가 직접 통신할 수 있도록 지원해주는 데이터 통신 체계
가 네트워크이다! 라고 정의하고 있습니다.
저는 개인적으로 독립적인 장치들끼리 직접 통신할 수 있도록 해주는 것이 네트워크의 핵심이 아닌가 싶습니다.
클라우드 환경에서 네트워크를 구축하기
우리는 AWS에 대해서 공부를 하고 있습니다. AWS 내에는 다양한 리소스가 있고 그 리소스들끼리도 통신을 해야합니다. 통신을 하기 위해서는 아까 위에서 이야기 했듯이 통신을 할 수 있도록 지원해주는 네트워크가 있어야겠죠!
클라우드를 이용하지 않는 네트워크에서는 서버나 네트워크 장비, 이를 연결하는 케이블 등을 모두 물리적인 것으로 구축하고 연결해야 합니다. 그러나 AWS와 같은 클라우드 환경에서는 손쉽게 나만의 네트워크를 구축할 수 있습니다.
이번 포스트에서는 AWS를 사용하여 가상 네트워크를 구축해나가는 방법에 대해 알아볼 예정입니다.
VPC
AWS를 이용해 네트워크를 구축할 때에는 VPC라는 시스템을 이용합니다.
(1) VPC란?
여기서 VPC_(Virtual Private Cloud)_란 자체 데이터 센터에서 운영하는 기존 네트워크와 유사한 가상의 네트워크를 의미합니다. 우리는 AWS VPC를 사용하여 논리적으로 격리된 가상 네트워크를 구성하고 그 네트워크 안에서 AWS 리소스를 사용할 수 있게 되는 것입니다!
VPC 생성하기 (VPC만)
AWS에서 VPC를 생성하기 위해 콘솔로 접속하면 다음과 같은 화면이 나오면서 VPC 생성을 위한 설정을 해주어야 합니다. (VPC만 만들 수 있고 VPC 외에 서브넷등을 함께 만들 수 있지만 여기서는 따로 만들어서 연결해주도록 하겠습니다)
IPv4 CIDR 블록 / IPv6 CIDR 블록
IP나 CIDR에 대한 개념이 부족하신 분들은 VPC의 CIDR 블록의 사용 이유와 설정 방법에 대한 글을 먼저 읽고 오시면 더욱 쉽게 이해하실 수 있을 것 같습니다.
IPv4 CIDR 블록은 VPC에서 사용하는 프라이빗 네트워크용 IP 주소의 범위를 지정하는 것입니다. 프라이빗 네트워크에서 이용할 수 있는 IP 주소 범위는 다음 세 가지로 제공됩니다.
24비트 블록: 10.0.0.0 ~ 10.255.255.255
20비트 블록: 172.16.0.0 ~ 172.31.255.255
16비트 블록: 192.168.0.0 ~ 192.168.255.255
일반적으로 IP 주소의 범위가 넓은 편이 같은 네트워크 안에 많은 IP 주소를 제공할 수 있지만 VPC로 지정할 수 있는 서브넷 마스크는 최대 16비트까지이므로 어떤 범위를 이용해도 달라지는 점은 없습니다. IPv6 트래픽까지 지원하고자 하면 IPv6 CIDR 블록을 설정해줄 수 있습니다.
테넌시
테넌시는 VPC 리소스의 전용 하드웨어에서의 실행 여부를 뜻하는 것으로, 하드웨어가 공유 하드웨어를 사용할 것인지 혹은 전용 하드웨어를 사용할 것인지를 선택하는 항목입니다. 전용을 선택할 경우 VPC 내의 인스턴스는 항상 전용 하드웨어에서 전용 인스턴스로 실행되며 별도 비용이 추가됩니다.
가용 영역
가용 영역_(Availability Zone)_이란 AWS 하나의 리전 내에 중복 전원, 네트워킹 및 연결이 있는 하나 이상의 개별 데이터 센터를 의미합니다. 여러 AZ를 사용하면 높은 가용성과 내결함성 및 확장성을 갖출 수 있게 되며, 가용영역이 다르면 독립되었음을 보장할 수 있으므로 가용 영역별로 서브넷을 제공하면 여러 서브넷을 동시에 이용하지 못하는 가능성을 낮출 수 있습니다.
서브넷
VPC 내에는 하나 이상의 서브넷을 만들어야 하는데요! 앞서 이야기했듯이 VPC를 만들면서 함께 생성할 수도 있고 VPC만 만든 뒤에 서브넷은 따로 생성하여 연결할 수도 있습니다.
서브넷이란 말 그대로 작은 네트워크입니다. 하나의 네트워크가 있고 그 안에서 분할되어 나눠진 작은 네트워크를 서브넷이라고 하며 VPC의 IP 주소 범위를 나누는 단위가 됩니다.
IP 주소를 나누는 이유는 크게 두가지가 있습니다.
- 역할 분리
- 리소스가 담당하는 역할에 따라 IP를 분리할 수 있도록 합니다.
- 외부 인터넷과 통신할 리소스인지 내부 네트워크 내에서만 사용할 리소스인지를 리소스에 따라 분리하는 것이 아닌 그룹으로 분리하여 설정 누락 등을 피할 수 있습니다.
- 기기 분리
- 내결함성을 높이기 위해 기기를 분리합니다.
- 서브넷을 나누어 하나의 서브넷 내의 리소스를 이용할 수 없게 된다하더라도 다른 서브넷의 리소스를 사용할 수 있도록 하기 위해 분리합니다.
내결함성 하드웨어 고장 등 예측할 수 없는 사태가 발생했을 때 시스템 자체를 사용하지 못하게 되는 것을 방지하는 능력
(1) 서브넷 IPv4 CIDR 설계 방법
서브넷은 한번 만들면 해당 서브넷이 이용하는 CIDR 블록은 변경할 수 없습니다!! 그렇기에 처음부터 아래의 두가지 항목을 고려하여 설계를 하고 서브넷을 생성해야 합니다.
- 생성할 서브넷의 수
- 서브넷 안에 생성할 리소스 수
이 두 항목은 트레이드오프 관계이기 때문에 적절히 잘 조율하는 것이 중요합니다. 일반적으로 서브넷 수와 리소스 수 각각에 여유를 두고 설정하는 것이 좋습니다.
만약 VPC의 IPv4 CIDR 블럭을 10.0.0.0/16으로 지정했다면.. 아래 표와 같은 경우의 수가 나올 수 있습니다!
서브넷의 CIDR 블록 | 서브넷 수 | 리소스 수 |
---|---|---|
{VPC 16비트}.{서브넷 8비트}.{리소스 8비트} | 256 | 256 - 5 |
{VPC 16비트}.{서브넷 4비트}.{리소스 12비트} | 16 | 4096 - 5 |
{VPC 16비트}.{서브넷 2비트}.{리소스 14비트} | 4 | 16384 - 5 |
리소스 수를 최대에서 5를 뺀 이유는 AWS에서는 5개의 값이 미리 예약되어 있어 개인적으로 사용할 수 없기 때문입니다!
10.0.0.0: 네트워크 주소
10.0.0.1: AWS에서 VPC 라우터용으로 예약한 주소
10.0.0.2: AWS에서 예약한 주소 (DNS 서버의 IP 주소는 기본 VPC 네트워크 범위에 2를 더한 주소)
10.0.0.3: AWS에서 앞으로 사용하려고 예약한 주소
10.0.0.255: 네트워크 브로드캐스트 주소. VPC에서는 브로드캐스트를 지원하지 않으므로, 이 주소를 예약합니다.
VPC에서 서브넷 탭으로 들어가 서브넷을 원하는 VPC에 생성할 수 있습니다.
인터넷 게이트웨이
인터넷 게이트웨이란 VPC에서 생성된 네트워크와 인터넷 사이의 통신을 가능하게 해주는 것입니다.
인터넷 게이트웨이가 없으면 인터넷과 VPC 안의 리소스는 서로 통신할 수 없기 때문에 외부 통신을 위해서는 VPC에 인터넷 게이트웨이를 연결해줘야 합니다. 또한 외부로의 직접적인 통신을 위해서는 Public Ip를 가지고 있어야 합니다.
NAT 게이트웨이
NAT(Network Address Translation) 게이트웨이는 네트워크 주소 변환 서비스입니다.
프라이빗 서브넷에 생성한 리소스는 인터넷에 접근할 수는 없어야 하지만 인터넷으로 내보낼 수는 있어야 합니다. 이러한 동작을 위해 인터넷 게이트웨이를 사용하는 리소스들처럼 public ip를 통해 직접 노출시키는 것이 아니라 NAT 게이트웨이를 사용하여 인터넷으로 내보내는 것만 가능하도록 만들어야 합니다.
private ip만 포함한 정보를 public ip도 포함한 정보로 변환하는 시스템을 NAT라고 합니다
라우팅 테이블
앞서 인터넷 게이트웨이와 NAT 게이트웨이를 사용하여 VPC 내부 리소스가 외부 인터넷과 통신하는 방법을 알아보았습니다! 그런데 VPC 내부의 서브넷들끼리는 어떻게 통신을 해야할까요? 예를 들어 public subnet 1에 있는 EC2에서 private subnet 1에 있는 RDS를 참조하고 싶은데 어떻게 연결해줄 수 있을까요?
AWS에서는 라우팅 테이블을 통해 서브넷 사이의 통신 경로를 설정해줄 수 있습니다!! 라우팅 테이블은 ‘이 서버에 접속할 때는 이 곳을 경유한다’라는 형식으로 테이블을 설정해줄 수 있습니다.
- 송신 대상지: 접속 대상 위치에 대한 정보로, IP 주소를 지정해줄 수 있습니다.
- 타깃: 경유지에 대한 정보로, 라우팅 테이블에서 지정할 수 있는 타깃 중 주로 <로컬, 인터넷 게이트웨이, NAT 게이트웨이, VPN 게이트웨이, VPC 피어링>을 사용합니다.
로컬: 동일 VPC 안의 리소스에 접근
인터넷 게이트웨이: 퍼블릭 서브넷에 생성된 리소스가 인터넷 서버와 통신
NAT 게이트웨이: 프라이빗 서브넷에 생성된 리소스가 인터넷 서버와 통신
VPN 게이트웨이: VPN을 통해 접속된 독자 네트워크상의 서버와 통신
VPC 피어링: 접속을 허가한 다른 VPC상의 리소스와 통신
보안그룹
외부에서 VPC 내부로의 접근 제한은 보안 그룹을 사용할 수 있습니다. 보안 그룹에서는 포트 번호와 IP 주소를 사용하여 접근 제어를 할 수 있습니다.
(1) 포트 번호를 이용한 제어
포트 번호를 이용하면 제공하는 서비스의 종류를 지정할 수 있습니다. 예를 들어 80번(HTTP), 443번(HTTPS), 22번(SSH)등을 통해 서비스 종류를 지정할 수 있습니다.
(2) IP 주소를 이용한 제어
IP 주소를 이용하면 특정 접속원을 지정할 수 잇습니다. 접근 가능한 IP를 특정한 IP 주소로 한정시켜 외부로부터의 접근을 막을 수 있습니다.
(3) 인바운드/아웃바운드 규칙
보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상의 방화벽 역할을 해줍니다.
이렇게해서 VPC를 통해 가상 네트워크를 생성하고 그 내부에 요소들을 생성해 보았습니다.
Comments