개발 일기

[AWS] VPC와 Subnet 본문

DevOps/AWS Services

[AWS] VPC와 Subnet

개발 일기장 주인 2024. 11. 23. 18:46

VPC(Virtual Private Cloud)

우리가 흔히 사용하는 서비스들은 Public Internet에 존재하여 사용할 수 있는 것이다.

AWS DynamoDB, S3, ECR 등 VPC 외부에 있는 AWS 서비스 들 또한 Public Internet을 통해 엑세스 한다.

 

그러나 VPC는 Public Internet을 통해 접속할 수 있는 것이 아니기 때문에 외부에서 다이렉트로 엑세스 할 수 없다.

이때 AWS Services 또한 다이렉트로 VPC 내부에 엑세스 할 수 없는 것은 마찬가지이다.

그래서 예를 들어 VPC 내부의 한 EC2 인스턴스에서 S3에 엑세스하고자 한다면 Internet Gateway를 통해 Public Internet으로 나간 다음에 다시 AWS Services의 Amazon S3에 엑세스해야하는 것이다.

 

➜ VPC는 외부와 격리된 네트워크를 형성하는 것(AWS 리소스를 논리적으로 격리된 환경에서 실행)


VPC란?

  • 사용자의 AWS 계정 전용 가상 네트워크
  • AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있다.
  • EC2와 같은 리소스를 VPC 내에서 실행할 수 있다.
  • IP 주소 범위와 VPC 범위를 설정하고 서브넷을 추가하고 보안 그룹을 연결한 다음 라우팅 테이블을 구성한다.
  • 가상의 데이터 센터
  • 외부에 격리된 네트워크 컨테이너 구성 가능
      원하는대로 사설망 구축가능(부여된 IP대역을 분할하여 사용 가능)
  • Region 단위 ➜ 해당 Region의 모든 AZ에 걸쳐있다.
  • 사용 사례
    ex) EC2, RDS, Lambda 등의 AWS 컴퓨팅 서비스 실행 & 서브넷 구성 & 보안 설정(IP Block, 인터넷에 노출되지 않는 EC2)


VPC 구성 요소

1. 서브넷(Subnet)

  • VPC의 하위 단위로 VPC에 할당된 IP를 더 작은 단위로 분할한 개념
  • 하나의 서브넷은 하나의 가용영역(AZ)안에 위치
  • CIDR block range로 IP주소 지정
  • VPC안에 구성할 수 있는 서브넷 구성으로는 퍼블릿 서브넷과 프라이빗 서브넷 
    • 퍼블릭 서브넷(Public Subnet)은 외부와의 자유로운 통신이 가능한, 외부 인터넷 구간과 직접적으로 통신을 할 수 있는 공공 네트워크 이다.
      - 인터넷(IGW)를 통해 외부의 인터넷과 연결되어 있음.
      - 안에 위치한 인스턴스에 퍼블릭 IP 부여 가능,
      - 웹서버, 어플리케이션 서버 등 유저에게 노출되어야 하는 인프라
    • 프라이빗 서브넷(Private Subnet)은 이름에서 유추할 수 있듯, 외부에서 인터넷을 통해직접 접근할 수 없고 NAT Gateway를 이용하면 외부로 단방향 통신(내부 -> 외부 방향)만 가능하다.
      - 퍼블릭 IP 부여 불가
      - 데이터베이스, 로직 서버 등 외부에 노출 될 필요가 없는 인프라

 

CIDR 블록 사용 예
VPC CIDR: 10.0.0.0/16 (65,536개 IP)
서브넷 1: 10.0.0.0/24 (256개 IP)
서브넷 2: 10.0.1.0/24 (256개 IP)
즉, 해당 VPC에서는 256개의 서브넷이 나올 수 있다.

VPC CIDR 블록 크기 제한
최소 크기: /28 (16개 IP 주소)
최대 크기: /16 (65,536개 IP 주소)

RFC 1918기반 사설 IP 주소 대역
10.0.0.0/8: 대규모 네트워크에 적합
172.16.0.0/12: 중간 규모 네트워크에 적합
192.168.0.0/16: 소규모 네트워크에 적합
이 중 10.0.0.0/8은 가장 넓은 범위를 제공하며, AWS VPC 기본 CIDR로 자주 사용됩니다.
AWS VPC 생성 시 기본적으로 10.0.0.0/16을 사용하는데, 이는 사설 네트워크 대역 중 가장 넓은 10.0.0.0/8에서 파생된 것입니다.

2. 라우트 테이블(Route Table)

네트워크 트래픽의 경로를 정의하는 논리적 구성 요소로, VPC 내의 서브넷에서 출발하는 트래픽이 어디로 이동할지를 결정한다.

위와 같은 IP요청이 들어오면 10.0.0.0/16과 0.0.0.0/0 둘다 가능한데 이때 가장 구체적인 / 오른쪽 수가 더 큰 것에 따라 감.

즉, 위 경우 local로 간다.

 

이 경우에는 pcx - ~ 로 갈 것이다.

 

기타 매칭되지 않는 IP는 가장 아래 igw-~로 갈 것이다.

대상(Target) 유형
인터넷 게이트웨이(Internet Gateway, IGW):퍼블릭 서브넷의 트래픽을 인터넷으로 라우팅.
NAT 게이트웨이(NAT Gateway):프라이빗 서브넷이 인터넷에 액세스할 수 있도록 지원.
피어링 연결(VPC Peering):다른 VPC와의 트래픽을 라우팅.
가상 프라이빗 게이트웨이(Virtual Private Gateway, VGW):온프레미스 데이터센터와의 연결(VPN)을 위한 트래픽 라우팅.
VPC 엔드포인트(VPC Endpoint):AWS 서비스로의 트래픽을 인터넷을 거치지 않고 라우팅.
네트워크 인터페이스(ENI):특정 인스턴스나 네트워크 인터페이스로 트래픽 전달.

 

위 라우팅 테이믈을 기준으로 아래 10.0.1.31으로의 요청이 어떻게 처리되는지 보자.

SubnetA의 EC2에서 10.0.1.31으로 요청을 보냈다고 했을 때 Route Table을 참고하면 local이 Target이라 Subnet B로 요청이 들어간다.

 

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

  • VPC가 외부의 인터넷과 통신할 수 있도록 경로를 만들어주는 리소스
  • IPv4와 IPv6를 지원하는데 IPv4 NAT의 역할을 한다.
  • Route Table에서 경로 설정 후 접근 가능하다.
  • 즉, Public Subnet은 IGW로 연결될 수 있지만 Prviate Subnet의 Router를 보면 IGW로 향하는 경로가 없다.
  • 무료

VPC를 수동으로 생성하면 자동으로 라우팅 테이블, NACL, 보안 그룹을 생성한다.

VPC 생성 후 서브넷 생성(Public, Private 가능)

10.0.0.0/16으로 VPC CIDR block을 생성했다면 Subnet은 10.0.0.0/24로 하는 것이 편하다

VPC CIDR: 10.0.0.0/16 (65,536개 IP)
서브넷 1: 10.0.0.0/24 (256개 IP) - Public
서브넷 2: 10.0.1.0/24 (256개 IP) - Private
서브넷 3: 10.0.1.0/24 (256개 IP) - Private 

이렇게 생성했을때 해당 서브넷 들에 1. Network ACL(NACL)을 붙혀주고 2. 라우팅 테이블을 연결해준다.

1은 자동으로 되고

2에서

각 서브넷마다 라우팅 테이블을 생성해주고

PublicSubnet의 경우 인터넷 게이트웨이를 생성한 후 VPC와 연결해준 뒤 라우팅 테이블에 등록한다.

 

이때 Private Subnet에 EC2를 생성한 후 퍼블릭 IP를 할당한다고 해도 외부에서 접속하지 못한다. 

 

예를들어 서브넷3가 DB를 위한 서브넷이라고 해서 EC2를 띄운 후 db를 install하려고할때 외부와 통신을 못한다.

그렇기 때문에 NAT Gateway를 생성해줘야 한다.

이때 NAT Gateway는 Private Subnet의 EC2 대신에 외부 Internet과 통신해줘야하기 때문에 Public Subnet에 위치시켜야한다.(연결 유형은 Public)

NAT Gateway를 생성한 후 만약 DB subnet과 대응 되는 라우팅 테이블에서 0.0.0.0/0 외부로 가는 트래픽이 있으면 NAT Gateway로 보낸다고 설정해준다.

이렇게하면 Private Subnet의 EC2에서 외부 Internet으로 요청이 나갈 수 있어 DB설치가 가능해진다.