IT/AWS

AWS VPC 생성 후 EC2 생성하기

twofootdog 2020. 1. 30. 21:16

이번 글에서는 AWS의 VPC를 생성한 후 EC2를 해당 VPC안에서 생성해볼 것이다. 작업 순서는 다음과 같다.

  1. VPC 및 서브넷 생성
  2. EC2 생성

 

1. VPC, 서브넷, EC2란?

해당 포스트를 참고하길 바란다(https://twofootdog.tistory.com/19)

 

 

2. VPC 및 서브넷 생성

우선 EC2와 RDS를 생성하려면 VPC와 서브넷이 필요하다. 사실 임의로 만들어주지 않아도 각 계정별로 default로 VPC와 서브넷이 할당되기 때문에 VPC와 서브넷 생성 없이 EC2 인스턴스 생성이 가능하다. 하지만 AWS에 대한 이해를 하는 차원에서 VPC와 서브넷도 만들어보고, 만든 VPC와 서브넷에 EC2인스턴스를 생성해 보도록 하자.

2-1. VPC 생성

VPC는 프라이빗 클라우드를 만드는데 가장 기본이 되는 리소스이며 논리적인 독립 네트워크를 구성하는 리소스다. 클라우드에서 생성되는 리소스들은 특정 네트워크 위에서 생성되며, 이에 접근하기 위한 프라이빗 IP를 가지며, 이 프라이빗IP는 VPC CIDR 범위 안에 있는 IP로 할당된다. 

AWS 홈페이지로 가서 VPC로 들어간다. VPC에서 VPC생성 버튼을 클릭한다.

 

이름태그를 입력하고, IPv4 CIDR 블록을 입력한다. 공인망 대역과 겹치게 되면 나중에 외부 통신이 불가능한 경우가 생길 수 있으니 사설망 대역으로 작성하자. 사설망 대역은 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 이다(사설망 대역보다 작은 값은 등록 가능하다. 예를 들면 192.168.0.0/24로도 등록 가능하며, 192.168.1.0/24로도 등록 가능하다).

 

생성이 완료되면 리스트에서 확인 가능하다. 그런데 아래 그림을 보면 DNS확인(DNS 호스트네임을 IP로 해석할 때 AWS에서 제공하는 DNS 서버를 사용하는 기능)은 활성화 되어있는데, DNS 호스트 이름(VPC내부에서 생성되는 인스턴스에 퍼블릭 DNS 호스트네임을 할당해주는 기능)이 비활성화 된 것을 확인할 수 있다. 해당 값도 작업->DNS 호스트 이름 편집에서 활성화 시켜준다.

 

VPC가 생성이 완료되면 라우팅 테이블도 자동으로 생성된다. 해당 라우팅 테이블은 VPC에 연결되어 있으며, VPC 내에 서브넷이 생성되면 해당 서브넷과도 자동으로 연결된다. 라우트 테이블에 Default로 등록된 값은 VPC의 CIDR로, 해당 대역의 IP가 유입되게 되면 VPC 내에서 리소스를 검색하게 된다.

 

라우팅 테이블과 마찬가지로 DHCP 옵션세트도 자동으로 생성된다. DHCP 옵션 셋은 도메인 네임 서버, 도메인 네임, NTP 서버, NetBIOS 서버 등의 정보를 가지고 있으며, 보통은 기본값을 사용한다.

 

또한 VPC의 보안을 담당하는 네트워크 ACL과 보안그룹(Security group)도 생성된다. 

우선 네트워크 ACL은 서브넷 앞단에서 방화벽 역할을 하는 리소스다. VPC와 함께 생성되는 ACL은 인바운드 규칙과 아웃바운드 규칙이 각각 2개의 규칙을 가지고 있다. 규칙 번호가 높을수록 우선순위가 높은 규칙이며 *규칙은 어떤 규칙도 등록되지 않았을 경우 사용되는 규칙이다. 아래 규칙에서 보면 100 규칙이 존재하기 때문에 *규칙은 무시되며, 100규칙은 모든 트래픽을 허용하는 규칙이다.

 

다음으로 보안그룹(Security Group)은 인스턴스 앞에서 방화벽 역할을 한다. ACL이 서브넷의 트래픽을 제어한다면, 보안그룹은 인스턴스의 트래픽을 제어한다. 기본적으로 보안그룹의 아웃바운드 규칙에는 모든 트래픽이 허용되어 있고, 인바운드 규칙에는 해당 보안그룹과 동일한 보안그룹ID를 가진 리소스의 트래픽만 허용되어 있다. 때문에 VPC내의 리소스들을 동일한 보안그룹에 등록하게 되면 추가적인 인바운드 등록 없이 트래픽 허용이 가능하다.

 

 

2-2. 서브넷 생성

VPC 생성이 완료되었으니 이제 서브넷을 생성해보자. 사실 VPC만으로는 아무것도 할 수 없다. VPC내에서 서브넷을 생성한 후 가용존과 연결을 해야 해당 서브넷에서 EC2 Instance를 생성할 수 있다. 

 

서브넷 생성 버튼을 클릭한다.

 

이름 태그와 VPC(조금 전에 생성한 VPC 선택)을 입력하고 가용영역을 선택한다. IPv4 CIDR은 VPC CIDR 범위에 포함되는 블록값을 입력한다. 

 

이런식으로 가용영역 별로 서브넷을 생성하면 아래와 같이 목록을 확인할 수 있다. 서브넷을 여러개 만든 이유는 EC2 인스턴스를 각각 별도의 서브넷(가용존)에 띄워서 하나의 가용존에서 장애가 발생해도 다른 가용존에 있는 EC2 인스턴스가 정상 동작하도록 하게 위함이다.

 

 

3. EC2 인스턴스 생성

이제 생성한 서브넷 위에 EC2 인스턴스를 생성해보자. 

 

3-1. EC2 인스턴스 생성

리소스에서 EC2를 검색한 후 인스턴스 시작 버튼을 클릭한다.

 

Amazon Linux 2 AMI (HVM), SSD Volume Type을 선택한다. 

 

t2.micro(프리티어가 가능한 인스턴스)를 선택하고 인스턴스 세부 정보 구성을 누른다.

 

네트워크서브넷에 조금 전 생성한 VPC와 서브넷을 선택한다. 퍼블릭IP자동할당활성화를 선택한다(그래야 EC2 인스턴스를 만들었을 때 퍼블릭IP를 자동으로 할당받는다)

 

 

 

4. 스토리지 추가5. 태그추가는 기본으로 가고 6. 보안그룹구성은 SSH포트만 허용했으며 허용 조건은 현재 내 로컬PC의 IP만 등록했다(보안그룹구성은 기본적으로 SSH 포트로 유입되는 모든 트래픽을 허용되도록 등록되어 있다).

 

다음으로 EC2 인스턴스에 접속하기 위한 키페어 선택 페이지가 나오는데, 필자는 이미 키페어를 발급받았기 때문에 기존 키페어 선택을 했다. 키페어를 처음 발급받는다면 신규 키페어 생성을 선택한다.

 

그러면 EC2 인스턴스가 실행되는 것을 확인할 수 있다. 처음에 실행중일 때는 pending 상태로 있다가 실행이 완료되면 running 상태로 변경된다. 우측 하단을 보면 IPv4 퍼블릭IP가 할당된 것을 확인할 수 있는데, 탄력적IP(Elastic IP)를 할당 받아서 해당 EC2 인스턴스에 할당시켜주지 않으면, 해당 EC2 인스턴스는 중지 후 재시작을 할 때마다 IP가 바뀌게 된다.

 

3-2. EC2 인스턴스 접속 테스트

EC2 인스턴스가 생성되었으니 이제 SSH를 활용해서 해당 EC2에 접속해보도록 하자.

EC2 인스턴스 접속하기 위한 SSH 프로그램은 MobaXterm(https://mobaxterm.mobatek.net/)를 사용할 것이다.

MobaXterm free버전을 다운로드 받고 실행 후 Session을 선택한다.

 

SSH를 선택하고 Remote host에는 EC2 인스턴스의 퍼블릭IP를, Specify username에는 EC2 인스턴스 최초 생성시 발급되는 ID인 ec2-user를 입력한다. Use Private Key를 선택한 후 로컬PC에 저장한 키 페어선택한다.

 

하지만 접속이 되지 않는다. 왜그럴까...그것은 VPC에 인터넷 게이트웨이를 만들어주지 않았기 때문이다. 외부에서 EC2인스턴스에 접속하기 위해서는 인터넷 엑세스가 활성화 되어야 한다. VPC 서브넷의 인스턴스에 대한 인터넷 엑세스가 활성화하려면 아래 조건을 만족해야 한다.

  • VPC에 인터넷 게이트웨이를 연결한다.
  • 서브넷의 라우팅테이블이 인터넷 게이트웨이를 가르킨다.
  • 서브넷의 인스턴스에 전역적으로 고유한 IP주소(퍼블릭 IPv4주소, 탄력적 IP주소, IPv6주소)가 존재한다.
  • 네트워크 엑세스 제어 및 보안 그룹 규칙에서 적절한 트래픽이 인스턴스로,  그리고 인스턴스에서 흐르도록 허용되는지를 확인한다.

세번째 네번째 조건은 충족되었지만 첫번째 두번째 조건이 충족되지 않았다. 인터넷 게이트웨이를 만들고 VPC에 연결해보자.

 

 

4. 인터넷 게이트웨이 생성 및 연결

VPC선택 후 인터넷 게이트웨이를 선택한후 생성 버튼을 누른다.

 

다음으로 작업->VPC연결을 선택하여 생성한 인터넷 게이트웨이와 VPC를 연결한다. VPC는 방금 전 만드 VPC를 선택한다.

 

그러면 인터넷 게이트웨이 상태가 attached가 되면서 연결이 된다. 다음으로 서브넷의 라우팅 테이블이 인터넷 게이트웨이를 가르키도록 설정해보자. VPC->라우팅테이블로 가서 VPC를 만들때 생성된 라우팅 테이블을 선택한 후 라우팅 편집을 선택한다. 

 

대상은 0.0.0.0/0을 선택하고 대상은 방금 전 만든 인터넷 게이트웨이 ID값을 입력한다. 라우트 규칙은 위에서부터 차례대로 적용된다. 첫 번째 규칙은 VPC CIDR 범위의 접근에 대해서 VPC 내부로 라우트하는 규칙이다. 두 번째 규칙은 그 이외의 모든 IP 접근(0.0.0.0/0은 모든 IP를 의미합니다)에 대해서 인터넷 게이트웨이로 라우트하는 규칙이다.

 

설정 완료 후 MobaXTerm을 다시 접속해서 SSH 정보를 다시 입력 후 접속해보면 정상적으로 접속되는 것을 확인할 수 있다.

 

 

참고

https://www.44bits.io/ko/post/understanding_aws_vpc

 

만들면서 배우는 아마존 VPC(Amazon VPC) 입문: AWS 네트워크의 기초

아마존 버추얼 프라이빗 클라우드(Amazon VPC)는 아마존 웹 서비스(Amazon Web Service)의 가장 기본이 되는 네트워크 서비스이자 리소스입니다. AWS에서 제공하는 대부분의 리소스들은 아마존 VPC를 기반으로 실행됩니다. 따라서 VPC를 이해하고 있어야 AWS 서비스를 십분 활용할 수 있습니다. 이 글에서는 기본 VPC와 같은 구성을 직접 만들어보면서 VPC의 기본 개념과 리소스들을 소개합니다.

www.44bits.io