본문 바로가기

보안 이론/클라우드 보안

AWS - Amazon Linux로 WordPress 웹 서버 구축

반응형

AWS의 VPC와 EC2를 이용하여 퍼블릭한 워드 프레스 웹 서버를 구축해볼 것이다.


Amazon Linux

클라우드 및 엔터프라이즈 애플리케이션에 우수한 성능, 안정적이고 안전한 실행 환경을 제공하는 Red Hat 기반 OS이다.다른 AWS 서비스와의 간편한 통합에 도움이 되는 패키지가 포함되어 있으며 프로덕션 환경에서 사용되는 것과 동일한 Linux 배포에서 구축, 테스트 및 통합을 수행하여 애플리케이션 개발 속도를 높일 수 있다고 한다.

 

간단하게 AWS의 환경에 최적화된 OS 이미지라고 볼 수 있다.

 

Word Press

전 세계 웹사이트의 42% 이상을 차지하는 세계 최대 오픈 소스 CMS이다.

설치형 블로그로 네이버 블로그, 티스토리 등과 달리 직접 호스팅하거나 웹사이트 빌더를 이용하여 구축하여야 한다.

PHP로 작성되었으며 웹사이트를 완전히 커스터마이징 할 수 있는 자유도를 자랑한다.

전세계 수많은 사용자 및 개발자들이 제작한 다양한 기능의 플러그인과 테마가 존재한다.

 

실습 전 유의 사항

실습을 진행하기 전 이미 VPC가 구축이 되어있는 상태이어야 한다.

VPC를 구축하는 방법을 잘 모르거나 글과 같은 환경에서 진행하고자 한다면 다음 글을 참고하여 환경을 구성하자.

[보안 이론/클라우드 보안] - AWS - VPC(Virtual Private Cloud)

 

AWS - VPC(Virtual Private Cloud)

AWS VPC 기능을 이용해서 가상 네트워크를 구성하여 AWS의 다양한 요소들을 사용할 틀을 구현한다. VPC (Virtual Private Cloud) VPC를 통해 AWS 클라우드에서 논리적으로 격리된 공간을 프로비저닝하여 고

taesam.tistory.com


실습

우리는 EC2를 퍼블릭에 구성하여 접속하는 간단한 실습을 진행할 것이다.

클라이언트는 인터넷 게이트웨이를 통해 아마존 리눅스에 접근한다.

아마존 리눅스에서는 Apache2, Php, MariaDB로 구성된 워드프레스 웹 서비스를 구축한다. 

 

EC2 생성(Amazon Linux)

먼저 aws 콘솔에서 ec2를 검색해 ec2 서비스에 접속한다.

 

사이드바에 인스턴스를 클릭하고 인스턴스 시작을 클릭한다.

 

인스턴스 시작 페이지가 나오면 차근차근 하나씩 설정해준다.

인스턴스의 이름 설정

원하는 이름을 설정하면 된다. 실습에서는 Amazon Linux이므로 al로 지정하였다.

 

OS 이미지(AMI) 설정

EC2에서 사용할 OS를 선택한다. 이번 실습에서는 Amazon Linux를 사용하므로 선택한다.

그 외 설정값은 기본으로 두고 다음으로 넘어간다.

 

인스턴스 유형 설정

EC2의 성능에 대한 설정이다. 성능에 따라 가격이 다르다.

실습에서는 t2.micro를 사용하며 간단한 웹 서버이기 때문에 큰 사양을 필요로 하지 않는다.

 

키 페어 선택

인스턴스 생성 후 인스턴스에 연결하기 위한 공개키 기반 비밀키를 선택한다. 

EC2를 처음 생성할 시 생성해놓은 키 페어가 없을 것이므로 아래 사진과 같이 키 페어를 생성한다.

키 페어를 생성하면 호스트 PC에 다운로드되는데 이 key.pem 파일을 안전한 곳에 잘 보관한다.

 

네트워크 설정

우리가 만든 VPC를 선택하고 서브넷은 꼭 퍼블릭 서브넷을 선택해야 한다.

퍼블릭 IP 자동 할당을 활성화하여 생성 시 퍼블릭 IP로 접근한다.

 

보안 그룹 생성

보안 그룹이란 해당 인스턴스에 접근 가능한 규칙을 설정하여 접근을 제한하는 일종의 방화벽이다.

생성된 보안 그룹이 없으므로 아래와 같이 구성하여 생성한다.

웹 서버에서 사용할 보안 그룹이므로 HTTP, HTTPS 프로토콜 접근은 모든 소스에서 허용한다.

SSH는 인스턴스 내부의 접근하는 목적임으로 호스트 PC에서만 접근하도록 설정한다.

 

이 외의 값들은 기본값으로 두고 인스턴스를 생성한다.

 

인스턴스 접속

우선 만들어진 인스턴스에 접근해야 한다. 접근하기 위해서는 위에서 만든 SSH 키(키 페어)가 필요하다.

실습자는 Tae_key.pem 파일을 바탕화면(C:\Users\user\Desktop)에 두었다.

 

만들어진 인스턴스를 체크하고 연결 버튼을 클릭한다.

 

다음과 같은 페이지에서 ssh 명령어를 복사하여 cmd창에 입력한다.

이때 cmd는 키 페어가 있는 위치에서 실행해야 한다.

 

CMD창에서 실행이 성공하면 다음과 같이 해당 인스턴스의 쉘이 실행된다.

 

웹 서버 설치 및 설정

이제부터는 아마존 리눅스에 웹 서버를 구성 모듈을 설치한다.

# yum 업데이트 진행
sudo yum update -y

# 마리아DB, PHP 설치
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

# 아파치 웹서버, 마리아db 서버 설치
sudo yum install httpd mariadb-server php-gd

 

아마존 리눅스는 우분투와 다르게 설치하자마자 자동 실행이 되지 않으므로 아래 명령어로 직접 실행을 해야 한다. 

# 아파치 실행
sudo systemctl start httpd

 

MariaDB에 워드프레스에서 사용할 데이터베이스와 유저를 생성한다.

# 마리아DB 실행
sudo systemctl start mariadb 

# (옵션)데이터베이스 보안설정 하기
sudo mysql_secure_installation 

# 루트로 DB 접속
sudo mysql -u root -p

# 워드프레스에서 사용할 계정, DB 생성 후 권한 설정
create database wp_board;
create user wpuser@localhost identified by 'wpuser';
grant all privileges on wp_board.* to wpuser@localhost;
FLUSH PRIVILEGES;

# 마리아DB 종료
exit

 

워드 프레스를 사용하기 위해 wget 명령어로 워드프레스를 다운로드하여 설치한다.

# 워드프레스 최신버전 설치
wget https://wordpress.org/latest.tar.gz

# 현재 위치에 압축 풀기
tar -xvzf latest.tar.gz

# 압축 푼 폴더를 웹 디렉토리로 이동
sudo mv wordpress/* /var/www/html
cd /var/www/html

# 워드 프레스 설정값 입력
sudo cp wp-config-sample.php wp-config.php
sudo vi wp-config.php

wp-config.php 파일에서 수정해야 할 부분은 두 부분이다.

위에 DB 설정 부분은 다음과 같이 설정한다. ( 위에서 필자와 다르게 설정했다면 각자 설정값에 맞게 설정한다. )

define( 'DB_NAME', 'wp_board' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'wpuser' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8' );
define( 'DB_COLLATE', '' );

 

아래의 KEY, SALT를 입력하는 부분은 다음 사이트에서 난수 값을 받아 그대로 적용한다.

워드프레스 사이트에서 제공하는 salt값 생성 사이트이다.

https://api.wordpress.org/secret-key/1.1/salt/

 

설정이 끝나면 저장 후 다음 단계를 진행한다.

sudo vi /etc/httpd/conf/httpd.conf

# vi 안에서 문구 찾기
?<Directory "/var/www/html

httpd.conf 파일에서 <Directory "/var/www/html"> 부분을 찾는다.

아래의 AllowOverride가 None으로 되어있는데 All로 바꾼 후 저장한다.

 

웹 서버 루트 디렉토리의 권한을 수정한다. 이 과정은 WordPress의 사용을 원활하게 하기 위한 설정이다.

# 아파치 그룹(-G apache)에 ec2-user를 추가(-a : add)함
sudo usermod -a -G apache ec2-user

# 웹서버 루트 디렉토리(/var/www)의 소유권을 apache그룹의 ec2-user로 변경함
sudo chown -R ec2-user:apache /var/www

# 웹 루트 디렉토리의 권한을 2775로 설정
sudo  chmod 2775  /var/www

# 웹 루트 디렉토리의 하위 디렉토리의 권한을 2775로 설정
sudo  find  /var/www  -type d -exec chmod  2775 {} \;

# 웹 루트 디렉토리의 하위 파일의 권한을 0664로 설정
sudo  find  /var/www  -type f -exec chmod  0664 {} \;

sudo systemctl restart httpd

 

시스템이 부팅될 때 자동으로 구성 모듈이 실행되도록 설정한다.

sudo systemctl enable httpd && sudo systemctl enable maridb

이제 내부에서 설정할 것은 마무리되었으니 직접 접속해보자

 

퍼블릭 아이피 접속

생성한 EC2의 상세정보를 보면 퍼블릭 IP가 명시되어있다.

해당 주소로 접근하면 다음과 같은 페이지가 나온다.

여기서부터는 사용자가 원하는 정보를 입력한 후 넘어간다.

이후 로그인 페이지에서 로그인을 진행하게 되면 성공적으로 워드프레스 환경을 사용할 수 있다.

이 글에서는 워드프레스를 어떻게 사용하는지에 대해서는 설명하지 않는다.

 

인스턴스 재시작 시 접속이 안 되는 문제

AWS EC2를 중지하고재실행했을 시 퍼블릭 IP가 변경된다. 그로 인해 워드프레스가 제대로 접속되지 않을 수 있다.

이 경우 다음 과정을 통해 해결할 수 있다.

 

먼저 EC2에 SSH를 통하여 접속한 뒤 마리아 DB까지 접속한다.

# EC2 SSH 접속
ssh -i "[your key.pem]" [your ec2 public ip]

# mariadb 접속
sudo mysql -u root -p

# db 접속 안될 경우 mariadb 실행
sudo systemctl start mariadb

# db 내부 url 수정 ( db명을 wp_board와 다르게 설정 시 사용자 값 )
use wp_board;
select * from wp_options where option_id<3;
update wp_options set option_value='[현재 EC2 IP]' where option_id<3;
select * from wp_options where option_id<3;

exit

아마 데이터베이스에서 확인 시 이전 ip로 설정되어 있을 것이다. 이 부분을 현재 ip로 수정하면 정상적으로 동작한다.

 

이러한 문제에서 벗어나려면 AWS의 EIP라는 기능을 이용해 고정 IP를 할당받으면 된다.


 

우리는 AWS의 EC2를 이용하여 Amazon Linux OS 인스턴스를 생성하고 LAMP 서버를 구축하며 워드프레스를 동작시켰다.

 

참고 사이트

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/hosting-wordpress.html

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

반응형

'보안 이론 > 클라우드 보안' 카테고리의 다른 글

AWS - Load Balancing(ALB, NLB)  (0) 2022.10.26
AWS - RDS 활용 3-Tier 구축  (0) 2022.10.19
AWS - VPC(Virtual Private Cloud)  (0) 2022.10.17
AWS - S3(Simple Storage Service)  (0) 2022.10.15
클라우드 컴퓨팅이란  (0) 2022.10.03


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