AWS VPC & EC2 튜토리얼

Halim Kim·2021년 11월 3일
1

작성계기

리눅스 스터디를 진행하면서 실습용으로 리눅스 환경을 구성할 필요가 생겼다. 사실 나는 Windows를 이용해서 Windows의 WSL2를 사용해도 충분히 실습하는데는 문제가 없지만 이번 기회에 퍼블릭 클라우드 사용 연습도 해볼 겸 AWS를 이용하여 VPC를 생성하고 EC2로 CentOS 7 가상머신을 생성해보았다.

이전에 퍼블릭 클라우드를 아예 안다뤄본 것은 아니지만, 그 때는 VPC가 정확히 무엇인지도 모르고 그냥 튜토리얼만 따라했던 것 같다. 그래서 이번 포스팅에서는 단순히 튜토리얼만 제공하기보다는 VPC의 개념을 파악할 수 있도록 작성해볼 생각이다.

준비사항

1. AWS 계정
2. VPC 학습

이 중에서 두 번째의 경우 유튜브에 올라온 강의(가상 데이터 센터 만들기 - VPC 기본 및 연결 옵션)를 추천한다.

위에 링크를 올린 강의가 친절하고 쉽게 설명되어 있기는 하지만 그래도 스스로 개념도 정리해보는 차원에서 전체구조를 한번 그려보면 아래와 같다.

먼저 용어 정리를 한번 해보면,

  • 1. VPC : VPC는 Virtual Private Cloud를 의미한다. 즉 가상의 Private Cloud인데, 이렇게 적어놓으면 이해하기 힘드니까 의미를 설명해보겠다. 예전의 AWS의 인스턴스는 VPC 없이 하나의 네트워크 내부에서 제공이 되었다. 즉 이 말은 ①다른 고객들의 인스턴스들과 내가 사용하는 인스턴스가 분리가 되지 않았다는 뜻이다. 이 문제를 해결하기 위해 ②논리적으로 네트워크를 분리해서 내가 사용하는 인스턴스가 다른 고객들이 사용하는 인스턴스와 분리를 한 것이 VPC인 것이다.

  • 2. Public & Private Subnet : 위의 그림에서 VPC 안에 Public Subnet이 있고, Private Subnet이 있는 것을 확인할 수 있는데, VPC 내부에서도 Subnetting을 통해 네트워크를 나눌 수 있다. 이 때 Public Subnet은 외부 인터넷과 연결이 가능한 Subnet이고 Private Subnet은 불가능하다. Private Subnet이 아예 외부 인터넷과 단절된 것은 아니다. NAT(Network Address Translation) 기술과 같은 VPC 내에 존재하는 Public Subnet을 이용해서 Private Subnet의 데이터를 외부 인터넷으로 전송할 수 있다.

  • 3. Internet Gateway : Public Subnet은 외부 인터넷과 통신이 가능하다고 했는데, 이 때 Internet Gateway가 Public Subnet에서부터 생성된 데이터를 외부 인터넷으로 보내주고, 또 외부 인터넷에서 송신된 데이터를 Public Subnet으로 보내주는 역할을 한다.

  • 4. EC2 Instance : EC2는 Elastic Compute Cloud를 의미한다. 클라우드라는 것을 처음 접해본 사람들은 Instance라는 용어가 헷갈릴 수 있는데, 객체지향프로그래밍의 객체라는 의미로 사용될 수도 있으나 클라우드에서는 CPU, Disk, Memory 등의 HW를 갖춘 하나의 서버라고 보는 것이 편할 것이다. 그러니까 인스턴스를 5개를 쓴다면 5개의 서버를 사용한다는 것이다.

AWS로 VPC & EC2 생성해보기

AWS Console 접속


먼저 AWS로 들어가서 로그인을 해서 AWS 관리 콘솔로 들어가면 위와 같은 화면이 보일 것이다. 나는 이 포스팅을 작성하기 전에 EC2와 VPC를 먼저 작성해보았기 때문에 최근 방문한 서비스로 EC2와 VPC가 뜨지만 처음 AWS를 사용하는 사람은 아닐 것이다.

그럴 때는 우측상단에 있는 서비스 버튼을 클릭해서 EC2와 VPC 서비스를 찾을 수 있고 또한 검색을 통해서도 찾을 수 있다.

VPC 생성

EC2를 생성하기 전에 먼저 네트워크를 구성하려고 하니 AWS 관리 콘솔에서 VPC 관리 콘솔을 찾아간다.

VPC 관리 콘솔로 들어가면 위와 같은 화면을 볼 수 있다. 이 때 VPC 마법사 시작으로 자동으로 VPC를 구성할 수도 있지만 직접 VPC를 구성해보기 위해서 좌측에 보이는 가상 프라이빗 클라우드에서 VPC 버튼을 클릭한다.


VPC 버튼을 클릭하고 나면 페이지에 VPC 목록이 보일 것이다. 새로운 VPC를 구성할 것이기 때문에 우측 상단의 VPC 생성 버튼을 클릭한다.

VPC 생성 버튼을 누르고 나면, 새로운 VPC의 이름과 CIDR를 지정해줄 수 있다. 이름은 본인 선택에 따라서 정하면 되는데 나는 회색 글자로 표시된 예시 그대로 'my-vpc-01'을 그대로 사용했다.

여기서 헷갈리는 것은 CIDR일텐데 일단 CIDR의 정의부터 알고 시작을 하는 것이 좋을 것이다.

CIDR : Classless Inter-domain Routing의 약자로 말 그대로 Class없이 사용하는 네트워크 주소라고 할 수 있다. 예전에는 IP 주소에서 Class라는 개념을 사용했지만 IP 주소를 더 원활하게 할당하기 위해서 CIDR을 사용하게 되었다. CIDR을 사용하면 기존의 Class처럼 네트워크 주소와 호스트 주소의 길이를 Class에 따라 고정하지 않아도 되기 때문에 유연하게 IP 주소를 활용할 수 있다. 예를 들어 Class 방식에서는 네트워크 주소를 Class에 따라 8 bit, 16 bit, 24 bit로 사용했다면, CIDR에서는 172.16.0.0/12처럼 자유롭게 Subnet Mask의 길이('/' 문자 옆의 숫자, 12)를 지정해주어 네트워크 주소와 호스트 주소를 구분한다.

이전에 IP의 Class에 대해서 포스팅을 했었는데, 참고하길 바란다. (지금은 IP 주소에서 Class가 아닌 CIDR을 사용해서 언젠가 포스팅을 해야겠다고 생각하고는 있었는데, 이제야 올린다..)

CIDR를 사용할 때 한가지 더 알아야 할 것이 있다. RFC 1918 규약인데, Public IP와 Private IP를 헷갈리지 않기 위해서이다.

Private IP는 내부망에서 사용하고, Public IP는 인터넷에서 사용하는 것이다. 그러니까 하나의 Public IP는 전세계에서 유일한 값을 가진다.

CIDR를 사용할 때, RFC 1918 규약을 지켜야 하는데, 이는 위에서 언급한 Public IP와 Private IP를 헷갈리지 않기 위해서이다. RFC 1918에서는 내부망에서 사용하는 Private IP의 주소 범위를 정해놓았다. 주소 범위는 아래를 참고

주소 범위Subnet 길이표시이진법
10.0.0.0 ~ 10.255.255.255810.0.0.0/800001010.x.x.x
172.16.0.0 ~ 172.31.255.25512172.16.0.0/1210101100.0000x.x.x
192.168.0.0 ~ 192.168.255.25516192.168.0.0/1611000000.10101000.x.x

CIDR에 대해서 감이 잡힌다면 이제 VPC의 IPv4 CIDR 블록을 잡아보겠다. AWS에서는 CIDR 블록의 넷마스크의 길이를 16~28로 제한하였다. 그러니까 이 범위 안의 넷마스크를 써야하는 것이다. 일단 나는 AWS EC2 인스턴스를 그렇게 많이 만들지 않을 것이다. 그러니까 VPC 내부의 Host 주소가 많을 필요가 없다. 그래서 그냥 AWS가 추천해준대로 10.0.0.0/24로 CIDR 블록을 설정해주었고 이렇게 하면 RFC 1918 규약도 지켰으며, Host 주소를 8 bit을 사용해서 VPC 내에서 Private IP는 2^8=256개를 사용할 수 있다.(사실 특수 용도 IP 때문에 256개보다는 적은 개수를 쓸 수 있다.)

CIDR 블록을 설정을 완료했으면 VPC 생성 버튼을 눌러 VPC 생성을 완료한다.

Subnet 생성

VPC를 생성했으니 이제 Subnet을 생성해야 한다. 이번 포스팅에서는 Public Subnet만을 생성해볼 것이다.

VPC를 생성했을 때처럼 VPC 대시보드(관리 콘솔에서 좌측에 보이는)의 가상 프라이빗 클라우드 항목 아래의 두번째에 서브넷 버튼이 있다. 그것을 클릭해서 서브넷 관리 페이지로 이동한다.

서브넷 관리 페이지도 VPC 관리 페이지와 UI가 비슷하다. 우측 상단의 서브넷 생성 버튼을 눌러 서브넷을 생성한다.


서브넷 생성 버튼을 눌러 이동하면 위와 같이 어떤 VPC 내에 서브넷을 만들 것인지 결정할 수 있다. 위에서 생성한 'my-vpc-01'을 선택한다.


VPC를 선택하면 위와 같이 서브넷 설정창이 뜬다. 서브넷 이름은 추천대로 'my-subnet-01'로 정해주었고 가용영역을 중간에 설명을 안했는데, 일단은 장애가 발생했을 때도 서비스가 지속 운영되기 위해 필요한 장치라고만 기억하고 넘어가고 'ap-northeast-2a'로 설정한다.

참고! 아시아 태평양, ap-northeast-2a가 뜨지 않는다면, 관리 콘솔 우측 상단의 지역이 서울인지 아니면 다른 지역인지 확인할 것. 만약 서울이 아니라 다른 지역이면 ap-northeast-2a가 뜨지 않고 다른 지역(Region)의 가용영역이 뜰 것이다.

그 다음 서브넷의 IPv4 CIDR 블록은 VPC에서 10.0.0.0/24로 CIDR 블록을 지정해주었으니 넷마스크가 24보다 작거나 같아야 한다. (VPC 내의 IP 주소 중 앞의 24 bit가 이미 고정이기 때문이다.)
나는 '10.0.0.0/26'으로 설정해주었다.

마지막으로 생성 버튼을 누르면 서브넷이 생성이 된다. 그리고 여기서는 Public Subnet으로 만들 것이기 때문에 Public IP가 필요하다.

생성된 서브넷을 클릭하고, 우측 상단의 작업 버튼을 눌러 '자동 할당 IP 설정 수정' 버튼을 누른다.

그 다음 퍼블릭 IPv4 주소 자동 할당 활성화를 체크한 뒤에 저장한다.


  • (추가!) Subnet이 헷갈리는 사람을 위한 그림

아무래도 Subnet 형성을 할 때, 10.0.0.0/24니 10.0.0.0/26이니 계속 헷갈리게 숫자가 나와서 이해하기 어려운 사람들이 있을 것이라고 생각해서 그림을 준비해보았다.

32 bit 길이의 IPv4의 주소를 표로 나타내면 위와 같을 것이다. (특수목적의 주소를 제외하지는 않았다.)

이 포스팅에서 VPC를 생성할 때 CIDR 블록을 10.0.0.0/24로 설정하였다. 이 말은 즉 앞의 24 bit는 고정이어서 이진수로 나타낼 때, 0000 1010 0000 0000 0000 0000은 항상 똑같다는 말이다. 이를 표현한 그림은 아래와 같다.

그림을 보면 앞의 24 bit가 0000 1010 0000 0000 0000 0000 값을 가진 곳은 모두 파란색으로 칠해놓았다. 즉 이 부분이 VPC 내에서 사용하는 IP 주소라는 것이다.

그리고 Subnet을 생성할 때 CIDR 블록은 10.0.0.0/26으로 설정하였다. 똑같이 이 말은 앞의 26 bit가 고정이라는 것이다. 그러니까 0000 1010 0000 0000 0000 0000 + 00까지 항상 똑같다는 말이다.

그림으로 표현하면 위와 같이, 분홍색으로 칠한 부분이 생성한 Subnet에서 사용하는 IP 주소 영역이다. IP 주소의 26 bit가 모두 0000 1010 0000 0000 0000 0000 00으로 같은 것을 알 수 있다.


Internet Gateway 생성

이제 Public Subnet이 인터넷으로 연결되기 위한 Internet Gateway가 필요하다. 지금까지 해보았으면 알겠지만 Internet Gateway도 대시보드의 가상 프라이빗 클라우드 항목 아래에서 찾을 수 있다.

인터넷 게이트웨이 관리 페이지로 들어가서 우측 상단의 인터넷 게이트웨이 생성 버튼을 클릭하여 이름을 정해주면 인터넷 게이트웨이는 쉽게 생성된다.

생성이 되었으면 VPC와 연결해주어야 한다.

인터넷 게이트웨이를 생성한 직후 위 그림의 초록색 팝업 메세지에서도 VPC에 연결을 하라고 안내가 나오며, 작업 버튼을 클릭해서도 VPC 연결 항목을 골라서 VPC에 연결할 수 있다.

라우팅 테이블 작성

마지막으로 라우팅 테이블을 작성해주어야 한다. 라우팅 테이블을 수정하여 VPC 내의 데이터 패킷이 인터넷 게이트웨이로 향하는 경로를 만들어주어야 하는 것이다.

다시 서브넷 관리 콘솔로 들어와서 아까 생성한 서브넷을 클릭한 후 라우팅 테이블 항목을 클릭하면 라우팅 테이블 상태를 볼 수 있다. 지금은 10.0.0.0/24는 local로 향한다는 내용밖에 없다.

라우팅 테이블을 생성하려면 가상 프라이빗 클라우드 항목 아래의 라우팅 테이블을 클릭하여 라우팅 테이블 관리 페이지로 들어간다.

그 다음 라우팅 테이블 생성 버튼을 클릭하고 VPC 연결은 아까 만든 VPC에 연결하여 라우팅 테이블을 생성하면 된다.

라우팅 테이블을 생성한 뒤에 생성한 라우팅 테이블을 클릭하고 아래에서 라우팅 항목을 클릭하면 라우팅 테이블 정보가 표시된다. 이 때 오른쪽의 라우팅 편집 버튼을 눌러 라우팅 테이블을 수정한다.

좌측 하단의 라우팅 추가 버튼을 클릭하여 새 라우팅 정보를 입력한다. 대상 항목에는 0.0.0.0/0을 입력한다. (0.0.0.0/0은 외부 인터넷으로 향해야 하는 데이터 패킷을 의미) 그리고 그것들이 인터넷 게이트웨이를 거쳐야 외부 인터넷으로 향할 수 있기 때문에 두번째 대상 항목을 클릭하고 인터넷 게이트웨이 항목을 눌러 생성한 인터넷 게이트웨이를 선택해주고 변경사항을 저장해주면 된다.

마지막으로 '서브넷 연결 항목'을 클릭해 생성한 서브넷과 연결해주면 Public Subnet이 인터넷 게이트웨이를 통해 인터넷과 연결될 수 있는 VPC 환경이 만들어진다.

profile
나는 하림

0개의 댓글