AWS/concept

VPC (Virtual Private Cloud)

부엉이사장 2024. 1. 6. 18:58

# 개요

VPC는 Virtual Private Cloud의 약자이다

해석하면 가상 프라이빗 클라우드라는건데 aws클라우드 내에서 가상의 네트워크를 만들수 있는거다. 보안적으로 구조적으로 활용가능한 그룹나누기? 이런 느낌이라고 보면 된다.

이 포스팅을 이해하려면 네트워크 기본지식이 어느정도 필요하다.

난 muzzi-house-vpc라는 VPC 가상네트워크를 만들어볼거다. 

 

 

 

# VPC를 만들어볼까?

콘솔 검색창에 VPC를 검색해서 VPC콘솔에 들어가보자.

 

 

 

 

VPC콘솔에서 우린 muzzi-house-vpc를 만들어볼거다. 

'VPC 생성' 버튼을 눌러보자.

그럼 이러한 페이지로 넘어갈텐데, 이름태그에 muzzi-house-vpc라고 적어주자.

그리고 이 네트워크의 대역대를 적어줘야하는데 172.20.0.0대역대에 프리픽스 16으로 만들어줬다.

네트워크 기본지식이 있다면 서브넷마스크가 16이다. 많은 아이피들이 들어갈 수 있다.

저기 자세히 보면 16~28사이라고 한다. B클래스된다는거다.

 

다른 블로그에서 퍼왔는데 대역대를 이렇게 만들어줘야한다고 한다.

https://showdragon.ze.am/6

 

17.2.16 4일차(IP주소 특징, 서브넷팅, vlsm)

4. ip주소 특징(계속) @ IP 주소 사용 주의 사항 1. 중복 X 2. 미할당 IP 주소는 다른 네트워크에 할당하면 안된다. (이유 : 네트워크 이름 중복) @ 공인 IP 주소 & 사설 IP 주소 1) 공인 IP 주소 (Public IP 주

showdragon.ze.am

해당 블로그를 보면, 사설 IP주소 대역대에 B클래스가 172.16.0.0~부터 된다고 하니 난 172.20.0.0/16으로 서브넷을 정해줬다.

암튼 내용들을 적어주고 'VPC 생성' 버튼을 눌러서 만들어주자.

뭐 잘 만들어졌나 보다.

 

 

 

# 이제 서브넷을 만들어줘야함. 근데 서브넷이 뭐야?

 

서브네팅을 알고 있다면 이해할 수 있다.

기존 172.20.0.0/16네트워크 내부에서 또 네트워크 대역대를 나눠주는거다.

당연 기존 네트워크대역에 포함되는 대역으로 만들어줘야한다.

이렇게 난 muzzi-bed-subnet 172.20.10.0/24라는 서브넷과, muzzi-toilet-subnet 172.20.20.0/24처럼 두개를 만들어줄거다.

사실 하나만 만들어줘도 되긴하는데 서브넷끼리 통신들을 해볼꺼라 두개만들어줬다.

 

 

 

# 실제로 콘솔에서 sub넷을 만들어보자.

VPC콘솔에서 왼쪽탭에서 '서브넷'으로 들어가준다.

그럼 이러한 화면이 뜨는데, '서브넷 생성' 버튼을 눌러서 서브넷을 만들어주자.

 

 

서브넷을 만들건데 당연히 이 서브넷이 어떤 VPC에 들어있는 서브넷인지 선택해줘야 겠지?

위에 만든 muzzi-house-vpc로 선택해주자.

 

아래로 내려오면 만들 서브넷의 상세설정을 할 수 있다.

이름은 muzzi-bed-subnet으로 했고, 특이하게 가용영역을 선택할 수 있다.

VPC로 가상네트워크를 만들면 이 대역대가 가용영역을 여러개 포함 할 수 있는거다.

가상스위치로 오버레이 네트워크 구현하듯 이렇게 전국에 퍼져있는 데이터센터에 각각 있는 리소스들이 이 조그만 서브넷에 묶여서 존재 할 수 있다!

난 이 muzzi-bed-subnet을 -2a가용영역에 만들어줬다.

그리고 IPv4 subnet CIDR block머시기 뜨는데 뭐 자세히는 모르겠고, 이 서브넷 네트워크의 대역대를 만들어주는거다.

여기에 존재해야하는 리소스들의 갯수, 즉 아이피갯수를 고려해서 만들어줘야한다.

난 암튼 172.20.0.0/16에 포함되는 172.20.10.0/24대역대로 해줄거다.

 

이제 두번째 서브넷을 만들자.

아래에 '새 서브넷 추가' 버튼을 눌러주자.

이번엔 muzzi-toilnet-subnet이라고 이름지어줬따.

그리고 가용역영은 아깐 2a로 해줬으니 2b로 선택해줬다. (나중에 알고보니 여기엔 프리티어 t2인스턴스 안됨 ㅅㅂ)

물론 대역대는 172.20.0.0/16 VPC대역대에 포함되는 172.20.20.0/24대역대로 만들어줬다.

최종적으로 '서브넷 생성'버튼을 눌러서 서브넷을 만들어주자.

그럼 VPC콘솔 서브넷탭에서 두 서브넷이 만들어진걸 확인 할 수 있다.

아무거나 서브넷 ID링크를 클릭하면

 

이렇게 상세한 서브넷에 대한 정보가 나온다.

IPv4 CIDR을 보면 대역대 잘 정해줬고 프리픽스가 24인데 브로드캐스트주소 뭐 어쩌고 저쩌고 빼고 256개중에 쓸수있는 IP가 251개라고 자세히도 적어뒀다.

 

 

 

# 이 서브넷에 리소스 만들려면 아래설정해줘야함..

서브넷 하나 체크하고 우측 상단에 '작업'버튼을 누르고 '서브넷 설정 편집'으로 들어가주자.

저기 자동 할당 IP설정에 체크해제되어있는거랑 리소스기반이름 머시기 체크박스 둘다 해주자.

이 서브넷에 뭐 만들어지면 자동으로 퍼블릭아이피 주는건데 안하면 접속이 안된다.

그리고 마지막 '저장'버튼을 누르고 완료해주자!

 

 

# ec2를 만들어보자

자 그럼 이 만들어진 서브넷에 리소스를 하나 만들어보자.

 

ec2 인스턴스 AMI(amazon machine image) 생성

# 개요 AMI는 아마존 인스턴스 자체를 이미지로 만들어서 재사용할수 있게 하는거다. 이미지뿐 아니라 여러 리소스를 AMI딸수 있는것 같은데 난 EC2로만 해볼생각이다. KVM공부할때 이미지로 바로

jacobowl.tistory.com

이전 포스팅에서 EC2 인스턴스 만드는 방법은 상세히 적어뒀다.

때문에 자세한 설명은 생략할거다.

암튼 하던대로 EC2콘솔에가서 EC2생성을 하는데, 네트워크설정에서 조금 만져줘야할게 있다.

 

EC2인스턴스 만드는 페이지에서 네트워크 설정하는곳에서 우측 상단 '편집' 버튼을 눌러주자.

 

그럼 VPC등 여러가지를 선택해 줄 수 있는데, VPC는 우리가 아까 만든 muzzi-house-vpc로 선택, 서브넷은 muzzi-bed-subnet으로 선택해줬다.

퍼블릭 IP자동할당을 활성화해서 알아서 퍼블릭아이피 받을 수 있도록 설정해주자.

이외 설정은 꼴리는대로 하고 인스턴스를 만들자.

 

 

 

# 그럼 이 인스턴스에 접속해보자

안된다.

이유는 다음과 같다.

VPC에 만든 muzzi-bed-subnet에 아까 만든 muzzi-instance가 있는데 ssh접속으로 접속하려고 하는중이다.

하지만 가상의 네트워크인 VPC안에 또 다른 네트워크 muzzi-bed-subnet이라는 네트워크가 또 있다.

VPC이름에서도 알 수 있듯이 private한 네트워크다. 이런경우 네트워크대역대끼리 라우팅을 안해주면 통신이 안된다.

우리가 현재 muzzi-bed-subnet에 만들어진 ec2인스턴스에 접속하려는건 ssh 접속이고 네트워크가 분리되었으니 안되는게 당연한거다.

 

그럼 어떻게 muzzi-instance가 통신이 되게 해줘야할까?

 

 

# 인터넷 게이트웨이

인터넷게이트웨이는 진입점? 같은거다. 한 네트워크가 통신하는 구멍? 창문? 문? 이라고 생각해도된다.

이 그림처럼 muzzi-house-vpc라는 네트워크 대역 엣지에 muzzi-house-door이라는 인터넷 게이트웨이를 먼저 뚫어줘야한다.

 

 

# 인터넷게이트웨이를 직접 만들어보자.

VPC콘솔에서 좌측에서 '인터넷 게이트웨이' 탭으로 들어가자.

 

'인터넷 게이트웨이 생성' 버튼을 눌러서 만들어주자

 

서브넷이나 뭐 이것저것 만들었던것처럼 복잡하지않고 단순하게 이름만 정해주면 된다.

난 이 게이트웨이라는 개념이 네트워크대역의 문? 같은 느낌이라고 생각해서 muzzi-house-door이라고 이름지어줬다.

'인터넷 게이트웨이 생성' 버튼을 눌러주자.

 

 

짠~만들어졌다.

근데 어라? 상태가 detached이고 붙어있는 VPC가 없다.

다시 개념그림을 보자면,

 

저렇게 VPC엣지에 muzzi-house-door이라는 게이트웨이가 붙어있어야 하므로 당연히 VPC를 정해줘야하는데 생각해보니 인터넷 게이트웨이 생성할때 이름만 적어줬다ㅋㅋ

이렇게 연결된 VPC를 설정해보자.

VPC콘솔의 인터넷게이트웨이 탭에서 muzzi-house-door인터넷 게이트웨이의 체크박스를 체크하고 우측 상단에 '작업'버튼을 누르고 'VPC에 연결'버튼을 눌러주자.

 

그럼 이런 페이지가 뜨고 VPC를 선택할 수 있다.

우리는 이 muzzi-house-door 인터넷 게이트웨이를 muzzi-house-vpc에 붙여주고 싶으므로 설정해주고 '인터넷 게이트웨이 연결'버튼을 눌러주자.

짜잔~ 이제 muzzi-house-door게이트웨이 상태가 Attached로 바뀌었고 VPC가 muzzi-house-vpc에 잘 연결되었다고 떴다.

 

 

 

 

# 응? 그래도 muzzi-instance에 접속안되는데?

이유는 아래그림과 같다.

네트워크 트래픽이라는게 단방향만 된다고 되는게아니다. 현재는 게이트웨이를 만들어줬으므로, 외부에서 muzzi-instance로 접근은 된다.

하지만 이 muzzi-instance가 대답을 안해주는거다. 마치 카톡을 읽씹하는 도끼병 오지는 썅년마냥 무시하고 있는거다.

사실 더욱 정확하게는 대답은 해주는거다. 근데 이 대답이 어디로 가야할지 모르는거다.

이 아웃바운드 트래픽이 길을 찾을 수 있도록 '라우팅테이블'을 만들어줘야 한다.

 

 

 

# 라우팅테이블

이렇게 라우팅테이블을 만들어주고 모든 네트워크대역대를 가려하는 트래픽을 아까만든 muzzi-house-door인터넷게이트웨이로 보내주는 기능을 할 수 있다.

우리는 0.0.0.0/0(모든네트워크대역)으로가려면 muzzi-house-door 인터넷 게이트웨이로 가라는 설정을 라우팅테이블을 만들고 설정 해줘야 한다.

 

 

# 라우팅 테이블 만들기

VPC콘솔의 좌측탭에서 '라우팅 테이블'로 들어가자.

 

'라우팅 테이블 생성' 버튼을 눌러주자.

 

라우팅테이블이름은 아까 개념그림에서처럼 muzzi-router이라고 정해줬다. 사실 그냥 라우터같아서 걍 이렇게 이름정해줌..

'라우팅 테이블 생성' 버튼을 눌러서 만들어주자.

muzzi-router이라는 라우팅 테이블이 잘 생성되었다.

그럼 이제 0.0.0.0/0대역대로 가려면 muzzi-house-door 인터넷 게이트웨이로 가라는 설정을 해줘야한다.

 

 

# 만든 라우팅테이블 라우팅 설정

현재 화면에서 아래 라우팅 탭으로 들가자.

172.20.0.0/16으로가려면 local로 가라는 라우팅설정밖에없다.(뒤에서 설명할건데 한 vpc대역대 네트워크는 다 통신이가능함)

저기서 '라우팅 편집'이라는 버튼을 눌러주자.

라우팅 편집 페이지로 넘어가느데 '라우팅 추가' 버튼을 눌러주자.

그리고 첫번째 대상을 0.0.0.0/0으로, 두번째 대상을 인터넷게이트웨이 타입으로 선택하고 아까만든 muzzi-house-door로 선택해주자.

그리고 '변경 사항 저장'버튼을 눌러주자.

 

# 서브넷 연결

현재 VPC에는 두가지 서브넷 네트위크 대역대가 있다.

근데 이 muzzi-router이라는 라우팅 테이블이 어떤 서브넷의 트래픽을 제어할 지 모른다.

이 muzzi-router라우팅 테이블이 담당할 트래픽들은 어느 서브넷들일건지 정해줘야 한다.

우리는 아까 만든 muzzi-bed-subnet과, muzzi-toilet-subnet을 이 라우팅테이블에 연결해줘야한다.

아까 하단 탭에서 '서브넷 연결' 탭으로 들어가자.

'서브넷 연결 편집'버튼을 눌러주자.

 

muzzi-bed-sub과 muzzi-toilet-subnet을 체크해주고 '연결저장'버튼을 눌러주자.

muzzi-router 라우팅테이블이 원하는 두 서브넷과 연결이 잘 된걸 확인 할 수 있다.

이제 이 두 서브넷에 생성된 리소스들은 외부네트워크와 통신이 잘 될거다.

 

# 그럼 이제 다시 ec2 ssh 연결해보자!

짠~ 잘 되었다.

 

 

 

 

# 서로 다른 서브넷끼리는 통신이 될까?

한 VPC내에서 만든 서브넷들끼리는 통신이 잘 될까?

인스턴스를 두개 만들어 테스트 해보려고 한다. muzzi-instance와 dori-instance를 만들겠다.

muzzi-instance는 기존에있던거 걍 냅두고 dori-instance를 만들어주자.

인스턴스 만들때 네티워크설정에서 VPC를 muzzi-house-vpc로, 서브넷을 muzzi-toilet-subnet으로, 퍼블릭아이피는 당연히 활성화해서 만들어주자.

아 추가해서 toilet서브넷을 2b가용영역에만들었더니 t2인스턴스가 지원안됨 ㅠ ㅅㅂ

그래서 난 t3마이크로인가 그걸로 만들어줬다.

 

# 핑을 서로한테 던져보면?

난 dori-instance에서 muzzi-instance로 핑을 던졌다.

일단 muzzi-instance의 퍼블릭 아이피로 던져보자.

아주 잘된다.

 

특이한점은

프라이빗 IP로도 핑이 간다는 점이다. (사진을 못찍었는데 172.20.10.157은 muzzi-instance의 프라이빗 IP주소이다.)

 

 

# 이런식으로 보안상, 구조상 VPC를 활용할 수 있다.

퍼블릭서브넷1과 퍼블릭서브넷2는 위에 만들어본 muzzi-bed-subnet, muzzi-toilnet-subnet처럼 한거다. 얘네들은 외부와 통신이 된다. 라우팅테이블에 0.0.0.0/0은 인터넷게이트웨이로 나가라고 해줬기 때문이다. (파란색)

 

프라이빗서브넷1과 프라이빗서브넷2는 라우팅테이블에 명시적으로 연결안해줬다. 얘네들은 공용네트워크와 통신이 되지 않는다. (초록색)

 

또한 한 VPC에서 모든 서브넷은 같은 대역대고 연결되어있으므로 서로 연결이 된다.(빨간색)

 

물론 라우팅테이블을 더 만들거나 설정해주면 서브넷끼리도 통신되고 안되고를 설정할 수 있을것 같다.

 

끗!