인프라를 구성할 때, subnet을 단순히 ip 대역을 묶어주는 용도로만 사용을 하고는 한다. 그러나 보안과 고가용성을 추구하기 위해서는 subnet을 각자의 용도에 맞게 구성해 줄 필요가 있다.
먼저 아래 직접 그린 인프라 구조를 보자.
구성 요소는 다음과 같다.
개별 지리 영역을 의미한다. ex. 서울, 도쿄 등등
각 리전 내에 있는 여러 격리된 위치를 의미한다. ex. 서울 기준 az-1, az-2, az-3, az4 4개의 가용 영역이 있다.
먼저 VPN(Virtual Private Network)이 무엇인지 알아보자. 단어 뜻에서 알 수 있듯이 실제가 아닌 가상의 사설망을 의미한다.
이해를 돕기 위해 예를 들어보면, 어떤 회사에서 A라는 팀과 B라는 팀이 같은 네트워크를 사용하고 있다고 가정해보자. 그리고 갑자기 보안상의 이유로 같은 네트워크를 사용하고 있는 두 팀의 네트워크를 분리해야 하는 상황이 생겼다.
만약 VPN을 이용하지 않는다면, 두 팀의 네트워크를 분리하기 위해서는 회사 건물 내부의 모든 인터넷 선을 새로이 공사해야한다. 이러한 상황을 방지하기 위해 등장한 것이 VPN이다.
AWS에서 만약 VPC가 없다면, EC2 내의 인스턴스들이 서로 엉킨 상태로 인터넷과 연결되게 된다. 그리고 여기서 하나의 인스턴스를 수정해야 한다면, VPN에서 설명했던 회사 예제 처럼 모든 인스턴스를 수정해야만 한다.
이때 VPC를 적용하면 각 VPC 별로 네트워크를 구성할 수 있으며, 서로 다른 설정 값을 부여할 수 있게 된다. 즉, 완전히 독립된 네트워크처럼 동작할 수 있게 되는 것이다.
IPv4 기준으로 42억개의 IP의 조합이 가능하다. 이를 그대로 둘 수 없어 등장한 것이 네트워크 클래스 개념이고, IP 낭비 문제를 해결하기 위해 등장한 것이 서브넷이다.
Subnet에 대해서 더 깊게 알고 있다면 아래 링크를 참고하면 좋다.
https://www.cloudflare.com/ko-kr/learning/network-layer/what-is-a-subnet/
이 포스팅에서는 IP 대역대를 묶어주는 역할을 한다고 생각하면 좋을 것 같다.
인프라를 구성할 때 보편적으로 public, private, isolate로 subnet을 나누어 구성하게 된다.
이처럼 구성하게되면, 각 subnet 계층을 거쳐야 격리되어 있는 RDS에 도달할 수 있게 된다. 이러한 과정을 SSH 터널링이라고 한다. 이렇게 망 분리를 하는 가장 큰 이유는 보안때문이다. 현재 isolate subnet에 위치해 있는 RDS 인스턴스는 다른 인스턴스와 함께 위치해 있으면, 보안상으로 매우 취약해진다.
또한 VPC내에 여러개의 subnet을 구성함으로써, 고가용성을 누릴수 있게 된다.