[AWS] VPC 및 네트워크 구성요소

VPC는 AWS에서 가장 중요한 요소 중 하나다.

VPC는 가상 공용 클라우드(virtual public cloud)의 축약인데, 하나의 거대한 네트워크 공간이라고 할 수 있다.

사용자가 VPC를 하나 할당하면, 그 안에다 EC2라든지, RDS 같은 리소스들을 그 VPC 위에다 할당해서 사용하는 식으로 전개가 된다. 기본적으로 90% 정도의 AWS 서비스들은 VPC를 기반으로 동작하고, VPC 위에서 돌아가게 된다.

VPC 내부의 어떤 리소스들은 같은 VPC의 리소스에서만 접근한다는지 하는 보안적인 격리도 가능하고, 또 VPC 내부에서 동작했을 경우에 가능한 성능적인 최적화도 기대할 수 있다.

게다가 기본적으로 VPC 내부 접근만 가능한 서비스가 꽤 있다. DocumentDB나 Elastiacache 등등...

여러모로 밑바탕이 되는 부분이다보니, AWS 계정을 만들고 프로젝트를 시작하면 가장 먼저 해야하는 것 중 하나다.




비용

기본적인 비용은 딱히 없다.
프로비저닝에 대한 요금은.. NAT 게이트웨이같은걸 빼면 딱히 없고, 나머지는 네트워크 트래픽에 대해서 나가는 요금이 대부분이다.




톺아보기

VPC에는 딸려오는 서브 구성요소들이 꽤 많다. 예전에는 이걸 하나하나 다 만들어줘야 했던걸로 기억하는데, 콘솔 기능이 꽤 발전해서 이젠 뭉텅이로 생성이 가능하다.

한번 생성 버튼을 눌러서

이런식으로 창이 뜬다.

CIDR 블록은 VPC 네트워크 자체에 대한 private IP가 된다.
여기서 "VPC 등"으로 선택하면

이런식으로 뭉텅이로 뭘 만들어준다.

한번 만들어놓고 하나씩 살펴보자




서브넷 (subnet)

서브넷은 기본적으로 VPC의 네트워크 영역을 나눠놓은 덩어리라고 할 수 있다.

고유의 private IP 영역도 있고, 사용영역도 달려있고.. 그렇다.




서브넷: 가용영역(AZ)

근데 좀더 중요한 부분은, 서브넷이 가용 영역(Availablity Zone)과 밀접하게 엮여있다는 것이다.
그런 까닭에 서브넷은 실제 아마존의 데이터센터 하나에 물리적으로 존재함을 의미하기도 한다.

방금 만든 위의 서브넷을 보면 가용영역이 apne2-az1로 되어있을 것이 보일 것이다. 이건 실제 서울의 AWS 데이터센터 1번에 리소스를 할당할 것임을 뜻한다.

현재 서울 리전에는 apne2-az1, apne2-az2, apne2-az3, apne2-az4 4개의 가용영역이 지원된다. 데이터센터가 4개 있다는 뜻이다.

아무튼 그런 부분에서 어떤 AWS 리소스에 가용영역이 apne2-az1인 서브넷과 apne2-az2인 서브넷을 동시에 할당했다고 한다면, 멀티 AZ가 구성되었다고 할 수 있다. 만약 1번 데이터센터에 화재나 허리케인이 떠서 장애가 발생하더라도 2번 데이터센터로 문제없이 구동되게 할 수 있는 것이다.

그래서 RDS 같은 DB도 멀티서브넷으로 구성하기만 하면, 굳이 백업용이나 장애대응용 다중화를 구성할 필요가 없어진다.




라우팅 테이블

라우팅 테이블은 말 그대로 네트워크 라우팅을 담당하는 구성요소다.
특정 서브넷을 통해 들어온 네트워크 요청을 어디로 가게 할지를 결정한다.

"public2" 서브넷의 경우를 한번 봐보자

대상이 2개 설정된 것을 볼 수 있다.

여기서 0.0.0.0은 모든 IP를 뜻하는데, 그런건 그냥 저 대상으로 넘겨버리라는 뜻이다. 여기서는 "인터넷 게이트웨이"로 넘겨서 서브넷에서 인터넷 접속을 자유롭게 할 수 있다는 뜻인데, 아래에서 좀더 자세히 다뤄보겠다.

그리고 10.0.0.0/16은 VPC 자체의 CIDR 영역이다. local이 붙어있으니 이건 VPC 내부에서 온건 내부에서만 서로 통신 가능하게 하겠다는 뜻이다.




인터넷 게이트웨이

인터넷 게이트웨이는 VPC에서 외부 인터넷에 접속할 수 있게 해주는 중요한 포인트다.
이게 없다면 VPC 안에서 네이버 같은 외부사이트에 들어갈 수도 없고.. VPC 안에서만 놀아야 한다.

라우팅 테이블을 통해 이게 연결이 되어있는 서브넷은 "퍼블릭 서브넷"이 되고, 연결되지 않은 서브넷은 "프라이빗 서브넷"이라고 부른다.

그리고 서브넷을 "퍼블릭"으로 만드는 것이기도 하기 때문에, 기본적으로 양방향이다.
서브넷에서 외부 인터넷에 접속을 할 수도 있지만, 반대로 인터넷에서 서브넷의 리소스에 접근을 할 수 있게도 해준다.




NAT 게이트웨이

이건 간단하게 말하면 인터넷 게이트웨이의 프라이빗 서브넷 버전이다.

인터넷 게이트웨이는 퍼블릭 IP가 할당된 리소스만 외부 인터넷에 접속할 수 있는데, NAT 게이트웨이를 활용하면 이놈이 중간에서 변환을 해줘서 퍼블릭 IP가 없어도 외부 인터넷에 접속을 할 수 있게 된다.

게다가 이 접속 허용은 단방향으로만 동작한다.
해당 서브넷에서는 외부망에 접속할 수 있지만, 외부망에서 서브넷에 접속하는 것은 불가능하다.

일반적인 사용사례에서는 NAT을 만들때 "서브넷"에 퍼블릭 서브넷을 두고, 연결 타입도 퍼블릭으로 하면 된다.


참조
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/configure-subnets.html