AWS VPC와 네트워크 선수 지식

이재민·2024년 7월 7일
0

네트워크

목록 보기
1/1
post-thumbnail

AWS SAA 자격증을 준비하면서 학습한 VPC와 네트워크 관련 내용을 작성해보려고 합니다.
이번 포스팅을 통해 아래 그림의 구성도에 대해 이해하실 수 있습니다.

VPC란

가상 프라이빗 클라우드(VPC)는 퍼블릭 클라우드 내에서 호스팅되는 안전하고 격리된 프라이빗 클라우드이다.
VPC가 없다면 AWS Cloud 안의 리소스들을 연결하기 위해 많은 작업들이 생길 것이고 시스템의 복잡도는 높아질 것이다.
하지만, VPC를 이용하면 위 이미지와 같이 리소스들을 쉽게 관리할 수 있을 것이다.
이렇게 대부분의 AWS 서브시들은 VPC에 의존적이기 때문에 VPC에 대한 이해는 중요한 요소 중 하나이다.


네트워크 선수 지식

사용자가 AWS VPC에 서브넷 생성, 라우팅 테이블 구성 등 네트워킹 환경을 원하는 대로 제어 및 구성하려면 아래의 선수 지식들이 필수이다.

  1. IP 클래스, 서브넷, 서브넷팅, 네브넷 마스크
  2. CIDR

대략 위 2개의 선수 지식을 알아야 한다고 생각합니다.


IP 주소

IP 주소란

IP는 네트워크 장비 식별을 위해 개별 장비에 부여되는 고유 주소이다. 일반적으로 192.168.0.1과 같이 마침표로 구분된 4개의 10진수로 표기하고 이를 2진수로 변환하면 32비트의 11000000.10101000.00000000.00000001와 같이 표현할 수 있다.

IP 주소는 총 32비트로 구성되어 있으며 (8bit = 1byte = 1옥텟)을 10진수로 표기하고 2^32이므로 약 43억 개의 주소를 가진다.

IP 주소의 구성

IP 주소는 네트워크 ID와 호스트 ID로 구성되어 있다.
네트워크ID는 다른 네트워크와 구분하는 역할을 하게된다.
호스트ID는 해당 네트워크의 어느 호스트인지를 나타내어 다른 호스트와 구분하는 역할을 한다.

IP 주소 클래스

IP클래스는 IP주소를 효율적으로 나누어 놓은 범위이고 예전에 IP를 할당하는 방식이었다.
하지만 지금은 더 이상 사용되지 않고 CIDR 방식으로 할당되도록 바뀌었다.
위에서 말했듯이 8bit는 1옥텟이며 32비트는 4개의 옥텟으로 나눌 수 있다. 각 옥텟은 0부터 255까지의 범위를 가지어 총 256개의 값을 표현할 수 있다.

A 클래스

  • A 클래스의 경우 처음 8비트가 네트워크 ID이며, 나머지 24비트가 호스트 ID로 사용된다.
  • A 클래스의 첫번째 옥텟의 비트는 0으로 고정되어 있다.
    • 따라서 A 클래스의 첫 옥텟이 1 ~ 126 사이의 숫자로 시작한다.
    • 00000000(2) ~ 01111111(2)
  • 호스트 ID는 24비트로 구성되어 있으므로 네트워크 당 나올 수 있는 호스트 개수는 1670만개 이므로 대규모 네트워크에 적합하다.

IP 주소에서 첫 옥텟이 0과 127로 시작할 수 없는 이유는 예약되어 있는 주소가 존재하기 때문이다.
0.0.0.0 : 미지정 주소
127.0.0.0 : 루프백 주소

B 클래스

  • B 클래스의 경우 처음 16비트가 네트워크 ID이며, 나머지 16비트가 호스트 ID로 사용된다.
  • B 클래스의 첫 번째 옥텟의 두개의 비트가 10으로 고정 있다.
    • 따라서 B 클래스의 첫 옥텟이 128 ~ 191 사이의 숫자로 시작한다.
    • 10000000(2) ~ 10111111(2)
  • 호스트 ID는 16비트로 구성되어 있으므르 네트워크 당 나올 수 있는 호스트 개수는 65000개 이므로 중규모 네트워크에 적합하다.

C 클래스

  • C 클래스의 경우 처음 24비트가 네트워크 ID이며, 나머지 8비트가 호스트 ID로 사용된다.
  • B 클래스의 첫 번째 옥텟의 세개의 비트가 110으로 고정 있다.
    • 따라서 B 클래스의 첫 옥텟이 192 ~ 223 사이의 숫자로 시작한다.
    • 11000000(2) ~ 11011111(2)
  • 호스트 ID는 8비트로 구성되어 있으므르 네트워크 당 나올 수 있는 호스트 개수는 256개 이므로 소규모 네트워크에 적합하다.

D 클래스

  • D 클래스의 첫 번째 옥텟의 네개의 비트가 1110으로 고정 있다.
    • 따라서 D 클래스의 첫 옥텟이 224 ~ 239 사이의 숫자로 시작한다.
    • 11100000(2) ~ 11101111(2)
  • 멀티캐스트용 대역으로 IP주소 할당에 사용되지 않는다.

E 클래스

  • E 클래스의 첫 번째 옥텟의 네개의 비트가 1111으로 고정 있다.
    • 따라서 D 클래스의 첫 옥텟이 240 ~ 255 사이의 숫자로 시작한다.
    • 11110000(2) ~ 11111111(2)
  • 연구용 예약된 주소 대역으로 IP주소 할당에 사용되지 않는다.

네트워크 주소와 브로그 캐스트 주소

하나의 네트워크에서 사용할 수 있는 IP 주소에서 사용할 수 없는 주소가 2가지 존재한다.
IP 주소의 맨 첫 번째 주소와 맨 마지막 주소는 호스트 주소로 사용할 수 없다.

예를들어 192.168.100 네트워크가 있다면 첫 번째 IP 주소인 192.168.100.0과 마지막 주소인 192.168.100.255는 사용할 수 없다.

이유는 사회적으로 첫 번째는 네트워크 그 자체의 주소, 마지막은 브로드캐스트를 위한 주소이기 때문이다.

네트워크 주소는 말 그대로 네트워크 자체를 나타내는 것이고, 브로드 캐스트 주소는 인터넷 데이터를 전달하기 위한 주소로서 모든 네트워크 아이피 클래스에 동일하게 적용되는 것이다.


서브넷과 서브네팅 그리고 서브넷 마스크

서브넷

IPv4는 초기에 부족한 아이피 주소 문제를 해결하기 위해 IP 클래스로 효율적으로 나눠 할당하는 방법을 택하였다.
하지만, 해당 방법은 비효율적이었다.

예를들어 B 클래스 를 소규모 회사에게 할당하였을 경우 B 클래스 호스트 주소의 개수인 65,000개의 아이피를 다 활용하지 못하고 10,000개의 아이피만 사용한다고 가정했을 때, 나머지 55,000개의 IP는 쓰지 않은 채 회사는 클래스 B의 하나를 점유하고 있는 상태가 되어버린다.
그렇다고 C 클래스 IP를 할당하자니 IP 자원이 부족한 상태가 되어버린다.
이렇게 IP를 클래스 별로 나누어 놓았지만 낭비가 날생하고 있게 되었다.

그래서 이러한 문제를 해결하고자 IP를 네트워크 장치 수에 따라 효율적으로 사용할 수 있는 서브넷 개념이 등장하였다.

서브넷이란

  1. 하나의 네트워크가 분할되어 나눠진 작은 네트워크
  2. 서브넷을 만들기 위해 네트워크를 분할하는 것을 서브네팅이라고 한다.
  3. 이 서브네팅을 서브넷 마스크를 통해 계산된다.

서브네팅

서브네팅은 IP 주소를 효율적으로 나누어 네트워크에 할당하는 방법을 말한다.

위 그림을 보면192.168.10.0/24 의 C 클래스 네트워크 주소를 사용한다고 했을때, 256개의 Host ID 개수를 잘게 나눠 128,128
이를 한 번 더 나눠 64, 64, 64, 64 개의 Host ID를 나눴다면 나누어진 64개를 특정 네트워크에게 할당해주는 것을 서브네팅의 예시다.

2등분을 하기 위해서 호스트 ID의 가장 왼쪽 비트를 서브넷 구분 비트로 지정하여야한다.
가장 왼쪽 비트 1개를 서브넷 구분 비트로 설정하였기에 두개의 영역으로 나눠질 수 있다. (서브넷 구분 비트가 달라지면 나눌 수 있는 영역도 달라진다)
00000000 ~ 0111111 (0 ~ 127)
10000000 ~ 1111111 (128 ~ 255)

이렇게 나눈 서브넷 부분을 회사의 네트워크에 할당하면 됩니다.
하지만, 앞서 설명했듯이 네트워크 주소와 브로드캐스트 주소를 제외한 범위만 가능하다.

서브넷 마스크

서브넷 마스크는 IP주소에서 네트워크 ID와 호스트 ID로 어느 클래스 주소인지 구분하기 위한 목적으로 만들어졌다.
IP주소마다 해당 주소의 범위를 보고 어느 클래스인지 판별할 수 있지만, 더 쉽게 구분하기 위해 서브넷 마스크를 사용한다고 생각하면 된다.
서브넷 마스크는 IP주소와 다르게 연속된 1과 연속된 0으로 구성되어 있다는 것이다.
ex) 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 -> 255.255.255.0(서브넷 마스크)


AWS VPC 구성도

네트워크 사전 지식에 대해 간단하게 알아보았다.
더욱 깊게 다루기엔 분량이 많아지기에 위 배경지식들을 기반으로 아래 참고 영역의 유튜브 링크의 영상을 시청하면 좋을 것 같다.

맨 처음 첨부한 사진을 다시 가져왔다.
이제부터 VPC를 구성할 것이고 아래 사진들에 표현된 각 요소들을 설명하려고 한다.
각 요소들을 설명할때 그림을 참고하면 더욱 이해하기 쉬울 것이다.

VPC

AWS VPC를 구성하기 위해서는 VPC의 IP 범위를 REC1918이라는 사설 IP 대역에 맞춰서 설계해야 한다.
VPC는 각 Region에 종속되어야 하며 한 Region에 여러개의 VPC를 생성할 경우 서로 아이피는 겹쳐서는 안된다. DNS IP를 잡지 못하는 에러가 발생하기 때문이다.
또한, VPC내에서 한 번 설정된 IP 대역은 수정할 수 없다.


AWS 서브넷 구성

VPC를 생성하였다면 서브넷을 생성하여야 한다.
서브넷은 VPC 내부에 있는 IPv4 주소의 부분 범위이다. 즉, VPC를 더 작은 네트워크 단위로 세분화하는 것이다.
각 서브넷은 특정 AZ에 위치해야 하며 여러 AZ에 걸쳐서 서브넷을 생성할 수 없다. 그리고 AWS가 각 서브넷의 IP 주소 5개를 예약하여 사용하고 있다.
그렇기에 아래 예약된 주소를 고려하여 적절한 IPv4 CIDR Block을 생성해야 한다.

  1. 10.0.0.0 : 네트워크 주소
  2. 10.0.0.1 : VPC 라우터를 위해 예약된 주소
  3. 10.0.0.2 : Amazon에서 제공된 DNS에 매핑되기 위해 예약된 주소
  4. 10.0.0.3 : 당장 사용하지는 않지만 미래에 사용될 수도 있기에 예약된 주소
  5. 10.0.0.255 : 네트워크 브로드캐스트 주소 하지만 AWS는 VPC에서 브로드캐스트를 지원하지 않기에 예약은 되지만 사용하는건 안된다.

서브넷 구분

Public Subnet

외부에서 접근이 가능한 네트워크영역이다.
서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결되어 있는 경우 퍼블릭 서브넷이라고 한다.
해당 서브넷은 인터넷과 연결이 가능하므로 퍼블릭 서브넷에 위치한 AWS 리소스들은 공인IP를 가질 수 있다.

Private Subnet

외부에서 다이렉트로 접근이 불가능한 네트워크 영역이다. 즉, 인터넷과 연결되지 않은 서브넷이라고 생각하면 된다.
하지만, 특정 리소스가 인터넷 연결이 필요할 수 있다. 이럴 경우 NAT 게이트웨이를 이용하여 내부에서 외부로 접근이 가능하게 만들어준다.
또한, 같은 vpc 영역에 있으면 private subnet으로 접근이 가능하다.
이로써 엄격하게 다뤄야 하는 리소스들을 안전하게 관리할 수 있다.


네트워크 ACL과 보안그룹

네트워크 ACL(Network Access Control List)와 보안그룹(Security Group)은 VPC 내에서 인바운드, 아웃바운드 트래픽에 대한 보안 정책을 설정하고 관리합니다.

NACL과 Securiy Group은 비슷하지만 다른 차이점을 갖고 있다.

네트워크 ACL

NACL은 상태 비저장(Stateless) 방식으로 동작하여 인바운드와 아웃바운드 규칙을 독립적으로 처리한다.
즉, 특정 트래픽이 인바운드 규칙에 허용되어 진입하더라도 상태 비저장 특성 때문에(기억하지 않음) 아웃바운드 규칙에 의해 허용된 트래픽이 거절될 수도 있다는 것이다.

모든 트래픽이 기본적으로 허용되는 것이 아니기에 명시적으로 트래픽을 제한하거나 허용하는 규칙을 설정해야 한다.
NACL은 서브넷 단위로 적용되며 각 서브넷마다 하나의 NACL이 할당된다.
새로운 서브넷을 생성하게되면 기본 NACL로 설정되며 모든 트래픽을 허용하는 설정을 가지고 있다.
NACL에는 규칙 정의가 있다. 규칙에는 숫자가 있고 1~32766까지 정의할 수 있다. 숫자가 높을 수록 우선순위가 높다. ALLOW, DENY를 구성할 수 있다.

보안 그룹

보안 그룹(Security Group)은 상태 유지(Stateful) 방식으로 동작하기에 트래픽이 허용되면 반환 트래픽도 자동으로 허용된다.
즉, 특정 트래픽이 인바운드 규칙에 허용되어 진입한다면 상태 저장 특성 때문에(기억하고 있음) 아웃바운드 규칙과 상관없이 아웃바운드를 통과하게 된다.

보안 그룹은 트래픽의 거부 규칙을 지원하지 않는다.

네트워크 ACL과 보안 그룹 차이점

  1. NACL은 상태 비저장, 보안그룹은 상태 저장 특성을 가진다.
  2. 보안 그룹은 인스턴스 수준에서 동작하지만 NACL은 서브넷 수준에서 동작한다.
  3. 보안 그룹은 허용 규칙을 지원하지만 NACL은 허용, 거부 2가지 규칙을 모두 지원한다.
  4. NACL에서는 특정 IP를 거부할 수 있다.
  5. 보안 그룹에서는 모든 규칙이 평가되고 트래픽 허용 여부를 결정하지만, NACL에서는 가장 높은 우선순위를 가진 것이 먼저 평가된다.
  6. 보안 그룹은 할당된 EC2 인스턴스에 지정되지만 NACL은 연결된 서브넷의 모든 EC2 인스턴스에 적용된다.

인터넷 게이트웨이

인터넷 게이트웨이는 VPC와 인터넷 사이에 통신을 가능하게 하는 고가용성 VPC 컴포넌트이다.
수평 확장되고 가용성이 높은 중복 VPC 구성 요소로 VPC의 인스턴스와 인터넷 간에 통신할 수 있게 해준다.
따라서 네트워크 트래픽에 가용성 위험이나 대역폭 제약 조건이 발생하지 않는다.

인터넷 게이트웨이는 2가지 용도로 제공된다.

인터넷 게이트웨이는 2가지 용도

1. 인터넷 트래픽 라우팅

  • 인터넷 게이트웨이는 VPC의 라우팅 테이블에서 인터넷으로의 트래픽을 전송할 수 있는 대상 역할을 한다.
  • 예를 들어 퍼블릭 서브넷의 트래픽이 인터넷으로 나가야 하는 경우, 해당 서브넷의 라우팅 테이블에 "인터넷 게이트웨이를 통해 모든 트래픽(0.0.0.0/0)을 인터넷으로 보낸다" 라는 규칙을 할당하면 된다.
    • 퍼블릭 서브넷의 라우팅 테이블에 아래와 같은 규칙이 있으면 된다.
    • Range: 0.0.0.0/0 (모든 IPv4 주소)
    • target: igw-xxxxxx(인터넷 게이트웨이 ID)

2. NAT 수행

  • 인터넷 게이트웨이는 VPC 내의 퍼블릭 IPv4 주소를 가진 인스턴스가 인터넷과 통신할 수 있도록 네트워크 주소 변환(NAT)를 수행한다.
  • 퍼블릭 IPv4 주소를 가진 인스턴스의 네트워크 주소 변환을 관리하여 프라이빗 IP와 퍼블릭 IP 간의 트래픽을 올바르게 라우팅해준다.

NAT Gateway

NAT 게이트웨이는 프라이빗 서브넷 내 리소스가 인터넷과 통신할 수 있도록 하는 AWS 관리형 서비스이다.
위와 같은 특징 덕분에 프라이빗 서브넷의 인스턴스는 인터넷을 통해 외부 서비스를 호출하거나 데이터 업데이트, 다운로드를 할 수 있지만, 외부에서는 직접 접속할 수는 없다.
이를 통해 보안을 높일 수 있다.

프라이빗 서브넷내의 리소스가 외부 인터넷에 접근하는 과정은 다음과 같다.

  1. NAT 게이트웨이를 생성 시 퍼블릭 서브넷과 연결해야 하며, 탄력적 IP(EIP) 주소를 할당받는다.
  2. EC2 인스턴스가 프라이빗 IP 주소를 통해 라우터에 데이터를 전송한다.
  3. 프라이빗 라우팅 테이블을 참고하여 NAT 게이트웨이로 향한다. (프라이빗 서브넷의 트래픽을 NAT 게이트웨이로 향하도록 라우팅 테이블 설정)
  4. NAT 게이트웨이는 프라이빗 IP 주소를 퍼블릭 IP 주소로 변환하여 인터넷 게이트웨이를 거친 후 외부 인터넷으로 데이터를 전송한다.
  5. 사용자는 NAT 게이트웨이에서 변환된 퍼블릭 IP 주소로 전달받는다.

정리

이번 포스팅으로 VPC 구성에 필요한 요소들과 필수적인 네트워크 사전 지식에 대해 학습할 수 있었습니다.
이제 아래 이미지에 표기된 요소들에 대해 충분한 이해가 되셨으리라 생각됩니다.

VPC를 학습하는 과정에서, 포스팅에서 언급한 기본 요소 외에도 다양한 AWS 서비스들이 존재합니다.
예를 들어

  • VPC 피어링: 서로 다른 VPC 간의 네트워크 트래픽을 연결해주는 기능.
  • Bastion 서버: 외부에서 프라이빗 서브넷에 안전하게 접속할 수 있도록 해주는 점프 서버.
  • VPC 엔드포인트: 퍼블릭 인터넷을 경유하지 않고도 프라이빗 서브넷에서 AWS 서비스에 직접 접근할 수 있도록 해주는 구성 요소. 인터페이스(Interface) 엔드포인트와 게이트웨이(Gateway) 엔드포인트로 나뉩니다.

위 서비스를 제외하고도 다양한 서비스들이 존재합니다.

이와 같은 다양한 VPC 관련 서비스들을 학습하다 보면, 자연스럽게 보안, 고가용성, 내구성 측면에서 우수한 네트워크 설계를 할 수 있는 능력을 키울 수 있습니다. 또한, 이 과정에서 네트워크 지식 역시 깊이 있게 이해하게 될 것입니다. VPC와 관련된 내용을 학습하는 것은 네트워크 설계와 관리에 대한 기본적이면서도 중요한 능력을 향상시킬 수 있는 좋은 기회이기에 꼭 한번 학습해보시는 것을 추천드립니다.

참고
https://www.youtube.com/watch?v=b7Wk-6w5vgg&t=24s
https://www.youtube.com/watch?v=-iMFsDdfoeI&t=1199s
https://brunch.co.kr/@swimjiy/43
https://ee2ee2.tistory.com/entry/Network-IP-%ED%81%B4%EB%9E%98%EC%8A%A4ABC-class%EB%9E%80
https://inpa.tistory.com

profile
문제 해결과 개선 과제를 수행하며 성장을 추구하는 것을 좋아합니다.

0개의 댓글