[프로젝트] AWS 프라이빗 서브넷 구축하기

jeeeny·2025년 1월 30일

우테코 수료 후에는 더 이상 우테코에서 제공하는 계정을 사용할 수 없다. 이에 팀 내에서 새로운 계정을 파서 서버를 마이그레이션해야 하는데 이 과정에서 AWS 서브넷을 직접 구축해보았다. 모호하게 알고 있던 서브넷 개념을 정리하면서 여러 시행착오를 겪었던 프라이빗 서브넷 구축까지의 과정을 정리해보고자 한다.

✅ IP 주소

IP 주소는 네트워크 환경에서 기기들을 구별할 수 있도록 부여된 고유 주소이다. IP는 192.168.123.132 와 같이 마침표로 구분된 4개의 숫자가 있는, 점으로 구분된 10진수 형식으로 표시된다. 이를 2진수로 표현하면 아래와 같으며 32비트의 숫자로 이루어진 것을 확인할 수 있다. 1비트는 2이므로 IP 주소는 대략 43억개의 주소를 가질 수 있다.

1000000.10101000.01111011.10000100

IP 주소는 네트워크 ID + 호스트 ID로 구성되어 있다. 네트워크 ID는 네트워크를 구분해주는 ID이다. 네트워크 ID가 같다는 것은 같은 네트워크에 속한다는 뜻으로 서로 자유롭게 통신할 수 있다. 하나의 네트워크 ID에는 여러 기기가 있을 수 있으며 호스트 ID는 해당 네트워크에 속한 기기에 부여하는 고유한 번호이다.

✅ 서브넷(Subnet)

서브넷은 부분 네트워크를 뜻하며 IP 주소를 효율적으로 사용하기 위해 고안된 기술이다. 이전에는 IP 주소를 대역에 따라 A, B, C와 같은 클래스로 나누었지만 이는 비효율적인 분배 방식이었다.

Sky Image

어떤 기관에서 55개의 IP 주소를 필요로 한다면 어떤 클래스를 할당하는게 효율적일까? 이를 계산하기 위해서는 각 클래스별 호스트 ID를 확인해야 한다. C 클래스의 경우 8비트가 호스트 ID로 사용되므로 2^8, 256개의 호스트 ID를 가질 수 있다. A, B 클래스는 이보다 더 많은 호스트 ID를 할당할 수 있으므로 기관에 할당할 수 있는 가장 적절한 클래스는 C 클래스가 될 것이다. 하지만 필요로 한 것은 55개의 IP주소였으므로 나머지 IP 주소는 낭비되게 된다.

서브넷을 활용하면 네트워크를 더 작은 네트워크로 나눠 필요한 만큼의 주소만 할당할 수 있다. 그리고 이러한 과정을 서브넷팅이라고 부른다. 서브넷에 대한 이해를 높이고 이후 AWS 설정 과정에서 필요한 내용이기에 서브넷팅에 대해 조금 더 자세히 알아보자.

📒 서브넷팅 예제

211.100.10.0/24 의 네트워크를 각 네트워크 당 55개의 호스트를 할당할 수 있도록 나눠보자. 여기서 /24는 네트워크 ID의 범위를 뜻한다. 앞의 24비트가 네트워크 ID이고 나머지 8비트는 호스트 ID에 속한다. 8비트는 2^8 = 256개의 호스트를 할당할 수 있으므로 네트워크의 범위를 쪼개 각 네트워크 당 55개의 호스트를 할당할 수 있도록 해야 한다.

만들 수 있는 서브넷의 개수와 서브넷 범위를 계산해보자. 서브넷 마스크를 활용해서 쉽게 계산할 수 있다. 서브넷 마스크는 네트워크와 호스트 부분을 구분하기 위해 사용되는 숫자인데, 서브넷 마스크를 1 비트 증가시킬 때마다 네트워크 수가 2배로 증가하고 호스트 수는 2배로 감소한다.

먼저 호스트 ID를 활용해 서브넷 마스크를 구하면, 2^6 = 64 이므로 호스트 ID가 6비트일 때 55개의 호스트를 감당할 수 있고 서브넷 마스크는 11111111.11111111.11000000 이다. 기존 네트워크의 서브넷 마스크인11111111.11111111.11110000 과 비교해보면 2 비트가 증가하여 서브넷 개수는 2^2 = 4, 4개이다.

각 서브넷의 범위를 구하면 아래와 같다. 네트워크 ID를 1비트씩 증가시켜 서브넷 범위를 구할 수도, 호스트 ID 비트 수(6비트)만큼 증가시켜 구할 수도 있다.

  • 11010011.1100100.10100000.00000000 ~ 11010011.1100100.10100000.00111111
  • 11010011.1100100.10100000.01000000 ~ 11010011.1100100.10100000.01111111
  • 11010011.1100100.10100000.10000000 ~ 11010011.1100100.10100000.10111111
  • 11010011.1100100.10100000.11000000 ~ 11010011.1100100.10100000.11111111

✅ 퍼블릭 서브넷과 프라이빗 서브넷

서브넷은 퍼블릭 서브넷과 프라이빗 서브넷으로 나눌 수 있다. 퍼블릭 서브넷은 외부 인터넷 구간과 직접적으로 통신을 할 수 있는 공공 네트워크이다. 반면 프라이빗 서브넷은 사설 네트워크 개념으로 외부 인터넷 구간과 직접적인 통신을 할 수 없다. 보안 유지를 위해 외부 접근을 차단해야 하는 리소스들은 프라이빗 서브넷에 둘 수 있다.

📌 AWS 프라이빗 서브넷 구성하기

Sky Image

AWS는 기본적으로 172.31.0.0/16의 네트워크 대역을 가진 VPC와 4개의 서브넷을 제공한다. 기본적으로 제공되는 서브넷 외에 프라이빗 서브넷은 다음과 같이 구성할 수 있다.

1. 프라이빗 서브넷 생성

Sky Image

  • IPv4 VPC CIDR 블록
    • 기본 VPC인 172.31.0.0/16에 속하므로 해당 VPC를 선택해준다.
  • IPv4 서브넷 CIDR 블록
    • prefix 값이 /20 이므로 12비트 단위로 네트워크 주소가 증가한다. 마지막 서브넷의 CIDR 블록이 172.31.48.0/20 이므로 여기에 12비트 값을 더한172.31.64.0/20(10101100.11111000.01000000.00000000) 을 할당해준다.

2. 라우팅 테이블 생성

이것으로 서브넷은 생성할 수 있지만 아직 프라이빗 서브넷을 만든 것은 아니다. 프라이빗 서브넷으로 설정해주기 위해서는 반드시 라우팅 테이블을 제대로 설정해주어야 한다. 라우팅 테이블에 대상 주소가 0.0.0.0/0 이고 igw- 로 시작하는 인터넷 게이트웨이로 가는 경로가 있느냐 없느냐에 따라 퍼블릭 / 프라이빗 서브넷으로 구분된다.

Sky Image

✅ NAT 게이트웨이 설정

위와 같이 라우팅 테이블을 지정하면 프라이빗 서브넷의 리소스는 외부 서비스와 통신할 수 없다. 하지만 설치 파일을 다운받는 것과 같이 외부 서비스와의 통신을 필요로 할 때도 있다. 이때 외부 서비스에서는 프라이빗 서브넷의 인스턴스로 접근할 수 없도록 하되 프라이빗 서브넷의 인스턴스에서는 외부로 접근할 수 있도록 해주는 서비스가 NAT 게이트웨이이다.

Sky Image

그림과 같이 프라이빗 서브넷의 통신은 퍼블릭 서브넷의 NAT 게이트웨이를 통해 이루어진다.

1. NAT 게이트웨이 생성

Sky Image

  • 서브넷
    • 사용하고자 하는 VPC의 퍼블릭 서브넷을 선택해야 한다.
    • NAT 게이트웨이는 외부에 접근할 수 있도록 반드시 퍼블릭 서브넷으로 할당해야 한다.

2. Private Subnet 라우팅 테이블 편집

Sky Image

NAT 게이트웨이를 생성한 후 private subnet의 라우팅 테이블에서 0.0.0.0/0 즉 모든 패킷을 NAT으로 보내도록 테이블을 추가해야 한다. 이렇게 설정하면 내부가 아닌 외부로 향하는 트래픽은 모두 NAT 게이트웨이로 보내지도록 설정된다.

(주의!) NAT 게이트웨이는 시간당 0.59달러로 매우 비싸기 때문에 사용하기 전에 비용이 감당 가능한지 고려해보자

참고
[네트워크] 서브넷, 서브넷마스크, 서브넷팅이란? 서브넷팅 예제
[AWS] 퍼블릭 서브넷과 프라이빗 서브넷
[AWS] VPC NAT Gateway 구성하기

profile
나의 성장 기록

0개의 댓글