VPC는 논리적으로 할당된 가상의 네트워크 공간으로, 거의 모든 AWS 리소스와 연관되어 있다. 많이 사용하는 EC2를 예로 들면 그 EC2를 어느 네트워크를 통해 사용할 것인지에 대해서 VPC에서 설정을 해두고 그 VPC에 올릴 수 있다.
전반적으로 이러한 형태로 VPC가 구성되어 있는데, VPC라는 큰 공간을 만들고 그 안에 서브넷, 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이 등등을 설정할 수 있다. 이번엔 이 VPC의 전반적인 내용에 대해 공부한 내용을 적어보려고 한다.
먼저 서브넷이라는 개념을 알기전에 CIDR라는걸 알아야 한다. 이전에 이 글을 통해 정리한 적이 있지만 여기서 한 번 더 정리해보도록 하겠다.
IP 주소는 ???.???.???.??? 이렇게 이루어져있다(Ipv4기준). 각 ip는 어떤 네트워크 디바이스가 통신을 할 때 사용하는 주소인데, 현대 사회에서 이 Ipv4는 턱없이 부족하다.
사람들마다 가지고 있는 스마트폰, 태블릿, PC 부터 닌텐도와 같은 게임기 그리고 스마트 TV도 네트워크가 필요하고, 심지어 요즘은 가전에도 와이파이를 연결할 수 있기 때문이다.
따라서 사설망이라는 개념을 통해서 하나의 IP가 대표가 되고 그 IP의 사설망을 통해서 네트워크를 나눠서 사용하는 개념이 등장한다.
그래서 특정 IP의 범위를 표시할 때 사용을 하는게 CIDR이다. 이전에는 class라는 개념을 통해서 ip를 표시했는데 CIDR의 C는 classless를 뜻한다. 즉 클래스 없이 ip 범위를 표시하는 방법이라고 할 수 있다.
ip는 두 부분 네트워크 주소, 호스트 주소로 나뉜다. 네트워크 주소가 이 네트워크를 식별하기 위함이고 호스트 주소는 네트워크 주소의 호스트 장치들을 식별한다.
127.0.0.0/16 이라고 CIDR를 표시한다면 뒤에 /16 이 키가 되는데,
앞의 16비트를 네트워크로 사용하고 나머지 16비트는 호스트 주소로 사용하겠다는 뜻이다. 그러면 위 127.0.0.0/16는
127.0.0.0 ~ 127.0.255.255 까지의 범위를 의미하게 된다.
이제 이 CIDR 표기를 통해 VPC에 할당받은 ip 대역을 나누는게 서브넷이다. 서브넷은 두 가지 종류가 있는데 public, private이 있다.
말 그대로 public은 외부에서 접근하고 외부와 통신이 가능한 네트워크 대역을 의미한다. 일반적으로 웹 어플리케이션은 사용자들이 접근해서 사용하므로 Public subnet에 위치하게 된다.
Public subnet은 인터넷 게이트웨이와 연결되는데, 이 인터넷 게이트웨이를 통해서 외부와 통신이 가능해진다.
그렇다면 반대로 Private Subnet은 외부에서 접근이 안되고 통신이 불가능한 서브넷을 말한다. 예를 들면 MySQL과 같이 외부에서 직접 접근해서는 안되는 중요한 리소스들이 들어가게 된다.
위에서 설명했던 Public Subnet은 인터넷 게이트 웨이와 연결된다. 이 때 이 연결은 담당하는게 라우팅 테이블이다. 라우팅 테이블의 정확한 역할을 다시 말하자면 어떤 ip 대역에서의 요청을 어디로 보낼지 정해주는 테이블이다.
어떤 Ip 대역은 서브넷을 의미하게 되고, 여기서의 요청 목적지를 인터넷 게이트웨이로 정하는 라우팅 테이블을 생성함으로서 Public subnet에 인터넷 연결이 가능해진다.
그렇다면 Private Subnet에는 인터넷 게이트웨이가 연결되지 않는다. 왜냐하면 외부에서 접근하지 못하도록 해야하기 때문이다. 보안이 중요한 MySQL을 담당하는 EC2를 이 Private Subnet에 배포했다. 그리고 EC2에 MySQL을 설치를 해야한다.
하지만 이 EC2는 Private Subnet이고 인터넷 연결이 없기 때문에 MySQL을 다운받을 수 없다.
이럴 때 사용되는 것이 NAT Gateway이다. 정확히는 네트워크 주소를 변환해주는 역할을 하는데, 이 NAT Gateway를 라우팅 테이블을 통해 Private Subnet과 연결해주면 이 Private IP에서 인터넷으로 요청을 보낼 떄 네트워크 주소를 Public으로 변환하여 요청을 보내주는 역할을 한다.
따라서 Private Subnet이 밖으로 내보내는 요청을 NAT를 통해서 변환해서 처리하고, 들어오는 요청은 인터넷 게이트웨이를 연결하지 않음으로서 보안성을 챙길 수 있다.
이미지 출처
https://docs.aws.amazon.com/ko_kr/vpc/latest
https://www.smileshark.kr/post/a_vpc_guide_understanding_private_cloud_