본문 바로가기

보안 이론/클라우드 보안

AWS - VPC, EC2를 이용하여 웹서버 구축하기 (Gnuboard5)

반응형

AWS의 VPC과 EC2를 이용하여 가상 네트워크를 구성하고 서버를 올려 접속 가능한 웹서버를 구축해보는 실습을 진행한다.

웹서버는 LAMP ( Linux Apache2, MySQL, PHP ) 구조를 이용한다.


VPC(Virtual Private Cloud)

VPC를 통해 AWS 클라우드에서 논리적으로 격리된 공간을 프로비저닝하여 고객이 정의하는 가상 네트워크에서 AWS 리소스를 시작할 수 있다. 

사용자 정의를 통해 IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경을 완벽하게 제어할 수 있다.

 

아래 그림처럼 VPC를 쓰지 않았을 때 복잡하게 구성된 네트워크를 VPC를 이용해 독립된 네트워크로 구성하면 복잡도를 낮출 수 있다.

 

EC2 ( Elastic Compute Cloud )

EC2는 워크로드의 요구 사항에 가장 잘 부합할 수 있도록 가장 포괄적이고 심층적인 컴퓨팅 플랫폼을 제공한다.

간단한 웹 서비스 인터페이스를 통해 간편하게 필요한 컴퓨팅 리소스를 할당 받을 수 있고 사용량에 따라 금액을 지불한다.

 

실습에서는 EC2를 이용한 Ubuntu 인스턴스를 생성하여 웹 서버를 설치하고 실제 접속 밑 구동을 해볼 것이다.

 

Gnuboard5

그누보드는 공유정신을 나타내는 "GNU" 와 게시판을 나타내는 "Board" 가 합쳐진 말입니다.

웹 게시판, 회원 정보 등을 편리하게 구축할 수 있도록 만들어진 오픈 소스로 실습에서 간단하게 사용해볼 것이다.

 


실습

우리는 다음과 같은 간단한 네트워크를 구성할 것이다.

VPC를 생성한 뒤 하나의 Public Subnet을 두고 게이트웨이를 생성하고 라우터테이블을 이용해 인터넷과 연결한다.

VPC 생성

먼저 AWS에 접속하여 vpc를 검색해 VPC 서비스로 접속한다.

 

메인 화면에서 VPC 생성을 눌러 VPC 생성 화면으로 넘어간다.

 

VPC 생성 창이 나오면 하나씩 차례대로 설정해준다. 

(1) 생성할 리소스를 선택

"VPC만"은 VPC 만을 생성하고 "VPC 등" 서브넷 등 여러가지 네트워크구성을 한번에 생성할 수 있다.

실습에서는 VPC, 서브넷, 게이트웨이 등을 하나씩 직접 생성하기 위해 "VPC만"을 체크한다.

 

(2) VPC 이름 설정

아무 이름이나 지어도 상관없으나 사용자가 이해하기 쉽도록 "-vpc"을 붙여서 지어준다.

 

(3) IPv4 CIDR 블록 설정

실습에서는 원하는 내부 아이피를 지정하기위해 수동 입력을 설정하였으며 사설 IP 주소를 입력해준다.

IPv4 사설 IP 대역
10.0.0.0 ~ 10.255.255.255(10.0.0.0/8)
172.16.0.0 ~ 172.31.255.255(172.16.0.0/12)
192.168.0.0 ~ 192.168.255.255(192.168.0.0/16)

실습에서는 10.11.0.0/16 으로 입력하였다.

 

모든 설정이 완료되면 VPC 생성 버튼을 눌러 생성을 완료한다.

 

서브넷 생성

왼쪽의 사이드 바를 이용해 서브넷을 선택하고 서브넷 생성을 누른다.

서브넷 생성의 내용을 보고 차근차근 입력을 진행한다.

(1) VPC ID 선택

방금 생성한 vpc를 찾아 선택해준다.

 

(2) 서브넷 이름 설정

서브넷은 네트워크를 구성할 때 여러 개가 쓰일 수 있음으로 번호로 구분하는 것이 좋다.

원하는 이름을 입력한다.

 

(3) 가용 영역(Zone) 선택

가용영역이란 Region 별로 존재하는 여러 개의 가상 데이터 센터이다. 

어떤 것을 선택하든 크게 중요하지 않다.

 

(4) IPv4 CIDR 블록 설정

서브넷의 IP 대역을 지정한다. 네트워크를 10.11.0.0/16 으로 지정하였기 때문에 네트워크보단 더 작은 단위로 지정해야한다.

또한 같은 네트워크가 아니면 서브넷으로 사용될 수 없으므로 정확히 입력한다.

실습에서는 10.11.1.0/24 를 입력하였다.

 

입력이 끝나면 서브넷 생성 버튼을 눌러 서브넷을 만든다.

 

생성한 서브넷은 기본적으로 private로 설정되어 접근할 수 없으므로 다음과 같이 설정에서 퍼블릭 활성화를 진행한다.

퍼블릭 IPv4 주소 자동 할당 활성화 체크 후 저장

 

인터넷 게이트웨이 생성

사이드바에서 인터넷 게이트웨이를 선택하여 게이트웨이 생성을 진행한다.

게이트 웨이 생성 시에는 이름 외에 별다른 설정이 없으므로 입력 후 인터넷 게이트웨이 생성 버튼을 누른다.

 

그 다음 생성한 게이트웨이의 상세정보에 들어와 VPC에 연결한다. 

VPC 입력창을 클릭해 알맞은 VPC를 찾아 골라준다.

 

라우팅 테이블 설정

사이드바에서 라우팅 테이블을 선택한다.

라우팅 테이블은 vpc 생성시 자동으로 생성된다.

생성된 테이블 중 VPC 이름을 확인하고 라우팅 테이블 ID를 눌러 상세 페이지로 들어간다.

 

상세 페이지에서 먼저 라우팅 편집을 눌러 라우팅 테이블을 수정한다.

(1) 라우팅 추가

라우팅 추가 버튼을 통해 테이블의 행이 추가된다. 

 

(2) 대상 IP 입력

라우팅 대상이 될 IP를 입력한다. 0.0.0.0/0 을 입력하여 불특정 네트워크(인터넷)의 접속을 추가한다.

 

(3) 대상 리소스 입력

라우팅할 대상을 선택한다. 방금 생성한 인터넷 게이트웨이를 입력하여준다.

 

입력 후에는 변경 사항 저장을 눌러 저장한다.

 

다음은 라우팅 테이블 상세 정보에서 서브넷 연결 편집을 눌러 편집에 들어간다.

우리가 만든 서브넷은 생성은 되었으나 연결이 설정되지 않았기 때문에 명시적 서브넷 연결 설정에 추가하여 연결해준다.

 

EC2 인스턴스  생성

aws 서비스 검색창에 EC2를 검색하여 인스턴스를 생성하여 준다.

메인 화면에서 생성할 수도 있고 사이드바의 인스턴스 탭에서도 생성할 수 있다.

 

EC2 인스턴스를 메뉴에 맞게 차근차근 생성한다.

(1) 인스턴스 이름 설정

EC2 인스턴스는 하나의 컴퓨터라고 볼 수 있다.

우리는 웹 서버를 운용하기 위한 인스턴스를 생성하기 때문에 webserver를 붙여서 이름을 설정해 준다.

 

(2) 운영체제 설정

다양한 운영체제를 선택할 수 있다. 실습에서는 우분투를 이용하였다.

 

인스턴스 유형은 어떤 컴퓨팅 자원을 빌릴지 결정한다. 선택 사항에 따라 컴퓨팅 성능과 요금이 다르다.

실습에서는 기본 설정된 t2.micro를 이용하였다.

 

새 키 페어 생성

공개키를 생성하여 가상 인스턴스에 접근하는데 사용한다. 

생성을 완료하면 개인키(private key)가 사용자 컴퓨터에 저장된다. 

뒤에서 SSH를 이용해 인스턴스에 접근할 때 개인키가 필요하므로 안전한 위치에 보관하도록 한다.

 

네트워크 설정은 이미지와 실제 상황이 다를 수 있다. 오른쪽 위에 편집 버튼을 누르면 아래와 같아진다.

(1),(2)  VPC/서브넷 선택

위에서 생성한 vpc, 서브넷을 선택한다. 인스턴스가 우리가 만든 네트워크 내부에 위치하는 것이다.

 

(3) 퍼블릭 IP 자동 할당

외부에서 접속 가능한 IP를 할당하여 준다. 활성화를 선택한다

 

(4).(5) 방화벽(보안 그룹) 생성

방화벽 규칙을 지정한다. 보안 그룹을 한 번 생성하면 여러 곳에서 같은 규칙을 이용할 수 있다.

웹 서버에서 사용할 규칙을 위해 HTTP, HTTPS는 위치무관 SSH는 내 IP에서만 접근할 수 있도록 설정한다.

 

스토리지 구성

인스턴스에서 사용할 스토리지를 선택한다. 

아래 3개(마그네틱, 처리량 최적화, 콜드)는 속도가 느려 백업 데이터를 저장하기 용이하다

프로비저닝된 2개(io 1, io 2)는 빠르고 좋은데 가격이 비싸다.

우리는 기본 선택된 범용 SSD(gp2)를 이용한다.

 

모든 설정을 완료하면 인스턴스 시작을 눌러 인스턴스를 생성한다.

인스턴스가 정상적으로 생성되었다.  ( 인스턴스 상태가 대기중일경우 시간이 지나면 자동으로 실행중으로 바뀐다.)

 

SSH 연결을 위한 키 설정

인스턴스 생성 할 때 키 페어를 생성하였으며 그 때 .pem 파일을 사용자 컴퓨터에 다운로드 받았었다.

해당 키를 이용하여 SSH로 원격 접속하기 위해서는 사전 작업이 필요하다.

개인키를 이용해서 SSH 통신을 하려면 키의 권한이 400(r--------)이어야 한다.
그렇지 않으면 키의 권한이 너무 열려있다는 오류 발생한다.

리눅스였으면 chmod 400 [키파일.pem] 이면 끝났지만 윈도우에서는 조금 복잡할 수 있다.

key.pem 파일에 속성 - 보안 - 고급 으로 들어가 상속 사용안함을 선택하고 권한을 모두 제거한다.

 

이제 관리자만 접근을 허용하기 위해 추가 - 보안 주체 선택 을 눌러 현재 자신의 윈도우 계정 이름을 입력하고 이름 확인 버튼을 누른 뒤 확인한다.

 

그 후 권한을 읽기만 허용한 뒤에 확인을 눌러 저장해준다.

이렇게 하면 SSH 접속을 위한 키 준비이 났다.

 

인스턴스 원격 연결

인스턴스 대시보드에서 생성한 인스턴스를 선택한 후 연결버튼을 누른다.

 

SSH 클라이언트 탭을 클릭후 아래에 예: 부분명령어를 복사한다.

 

이제 CMD를 이용하여 인스턴스에 원격 접속을 할 것이다.

cd [키.pem 이 있는 위치]
ssh -i [키.pem] [인스턴스@IP]

키가 있는 위치로 이동 후 복사해둔 명령어를 이용하여 접속한다.

다음과 같이 입력 주체가 인스턴스로 변하면 접속에 성공한 것이다.

 

인스턴스에 웹 서버(LAMP+Gnuboard) 설치

접속한 인스턴스는 우분투 초기상태나 마찬가지이다.

필요한 모듈을 설치하여 웹 서버를 구성하고 직접 접속해본다.

 

필요 모듈 설치

sudo apt update

sudo apt install apache2 mysql-server
sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl 
sudo apt install git

먼저 apt 업데이트를 진행하고 아파치, mysql, php, git을 설치한다.

 

MySQL DB, user 생성

sudo mysql -u root -p
create database [ db 이름 ];
show databases;

mysql에 접속하여 웹서버에서 사용할 데이터 베이스를 만들어준다.

show databases를 이용하여 잘 생성되었는지 확인해 볼 수 있다.

잘 생성 되었다면 유저를 생성하여 해당 데이터베이스에 접근 권한을 부여한다.

db.* 은 해당 db의 모든 컬럼을 말한다.

create user [이름]@localhost identified by '[비밀번호]';
grant all privileges on [ db 이름 ].* to [이름]@localhost;

다음과 같은 결과가 나오면 정상적으로 처리된 것이다.

 

Gnuboard 설치

이제 깃을 이용해 그누보드 웹 파일을 다운로드 받는다.

cd /var/www/html
sudo git clone https://github.com/gnuboard/gnuboard5

설치가 완료되면 Gnuboard 폴더 내부에 데이터를 저장할 폴더를 생성하여 권한을 설정한다.

누구나 읽고 쓸 수 있어야 사용자 데이터가 저장될 수 있다.

cd /gnuboard5
sudo mkdir data
chmod 707 data

 

마지막으로 웹 브라우저에서 웹 서버에 접근해 설정을 진행하여야 한다.

인스턴스의 퍼블릭 주소를 확인하여 우리가 생성한 웹 서버에 접근해보자.

인스턴스의 상세정보를 확인하면 퍼블릭 주소를 알 수 있다.

 

[     IP     ]/gnuboard5 에 접속하면 다음과 같은 페이지가 나온다.

그누보드5 설치하기를 눌러 설정을 진행해준다.

MySQL 정보입력

위에 mysql에서 설정했던 user, db를 넣어주면 된다. 기본 입력된 사항은 건들이지 않아도 된다.

 

최고관리자 정보입력

mysql과 관련은 없고 게시판의 최고관리자 계정을 만드는 것임으로 원하는 값을 입력해서 만들면 된다.

 

설정 완료시 다음버튼을 누르고 다시 접속한다.

페이지가 정상적으로 실행되는 것을 확인할 수 있다.

 

우리는 AWS의 VPC를 이용가상 네트워크를 구성하고 그 안에 EC2를 이용한 운영체제에 웹 서버를 구축하여 2-Tier 클라우드 웹 서버를 구현하였다.

 

반응형


Calendar
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Visits
Today
Yesterday