[aws] VPC, subnet

VPC

우리가 공유기 깔고 네트워크 구성하듯이, VPC는 AWS 내에서 논리적 가상 네트워크를 구성할 수 있는 기능을 말한다
EC2 인스턴스, RDS 인스턴스 같은 리소스들은 전부 VPC 내에 등록하게 되며, VPC에 ACL 적용, Security Group 적용 등 여러가지 보안 정책을 추가할 수 있다

참고로 VPC 메뉴를 가면 이미 VPC가 하나 생성되어 있는것을 볼 수 있는데, 이는 AWS 계정 생성시 자동으로 생성되는 default VPC이다
172.31.0.0/16 대역을 사용하며 각 리전마다 1개씩 생성되어 있다(VPC는 리전을 기준으로 생성할 수 있다)
default VPC는 리전마다 1개만 설정할 수 있다

VPC 메뉴로 가서 Create VPC 버튼을 눌러 간단하게 등록할 수 있다
VPC 생성

나만의 작은 IDC(혹은 공유기 환경) 생성한다고 생각하면 편하다
VPC 이름과 IP 대역(CIDR 형식)을 입력해줘서 간단히 생성할 수 있다

CIDR 형식
서브넷 마스크를 2진수로 바꿨을 때 1의 개수를 나타낸다 e.g. 255.255.255.0 == 24
192.168.0.0 IP 대역을 사용하고, 255.255.255.0 의 서브넷마스크를 사용한다면 192.168.0.0/24와 같이 표기한다

IP 대역에는 가상 네트워크를 구성할 것이기 IP 대역을 입력한다
RFC 1918에 정의된 사설 IP 대역을 입력해주면 된다(10.0.0.0 ~ 10.255.255.255, 172.16.0.0 ~ 172.31.255.255, 192.168.0.0 ~ 192.168.255.255)

AWS에서는 이처럼 RFC 1918에 정의된 사설 IP 대역을 사용하는 것을 권장한다고 하는데, 공인 IP 대역을 입력할 수 있기나 한가?
공인 IP 대역을 사용하면 같은 공인 IP를 만났을 때 통신이 불가능하지 않는가?

만약 192.168.0.0/16의 형태로 입력했다고 하면 해당 VPC는 192.168.0.1 ~ 192.168.255.254 까지의 IP 대역을 가지게 되는 것이다

만약 이 IP 영역내에 AWS에서 사용하는 예약 IP가 있다면 이는 제외된다

서브넷

아쉽게도 VPC에서 네트워크 대역을 설정했다고 해서 바로 그 대역을 사용할 수 있는것이 아니다
생성된 VPC 대역 내에서 실제로 사용할 대역을 추가로 설정하고, 어떤 AZ에 위치시킬지 설정하는 서브넷이라는 것을 하위에 추가로 만들어줘야 한다

서브넷은 가용영역을 기준으로 생성한다

아래는 AWS 계정 생성 시 자동으로 생성되는 default VPC 안에 들어있는 default 서브넷 목록이다
default 서브넷 목록

default VPC의 IP 대역대는 172.31.0.0/16 이었고(172.31.0.0 ~ 172.31.255.255),
이를 다시 3개로 쪼개서(CIDR 20) 각각 다른 AZ에 할당한 것을 볼 수 있다

VPC 생성시에 172.31.0.0/20 으로 생성하면 자동으로 3개로 나눠질텐데, 굳이 이렇게 하는 이유는 AZ를 설정하기 위함일까?
그렇다면 위에서 CIDR 값을 받을 필요가 없지않나?

이제 AWS 리소스를 생성할 때 이렇게 생성된 VPC와 서브넷 대역을 지정해주면 영역 내에서의 IP가 private IP로 리소스에 박히게 된다

첫번째 서브넷을 선택하면 172.31.0.1 ~ 172.31.15.255 사이의 IP가 private IP로 박히게 된다

리소스 자체에 public IP를 박을 수 있는데, 이는 어떻게 처리되는 것인지?
VPC에서 NAT를 수행해서 통신 가능하게끔 해주는 것인지?
게이트웨이, 라우팅테이블을 읽어보면 이 부분이 해소될 것 같다
추가로 ACL, SG 설정하는 부분도 봐야할 듯

https://bcho.tistory.com/779

  • private, public subnet을 나누는 기준이 뭔가?
    • 외부 통신 기준인가?
  • 통신은 어떻게 하는가?
  • gateway에 ip가 많은 이유는 동적할당을 위해서?
  • VPC 의 CIDR 값은 서브넷 값을 더 크게 설정하지 못하기 위한 일종의 fence 같은 것

AWS 계정 전용 가상 네트워크, AZ가 달라도 논리적으로 묶어서 VPC 형성 가능
다른 가상 네트워크들과 논리적으로 분리
서브넷은 VPC IP 주소 범위. AWS 리소스 생성시에는 VPC가 필요함
AWS 리소스 보호를 위해 ACL 등등을 서브넷에 설정할 수 있다
기본 VPC에는 인터넷 게이트웨이가 포함된다

퍼블릭 IP를 가진 인스턴스가 있는 서브넷의 경우 퍼블릭 서브넷이라고 부른다
라우터는 각각 서브넷 앞에 있어야하지… 않는가?
그러므로 VPN 연결되는 서브넷을 VPN 전용 서브넷이라고 하는것은 이해가 간다

퍼블릭 IP주소는 직접 지정해줘야하고, 프라이빗 IP 주소는 항상 있음
기본적인 공유기 환경에서 NAT 를 타고 인터넷에 접속하는것과는 다른 구조
VPC 내의 라우터는 VPC 내 서브넷간의 통신만을 담당한다
여기 인터넷 게이트웨이를 붙임으로써 외부 통신이 가능해진다

인터넷 게이트웨이는 외부와 private IP를 이어주는 역할인 것 같다
외부와 통신하려면 무조건 인터넷 게이트웨이를 연결해야한다
그러므로 VPC 내의 모든 인스턴스가 외부 통신을 가능하게 하려면 NAT 디바이스를 사용하고, 이를 인터넷 게이트웨이와 연결시켜 줘야한다

인터넷 게이트웨이는 private IP, public IP의 mapping 정도를 해주는 애라서 가장 바깥쪽(VPC)에 있다
서브넷은 각각 라우터를 가지는데, 여기에 NAT를 붙이고 다시 이 NAT가 인터넷 게이트웨이와 붙어서 서브넷 내의 모든 리소스들의 외부 통신이 가능해진다

VPC 생성하면 Route Table, ACL, SG가 기본으로 생긴다
기본세팅으로 설정되어 있음
라우트테이블의 경우 local 이 들어가있는데, 이는 서브넷간의 리소스들은 모두 통신할 수 있음을 말함

  • Route Table
    VPC 내의 서브넷간의 통신?
    모든 서브넷은 생성시 private 서브넷으로 생성되고, 기본적으로 다른 서브넷간의 연결을 제한함
    인터넷 게이트웨이를 만드려면 무조건 라우트테이블을 생성하고 등록해줘야한다
    여기서 추가설정으로 서브넷간 통신이나 인터넷 게이트웨이 등을 연결할 수 있다