개발/Cloud Computing

☁️⟪AWS⟫ VPC / Public Subnet + Private Subnet / Routing / Internet Gateway

hyuunii 2023. 3. 27. 21:05
아주 빠르게 읽고 정리중이라 아래 출처에서 거의 고대로 긁어왔습니다(인파님 쨩👍🏻🤍)!!! 들어가서 보시길 ㅊㅊ

출처::
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-VPC-%EC%82%AC%EC%9A%A9-%EC%84%9C%EB%B8%8C%EB%84%B7-%EC%9D%B8%ED%84%B0%EB%84%B7-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-NAT-%EB%B3%B4%EC%95%88%EA%B7%B8%EB%A3%B9-NACL-Bastion-Host#vpc_virtual_private_cloud_%EA%B0%9C%EB%85%90_%EC%A0%95%EB%A6%AC

 

 

VPC(Virtual Private Cloud)

; Amazon Web Service Virtual Private Cloud 기반으로 정리

VPC는 사용자가 정의하는, AWS 계정 사용자 전용 가상의 네트워크 이다.

사용자는 자기가 원하는대로 IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워크 환경을 구성해 VPC를 생성할 수 있다.

한마디로 AWS용 나만의 개인 네트워크 망 데이터센터 라고 이해하면 된다.

 

 

만약 VPC가 없다면 AWS Cloud 안의 리소스들을 연결하기 위해 추가적인 작업들이 많이 생길 것. 그렇게 되면 시스템 복잡성이 높아짐. 그러나 VPC를 이용하면 같은 VPC를 묶어서 리소스를 쉽게 관리할 수 있다.

 

 

VPC가 없는구조

VPC가 없다면 EC2 인스턴스들이 서로 거미줄처럼 연결되고 인터넷과 연결된다. 이런 구조는 시스템의 복잡도를 엄청나게 끌어올릴뿐만 아니라 하나의 인스턴스만 추가되도 모든 인스턴스를 수정해야하는 불편함이 생김. 마치 인터넷 전용선을 다시 까는 것과 같음.

 

 

VPC를 적용한구조

VPC를 적용하면 위 그림과같이 VPC별로 네트워크를 구성할 수 있고 각각의 VPC에따라 다르게 네트워크 설정을 줄 수 있다.

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

=> 인스턴스가 VPC에 속함으로써 네트워크를 구분할 수 있고 VPC 별로 필요한 설정을 통해 인스턴스에 네트워크 설정을 적용할 수 있다.

 

사용자는 직접 VPC를 생성해서 사용할 수도 있고, 계정 생성시 region별로 디폴트로 생성되는 VPC를 사용할 수도 있다. 


서브넷(Subnet)

서브넷은 VPC의 IP 주소를 나누어 리소스가 배치되는 물리적인 주소 범위를 뜻한다.

VPC가 논리적인 범위를 의미한다면, 서브넷은 VPC안에서 실제로 리소스가 생성될 수 있는 네트워크 영역이라고 생각하면 된다. 실제로 EC2, RDS같은 리소스를 생성 할 수 있다.

 

그리고 하나의 VPC에 N개의 서브넷을 가질 수 있으며 하나의 AZ(Availability Zone)에만 생성이 가능하다.

다음 사진처럼 여러 AZ에 걸쳐서 서브넷을 생성할수 없다는 말이다.

 

 

아래 사진을 보면 VPC(10.0.0.16) 내에서 다시 크기를 두개로 쪼개서 사용하게 되는데,

VPC를 쪼갠 조각들이 바로 Subnet(10.0.1.0/24)이다.

그리고 하나의 AZ(Availability Zone)에 서브넷이 각각 할당되어 있는 것을 볼 수 있다.

VPC를 잘게 나눈 것이 서브넷이기 때문에 당연히 VPC보다 대역폭이 낮아야 한다.

 

 

 

Public Subnet  / Private Subnet 

서브넷은 다시 Public Subnet Private Subnet으로 나눌 수 있다.

인터넷과 연결되어있는 서브넷을 public subnet이라고 하고, 인터넷과 연결되어있지 않은 서브넷을 private subnet이라고 한다.

  • Private Subnet : 인터넷에 접근 가능한 subnet (VPC 내부에서만 통신)
  • Public Subnet : 인터넷에 접근 가능한 Subnet (VPC 외부/내부와 통신)

따라서 Public subnet에 존재하는 인스턴스는 Public IP와 Elastic IP를 보유하여 인터넷에 연결되어 아웃바운드 및 인바운드 트래픽을 주고받을 수 있는 반면, Private subnet은 외부에 노출이 되어 있지 않기 때문에 접근할 수 없다.

인바운드 : 외부에서 - > 인스턴스로 오는 트래픽
아웃바운드 : 인스턴스에서 - > 외부로 가는 트래픽

그래서 Private subnet에 민감한 데이터 정보들을 저장해 보안을 강화하는 식으로 설계를 하는 편이다.

이처럼 Private subnet 내부의 인스턴스들은 오직 다른 Subnet과만 연결이 가능한데, 만일 데이터를 업데이트하는데 인터넷 연결이 필수라면 뒤에 배울 NAT instance를 통해서 Private 내부의 인스턴스들이 인터넷을 가능하게 만들 수도 있다.

 

위 사진은 서브넷 구조의 완성형이다. (사진에 보이는 Router나 Internet gatway는 다음 섹션에서 진행한다)

AZ안에 public 서브넷  private 서브넷을 배치했다.


라우팅 테이블 (Routing Table)

각각의 Subnet은 서로 다른 네트워크 영역을 가지고 있다.

따라서, 한 Subnet이 다른 Subnet으로 가기 위해서는 'Routing'이 필요하게 된다.

 

라우팅 테이블은 VPC 안에서 발생한 네트워크 요청을 처리하기 위해 어디로 트래픽을 전송해야 하는지 알려주는 표지판 역할을 수행한다.

각 서브넷들은 이러한 네트워크 트래픽 전달 규칙에 해당하는 라우팅 테이블을 가지고 있으며, 요청이 발생하면 이 라우트 테이블을 사용해서 목적지를 찾게 되는 것이다.

[위 라우팅 테이블의 뜻]

트래픽이 발생하면,
CIDR 10.0.0.0/16 (10.0.0.1 ~ 10.0.255.255) 아이피들은 local로 보내달라.
다른 모든 대역들(0.0.0.0/0)는 인터넷 게이트웨이(igw-092d..)를 통해 바깥으로 보내달라.

 

 

VPC 내부(모든 Sunbet)에 대해서는 디폴트로 Routing이 자동으로 생성되어져 있다.

즉 별도의 설정 없이 한 Subnet에서 다른 Subnet으로 통신이 가능하다는 말이다.

위 그림에서 보듯이 Subnet 내의 모든 Resource는 자신이 소속된 Subnet이 아닌 다른 곳으로 향하고자 할 때 VPC Router를 거치게 된다.

 

 

 

아래 그림에서는 Subnet 10.0.3.0/25의 Routing table을 보여주고 있다.

VPC 대역인 10.0.0.0/16에 대해 Local Rouing이 지정되어 있음을 알 수 있다.

나머지 3개 Subnet도 해당 라우팅 테이블을 보유하고 있다.

 

이렇게 각 서브넷에 라우팅 테이블이 있음으로서,

VPC 내 Subnet에 할당된 Resource라면 어느 Subnet이든 다른 Subnet의 Resource와 자유롭게 통신할 수 있게 된다.

 

또한 라우팅 테이블은 내부에서만 통신하는 Local Routing 뿐만 아니라 외부 인터넷망으로 나갈 수 있는 Routing을 가질 수 있다.

이를 인터넷 게이트웨이(Internet Gateway)라고 한다.


인터넷 게이트웨이 (Internet Gateway)

VPC는 기본적으로 격리된 네트워크 환경이다. 따라서 VPC에서 생성된 리소스들은 기본적으로 인터넷을 사용할 수 없다.

 

이러한 환경에서, 인터넷 게이트웨이는 VPC의 인스턴스와 인터넷간에 통신을 할 수 있게 해준다.

인터넷 게이트웨이는 VPC의 리소스와 인터넷 간의 통신을 활성화하기 위해 VPC에 연결하는 관문이라고 이해하면 된다.

즉, VPC 리소스가 인터넷으로 나가기위한 통로이다.

인터넷으로 데이터를 보내야한다면 당연히 인터넷 게이트웨이로 트래픽을 전달해야 한다.

 

앞서서 위에서 서브넷을 private 2개, public 2개를 만들어 줬었다.

그런데 이름만 저렇게 한거고 실제로는 private 서브넷 4개를 만든 것이다.

서브넷을 진짜 퍼블릭용으로 바꾸기 위해선 인터넷 게이트웨이를 라우팅 테이블에 설정하고 등록해줘야 하기 때문이다.

 

이런식으로 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 경우 퍼블릭 서브넷이라고 부르게 되는 것이다.

반대로 어떤 서브넷이 인터넷 연결을 할 필요가 없다 프라이빗 서브넷이라고 한다.

 

위 그림은 Custom route table에 igw-id(인터넷 게이트웨이)를 추가하고 Subnet 1(10.0.0.0/24)에 연결 시킴으로서, 이 VPC의 서브넷1은 퍼블릭 서브넷이 된 것을 표현한 것이다.

 

 

route table 적힌 의미를 알아보자.

Destination에 10.0.0.0/16은 local 타겟으로 가라고 안내하고 있다.

이 말은 만일 10.0.0.6의 인스턴스로 오면 로컬에서 찾으라는 말이다.

그리고 아래에는 10.0.0.0/16 대역 이외의 모든 인터넷 트래픽(0.0.0.0/0) 은 인터넷 게이트웨이(igw)로 가라고 매핑 되어 있다.