[AWS] VPC 알아보기

Kai·2022년 10월 30일
3

이 글은 양승도 아키텍터가 AWS컨퍼런스에서 발표한 강의를 참고하였다.
엄청 좋은 강의인 것 같아서 VPC를 공부하시는 분들께 추천한다.
또, 인프런에 있는 노마드 컨텐츠 랩의 AWS강의를 참고하였다.

🦾 누구를 위한 글인가?


  • VPC를 처음 접하거나 개념이 거의 잡혀있지 않은 사람
  • VPC를 구성하는 실제 예시가 궁금한 사람
  • AWS에서 어떤 리소스 하나가 동작하는 흐름 전체를 알고 싶은 사람

(나는 3가지 모두 해당함 🤭)


🧐 할 것


  • VPC에 대한 개념 및 관련 용어 정리
  • 공부한 것을 토대로 실습

1. 개념 📃

VPC란?


VPC는 Vitual Private Cloud의 약자이고, 독립적인 가상의 네트워크 공간 의 의미를 갖는다.
좀 더 쉽게 얘기한다면 가상의 데이터 센터라고 생각하면 된다.
'데이터 센터'라는 것은 우리가 흔히 접하는 사내 전산망과 같은 것이라고 보면 된다. 여러 데이터들이 저장되어 있고, 다양한 프로그램들이 돌아가고 있고, 외부에서 접속하려면 정해진 포트와 규칙으로만 접근이 가능한 폐쇄된 공간.

VPC의 구조


VPC는 위와 같은 구조를 갖는다.
아마존에 가입하면 먼저 VPC를 할당을 해주고, 내가 RDS나 EC2등등의 서비스를 이용하면, 설정에 맞게 나의 VPC안에 있는 서브넷에 배치가 된다.

실제 시나리오로 설명을 한다면, 다음과 같다.

1. VPC 생성 > AWS내에서 '나'만이 사용할 수 있는 데이터 센터가 생김
2. 서브넷 생성 > 어떠한 규칙을 갖는 그룹을 갖게 됨
3. EC2 생성 > '나'의 vpc와 생성된 서브넷의 규칙속에서 어떠한 역할을 하는 프로그램 또는 서버가 돌아감

1,2번을 따로 하지 않고 바로 EC2를 만들더라고 1,2번을 설정하는 과정이 포함되어 있다.

CIDR (Classless Inter Domain Routing)


  • IP를 표현하는 국제적인 표준
  • VPC에서 CIDR을 생성할 때의 예시
10.0.0.0/16을 VPC의 CIDR로 설정했다고 가정해본다.
-> 슬래시뒤의 16이라는 숫자는 총 32비트로 구성되는 IP에서 앞에 16비트는 고정한다는 의미를 갖고 있다.
즉, 뒤에 16비트로 다양한 IP를 구성할 수 있고 결과적으로 65536개(2의 16승)의 IP를 구성할 수 있다.
-> 이 VPC는 65536개의 Private IP를 가질 수 있다.
  • 슬래시 뒤의 값은 16 을 권장함.
  • Private IP를 설정할 때 RFC에서 권장하는 3가지 형식
10.0.0.0 ~ 10.255.255.255 -> 10/8prefix
172.16.0.0 ~ 172.31.255.255 -> 172.16/12prefix
192.168.0.0 ~ 192.168.255.255 -> 192.168/16prefix
  • 위와 같은 표준을 권장하는 이유?
    -> 저 범위말고는 public IP로 사용되기 때문에 private IP와 public IP를 명확히 분리하기 위함.

서브넷이란?


VPC내부의 내부망이다. 같은 서브넷에 속한 인스턴스들 끼리 동일한 규칙이나 보안을 적용하기 위해서 사용된다.

Internet gateway란?


VPC는 기본적으로 폐쇄된 네트워크 환경이다. 그래서 외부와 통신을 하려면 Internet gateway라는 외부와 소통할 수 있는 길을 만들어줘야한다.
사람들에게 서비스할 웹서비스를 특정 EC2인스턴스에서 돌린다고 가정하면, 이 EC2인스턴스는 외부와의 통신이 허용된 Internet gateway를 통해서 외부와 통신을 하게 된다.

인바운드, 아웃바운드 트래픽


  • 인바운드 트래픽: 들어오는 트래픽
  • 인바운드 룰: 들어오는 트래픽에 대한 규칙
  • 아웃바운드 트래픽: 나가는 트래픽
  • 아웃바운드 룰: 나가는 트래픽에 대한 규칙

보안 설정


- Network ACLs (NACLs)

  • 서브넷 단위로 적용되는 보안 규칙
  • Stateless방식: 인바운드 트래픽을 기억하지 않음 -> 인바운드와 아웃바운드 트래픽에 각각 규칙을 설정해주어야함.

- Security groups (SG)

  • 지정한 EC2인스턴스 또는 IP 별로 적용되는 보안 규칙
  • Stateful방식: 인바운드 트래픽을 기억함 -> 인바운드 트래픽이 허용되면, 아웃바운드는 자동적으로 허용

NAT gateway


  • 아웃바운드 전용 게이트웨이
  • 외부에서는 서버에 직접 접근할 수 없게 하지만, 서버는 새로운 코드를 다운받는 등의 행위가 가능하도록 하는 서비스

⭐ VPC요약


vpc를 이해하기 쉽게 실생활에 비유해보겠다.

vpc: 사람이 사는 집
서브넷: 집 안에 있는 방
IG (Internet gateway): 현관문
EC2등등의 프로그램들: 집안 여기저기에 놓여있는 어떠한 역할을 하는 물건들 또는 가구들

2. 실습 🔨

2-1) VPC 생성


VPC 대시보드 > VPC 생성

VPC의 이름과 사용할 IP의 대역폭을 설정한다.

여기서 설정한 IPv4 CIDR의 값에 따라서 최대로 할당할 수 있는 private IP의 갯수가 정해진다.
예를 들어서, 10.0.0.0/16 으로 설정했다면 이 VPC에서 사용할 수 있는 IP 대역폭은 다음과 같다.

10.0.0.0 ~ 10.0.255.255

나는 10.1.0.0/16으로 값을 설정함


2-2) 서브넷 생성


VPC 대시보드 > 메뉴에서 '서브넷'으로 이동 > 서브넷 생성

서브넷은 Public서브넷 2개, Private 서브넷 4개를 만들어줄 것이다.
서브넷을 생성하려고 하면 아래와 같이 이름, 가용영역, IPv4 CIDR블록을 설정해야한다.

6개를 아래와 같은 값들로 설정한다.

서브넷 이름: public-subnet-a1
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.1.0/24
서브넷 이름: public-subnet-c1
가용 영역: ap-northeast-2c
IPv4 CIDR: 10.1.2.0/24
서브넷 이름: private-subnet-a1
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.3.0/24
서브넷 이름: private-subnet-c1
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.4.0/24
서브넷 이름: private-subnet-a2
가용 영역: ap-northeast-2a
IPv4 CIDR: 10.1.5.0/24
서브넷 이름: private-subnet-c2
가용 영역: ap-northeast-2c
IPv4 CIDR: 10.1.6.0/24

(값 들은 무조건 위의 형식을 따라야하는 것은 아니고, 사용할 수 있는 IP범위 안에서 자유롭게 설정할 수 있다.)

생성을 완료하면, 서브넷 대시보드에는 다음과 같이 Available상태로 서브넷들이 생성된 것을 확인할 수 있다.


2-3) 🧐 VPC와 서브넷을 생성한 것의 의미


  • EC2나 RDS같은 AWS의 리소스들이 생성될 수 있는 공간이 마련됨
  • 단, 리소스들 사이에 소통할 수 있는 길과 인터넷과 소통할 수 있는 길은 만들어야함

2-4) Internet gateway (Igw) 생성


vpc 대시보드 > 메뉴에 '인터넷 게이트웨이' 클릭 > 인터넷 케이트웨이 생성

Igw의 이름을 간단히 짓고 바로 생성한다.

이제 위에서 만든 VPC를 Igw에 붙여주어야한다.
'vpc에 연결' 버튼을 눌러서 VPC와 연결해주자.

그러면 Igw의 상태가 Attached 로 변한 것을 확인할 수 있고, 이제 우리의 VPC는 인터넷과 통신할 수 있는 통로를 갖게 되었다.


2-5) Route table 구성


✔ Route table?

Route table 은 네트워크 간의 통신에 있어서 목적지로의 데이터 패킷 이동 정보를 구성하는 규칙이다.
즉, EC2나 RDS와 같은 리소스들이 목적지에 따라서 어떤 경로를 타고 이동할 것인지 정의해주는 테이블이라고 할 수 있다.

✔ Route talble 생성

VPC 대시보드 > 메뉴에 '라우팅 테이블' > 테이블 생성

라우트 테이블은 아래와 같이 이름과 VPC를 설정해주면 된다.

✔ 서브넷 맵핑

또, 이 라우트 테이블을 어떤 서브넷에 적용할지도 선택해줘야한다. 생성한 라우트테이블 페이지로 가서 '서브넷 연결 편집'을 클릭하자.

퍼블릭 라우트 테이블은 위에서 생성한 2개의 퍼블릭 서브넷에 모두 적용해주자.

✔ Internet gateway 맵핑

또, 퍼블릭 서브넷들은 인터넷과 통신이 되어야하므로, 이 라우트 테이블의 경로에 위에서 설정한 Igw를 추가해주자.

이렇게 하면, 외부와 통신할 때는 맵핑한 igw를 통해서 통신하게 된다.

✔ Private 서브넷에 대한 Route table 구성

Private 서브넷들은 위와 같은 방식으로 각각 1개씩 RT를 구성해준다.
단, 인터넷과 통신은 직접하지 않을 것이므로 Igw를 맵핑하는 것은 생략한다.


2-6) 🧐 중간점검


현재까지 해준 작업들을 정리하자면 다음과 같다.

  • VPC 생성
  • VPC안에 2개의 퍼블릭 서브넷과 4개의 프라이빗 서브넷 생성
  • VPC에 인터넷과 소통할 수 있는 Igw 구축
  • 퍼블릭 서브넷용 RT 1개와 4개의 프라이빗 서브넷 마다의 RT를 구성함으로써 리소스 간의 통신과 인터넷과의 통신이 가능해짐

여기까지하면 사실 나만의 VPC를 구성하는 것은 완료가 된 것이다.
다음 스텝은 실제로 EC2같은 리소스들을 생성하고, 우리가 의도한대로 잘 동작하는지 한번 살펴보도록 하겠다.


2-7) EC2 인스턴스 생성


EC2 인스턴스를 생성하는 페이지로 이동하자.
이번 실습은 웹서비스를 EC2로 돌린다는 가정을 하도록 하겠다.
인스턴스를 생성할 때는 서버 종류같은 거는 기본으로 세팅하면 되고, 아래의 3가지만 직접 설정해주면 된다.

  • EC2이름 : 원하는대로
  • 키페어: 이름은 원하는대로하고 나머지 옵션은 기본으로 두고 키페어 생성
    (❗키파일은 잃어버리지 않게 잘 보관하기)
  • 네트워크 설정: VPC와 서브넷 맵핑, 보안그룹 설정을 해준다. 자세한 건 아래의 이미지를 참고.

인바운르 룰에는 ssh, http, https에 대한 룰을 추가해주면 된다.

여기서 MySQL같은 DB와 통신을 해야한다고 하면, MySQL에 대한 '유형'을 선택해주고 Source type은 해당 DB의 private IP를 세팅해주면 된다.


2-8) EC2 인스턴스에 퍼블릭 Ip할당


이전에 인스턴스를 생성해줄 때, 퍼블릭 Ip를 자동 할당하는 기능을 활성화하지 않았기 때문에 직접 Ip를 할당해주자.
자동 할당을 비활성화한 이유는 고정된 퍼블릭 Ip를 사용하기 위함이다.

탄력적 Ip 메뉴로 이동해서 아래와 같이 입력해주자.
모두 기본 값이고, 편의상 태그만 추가해주었다.

생성하면 이렇게 EIp가 하나 생성된 것을 확인할 수 있다.

그리고 아래의 Ip 연결 버튼을 눌러서 생성한 EC2에 연결시켜주자.


2-9) EC2 인스턴스에 ssh접속


EC2 인스턴스 페이지에 접속한 후에 '연결'을 눌러서 ssh로 접속을 해보면, 이렇게 정상적으로 서버에 접속이 되는 것을 확인할 수 있다.

이로써 외부에 서비스할 수 있는 나만의 또는 우리 회사만의 데이터 센터를 갖게 되었다! 🤭


3. 꺼진 과금도 다시 보자


실습은 모두 마쳤지만, 생성한 것들을 그대로 두면 언제 어디서 어떻게 청구서가 날라올지 모른다 ㅎㅎㅎ
(다들 AWS 쓰다보면 이런 경험 한두번쯤은 해보셨쥬..? ㅠㅠ)

그래서 지금까지 생성했던 것들을 잊지말고 다 지워주자. 지우는 순서는 생성한 것을 역순으로 지워주면 되는데, 헷갈릴수도 있으니 아래에 지우는 순서를 정리했다.

✔ EC2 관련

1. EC2 인스턴스 종료
2. (몇 시간 후 인스턴스 목록에서 사라짐)
3. EIp(탄력적 ip) 릴리즈: EIp페이지로 가서 삭제할 Ip선택 후, '릴리즈'하면 됨
4. 키페어 삭제
5. 보안그룹 삭제

✔ VPC 관련

1. 라우팅 테이블(RT)에서 서브넷 연결 해제: RT 하나 하나마다 서브넷 연결을 해제해야함.
2. RT 삭제 (5개): 모든 서브넷 연결을 해제 했으면 RT를 삭제할 수 있다.
3. 서브넷 삭제 (6개)
4. VPC, Igw 삭제

이렇게 혹시 모를 과금 폭탄 방지도 완료! 🤭


마무리 🎓


막상 글을 쓰고 보니 내용이 너무.. 많은가 싶긴하다..ㅎㅎ;;

그래도 나는 이번 기회를 통해서 기본적인 VPC의 원리와 AWS 서비스들의 네트워크 흐름을 많이 익힌 것 같다.
이전에는 vpc나 서브넷같은 것에 대해서 개념이 없다 보니, AWS를 사용하는 게 좀 막연하고 와 닿지 않았었다.
이해를 잘 못하는 부분에서 설정이 잘못되면 한~참을 헤매기도 했었는데, 이제는 어떤 방식으로 동작하는지 알고 사용할 수 있으니까 이런 부분들이 많이 좋아지지 않을까 기대해본다.

그럼 이번 글은 여기서 마치겠다.
언제나 좋아요, 댓글, 피드백은 매우 환영이다.
글을 읽는 사람 모두에게 AWS를 이해하는데 조금이나마 도움이 됐으면 한다 🤭

0개의 댓글