참고

https://medium.com/harrythegreat/aws-%EA%B0%80%EC%9E%A5%EC%89%BD%EA%B2%8C-vpc-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0-71eef95a7098

 

[AWS] 가장쉽게 VPC 개념잡기

가장쉽게 VPC 알아보기

medium.com

VPC 에 대해서 알기전에 VPN(Virtual Private Network) 에 대해 알아본다.

VPN을 번역하면 "가상사설망" 이라고 부름. "가상"이라는 말에서 알 수 있든 실제 사설망이 아니라 가상의 사설망이다.

예를 들어서 위 그림과 같이 회사의 네트워크가 구성되어 있고 보안상의 이유로 사무실 A(공간 A)와 사무실 B(공간 B)의 인원이 다른 네트워크망을 사용하고 있다고 가정해보자.

그러다가 보안 정책이 바뀌어서 공간에 따라서가 아니라, 흑백(좌측) 인원 2명과 컬러(우측) 인원 2명이 끼리 서로 다른 네트워크망을 사용해야 한다면 건물의 내부선을 다 뜯어 고쳐야 하고 다시 전용선 또한 깔아주어야 합니다.

다음과 같이 말이죠

 

이런 불상사를 막기 위해서 우리는 가상의 망인 VPN 을 사용합니다.

VPN 을 사용하면 (물리적)네트워크망을 뜯어고치지 않아도 격리된 상태를 변경하는 것이 가능합니다.

즉, 같은 물리적인 네트워크에 존재하지만 (논리적으로 격리된) 서로 다른 네트워크 처럼 사용할 수 있는 것입니다.

가상 네트워크 망이, 서로 다른 망처럼 격리를 해주는 것입니다.

 

 

VPC 란?

 

VPC 는 위에서 VPN 과 유사한 역할을 합니다. 만약 VPC 가 없다면 EC2 인스턴스들이 서로 거미줄처럼 연결되고 인터넷과 연결이 됩니다.

즉, 요청이 들어왔을 때 EC2 인스턴스 하나하나가 스스로 요청을 처리할 수 있는 상태인지 판단하고 아니라면 다른 EC2 인스턴스에 넘겨주는 등의 복잡한 작업 과정을 거치게 됩니다.

이런 구조는 시스템의 복잡도를 엄청나게 끌어올릴 뿐 아니라, 하나의 인스턴스만 추가되도 모든 인스턴스를 수정해야 하는 불편함을 야기합니다.

마치, 인터넷 전용선을 다시 까는 것과 같습니다.

VPC 를 적용하면 그림과 같이 네트워크를 적용할 수 있습니다.

그림과 같이 VPC 별로 네트워크를 구성할 수도 있게 되고 각각의 VPC에 따라 네트워크 설정을 다르게 줄 수 있습니다.

각각의 VPC 는 완전히 독립된 네트워크처럼 작동을 합니다.

 

 

VPC를 구축하려면

 

 

VPC를 구축하기 위해서는 VPC의 아이피 범위를 RFC1918 이라는 사설 아이피 대역에 맞추어 구축해야합니다.

사설 아이피란?

인터넷에서 사용할 수 있는 IP 가 아니라, AWS 내부적으로 사용할 수 있는 아이피 주소 대역입니다.

예를 들어서 A 초등학교의 주소를 "서울특별시 구로구 구로동 1123-21번지" 라고 치고 A초등학교를 찾아가야 한다고 가정해봅시다.

A 초등학교에 찾아가기 위해서는 서울특별시 구로구 구로동 1123-21번지 라는 주소가 필수적입니다.

그런데 만약 A 초등학교에 도착을 했다면 주소는 관심 밖입니다.

A 초등학교 내부에서는 특정 교실에 찾아가기 위해 "서울특별시 구로구 구로동 1123-21번지" 라는 정보는 필요 없고 몇학년 몇반 인지 정보만 필요할 뿐입니다.

"1 학년 2반"을 찾아가야한다고 가정해봅시다.

"1학년 2반"은 많은 초등학교에 존재할 확률이 있습니다. 따라서 부산에 존재하는 사람이 이 정보만 가지고 A 초등학교의 "1학년 2반"에 찾아가는 것은 불가능합니다.

즉, 1학년 2반이라는 정보는 A 초등학교 내부에서만 유효한 주소입니다.

서울특별시 구로구 구로동 1123-21번지 라는 주소는 A 초등학교 외부에 있는 사람에게 유효한(부산에 있는)에 있는 사람에게 유효한 정보겠죠.

이 주소가 퍼블릭아이피 (인터넷에서 사용할 수 있는 IP)이고

"1학년 2반" 이라는 정보가 사설 아이피 입니다.

 

VPC 에서 사용하는 사설 아이피 대역은 다음과 같습니다.

  • 10.0.0.0 ~ 10.255.255.255(10/8 prefix)
  • 172.16.0.0 ~ 172.31.255.255(182.16/12 prefix)
  • 192.168.0.0 ~ 192.168.255.255(192.168/16 prefix)

한번 설정된 VPC 의 아이피 대역은 수정할 수 없으며 각 VPC는 하나의 리전에 종속됩니다.

 

 

사설 아이피 대역의 표기법

 

VPC 를 구축할 때 사용하는 사설 아이피 대역을 표기하는 표기법은 CIDR 이라고 불리는 표기법을 따릅니다.

CIDR 표기법은 다음과 같습니다.

  • 0.0.0.0/0
  • 172.31.16.0/16

여기서 나누기(/) 표시 뒤에 붙은 숫자가 고정 ip 비트 영역입니다.

즉 0.0.0.0/0 은 고정 ip 가 0비트이고 172.31.16.0/16 은 고정 아이피가 16비트 입니다.

이 고정 비트 영역에 대해서 알아보기 위해서 ip 주소를 간단하게 알아봅시다.

IPv4 의 최소 최대 범위는 다음과 같습니다.

  • 0.0.0.0 ~ 255.255.255.255

점(.) 으로 구분되는 한 단위는 0 ~ 255으로 8비트입니다. (2의 8승)

따라서 172.31.16.0/16 에서는 앞에서 부터 16비트 (2단 위) 인 "172.31" 아이피가 고정이고 이 뒤에 오는 수는 가변영역 입니다. 최대 최소 범위를 나타내면 다음과 같습니다.

  • 172.31.0.0 ~ 172.31.255.255

16 처럼 8로 나누어 떨어지는 ip 영역도 있지만 안타깝게도 172.31.16.0/20 처럼 나누어 떨어지지 않는 경우도 있습니다.

이럴때는 2진법으로 계산을 해야하지만 복잡하니까 이것만 알아 둡시다.

  • 고정 영역 ip의 비트가 같다면 고정 비트 숫자가 큰 CIDR 값이 더 작은 값의 범위에 완전히 포함된다.
    • 예를 들어서 172.31.16.0/20 은 172.31.16.0/16 에 완전히 포함되는 범위이다.
  • 0.0.0.0/0 은 고정영역이 없기 때문에 모든 ip 주소 범위인 0.0.0.0 ~ 255.255.255.255 의 범위를 가지고 따라서 "AnyAddress" 를 의미합니다.

 

서브넷이란

 

VPC를 만들었다면 이제 서브넷을 만들 수 있습니다.

서브넷이란 VPC를 더 잘게 쪼개는 과정이라고 보시면 됩니다. 서브넷은 VPC 안에 있기 때문에 CIDR (ip 범위)가 더 작은 값을 가지게 됩니다.

서브넷을 나누는 이유는 더 많은 네트워크 망을 만들기 위해서 입니다.

각각의 서브넷은 가용영역안에 존재하며 서브넷 안에 RDS, EC2와 같은 리소스들을 위치시킬 수 있습니다.

 

 

라우팅 테이블과 라우터

 

라우팅 테이블이란 라우팅 규칙을 모아둔 테이블이라고 생각하면 됩니다.

EC2 등등의 자원에서 네트워크에서 요청이 발생하면 데이터는 가장 먼저 라우터로 향하게 되는데, 이 때 라우터는 이 데이터를 어떤 목적지로 보낼지에 대한 정보를 가지고 있습니다.

이 때 사용하는 것이 라우팅 테이블이고 그 규칙들을 구체적으로 명시해놓은 것이 라우팅 규칙입니다.

(라우팅 규칙은 이 트래픽이 어디로 갈 수 있는지 적어놓은 이정표입니다.)

예를 들어서 사진처럼 정의가 되어있다고 가정하면

위 라우팅 테이블은 172.31.0.0 ~ 172.31.255.255 의 범위(172.31.0.0/16)에 해당하는 목적지에 트래픽을 보낼일이 발생하면 목적지를 로컬에서 찾으라는 의미입니다.

한편, 범위 바깥의 트래픽이 발생하면 이는 처리할 수 없습니다. (외부로 통하는 트래픽은 처리할 수 없습니다. ⇒ 인터넷 게이트웨이와 연결 + 라우팅 규칙 추가를 해주어야합니다.)

라우팅 테이블은 기본적으로 VPC 도 가질 수 있고, 서브넷 또한 라우팅 테이블을 가질 수 있습니다. 그런데 여기서 말하는 라우팅 테이블은 기본적으로 서브넷과 연결된 라우팅 테이블을 의미합니다.

한편, 인터넷 게이트웨이와 연결을 마친 라우팅 테이블 (서브넷과 연결된)은 인바운드 아웃바운드 모두 포합합니다. 그 증거는 다음과 같습니다.

 

  • 내 ip 를 키 값으로 인터넷게이트 를 찾도록, 라우팅 테이블 규칙을 맞춘뒤 cli 연결(ssh)을 하면 연결이 됩니다. (아웃바운드 인바운드 둘다 필요)
    • 그러나 인터넷게이트를 추가하지 않거나 다른 ip 를 규칙으로 넣으면 접속이 되지 않습니다.
  • 그런데 anyaddress로 변경하고 위 스크립트를 실행하면 동작합니다.
  • 한편 내 ip를 넣고 ec2 인스턴스와 ssh 연결을 하고 curl으로 외부 자원( 내 컴퓨터 바깥)을 get 요청하면 안되지만 마찬가지로 anyaddress 로 규칙을 추가하면 된다 (인바운드)

 

인터넷 게이트웨이

 

인터넷 게이트 웨이는 VPC 와 인터넷을 연결해주는 하나의 관문입니다. (인바운드 아웃바운드 모두 포함)

서브넷 B의 라우팅 테이블을 보면 172.31.0.0/16 과 0.0.0.0/0 이 정의되어 있습니다.

이 뜻은 172.31.0.0/16 에 매칭이 되는지 확인한 후 (위에서부터) 매칭이 되지 않는다면 IGA A 로 요청을 보내라는 것을 의미합니다.

인터넷과 연결되어 있는 서브넷을 public 서브넷, 그렇지 않은 서브넷을 private 서브넷이라고 부릅니다.

 

 

 

네트워크 ACL 과 보안그룹

 

 

네트워크 ACL과 보안그룹은 방화벽과 같은 역할을 하며, 인바운드 트래픽과 아웃바운드 트래픽 보안정책을 설정할 수 있습니다.

Stateful 한 방식으로 동작하는 보안그룹은 모든 허용을 차단하도록 기본 설정이 되어 있기에 필요한 설정의 경우 허용을 해주어야 합니다.

또한 네트워크 ACL 과 다르게 각각의 보안그룹별로도 별도의 트래픽을 설정할 수 있으며 서브넷에서도 설정할 수 있지만, 각각의 EC2 인스턴스에서도 적용할 수 있습니다.

네트워크 ACL 은 Stateless하게 동작합니다.

모든 트래픽에 대해 기본 설정이 되어 있기 때문에 불필요한 트래픽 막도록 적용해야합니다. 서브넷 단위로 적용되며 리소스 별로는 설정할 수 없습니다. 또한 보안 그룹과 네트워크 ACL 이 충돌한다면 보안그룹이 더 높은 우선순위를 가집니다.

 

 

NAT 게이트웨이

 

 

NAT 게이트웨이는 private 서브넷이 인터넷과 통신을 하기 위한 아웃바운드 인스턴스 입니다. private 서브넷 특성상 외부에서 들어오는 트래픽(인바운드)에 대해서는 막혀있으나, 간혹 EC2 인스턴스의 펌웨어 or 업데이트 가 필요해서 아웃바운드 트래픽만 허용되어야 할 필요가 있을 때, NAT 게이트웨이가 동작.

NAT 가 private 서브넷의 트래픽을 받아 대신 인터넷게이트와 연결을 해서 트래픽을 내보냅니다.