본문 바로가기

IT 개발자의 창고

AWS - EC2 서버 접속 및 웹서버 실행

지난 글에서 public subnet에 리눅스 서버를 올리고, public IP를 할당했습니다.
2022.01.26 - [Working IT] - AWS - public subnet에 리눅스 서버 기동

이번 글에서는 외부에서 public EC2의 웹서비스에 접속하기 위한 일련의 작업들을 진행해 볼께요.
이를 위해 public-EC2 서버에 접속하여 웹서버를 설치하고 기동해야합니다.

public EC2 서버 접속

지난번에 public EC2에 접속하기 위해서는 사용자 인증 키가 필요하며, 이를 로컬 컴퓨터에 다운로드해서 보관해야 한다고 했습니다.

Linux Instance 접속 command
$> ssh -i {인스턴스 접근을 위한 인증 키페어} {user-id}@{server ip address}

인스턴스 접근을 위한 인증 키페어를 이용하여 EC2에 접속하는 명령어입니다.

이 때, 다음과 같은 오류가 발생하며, 접속이 불가한 경우가 발생할 수 있습니다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for './genesis.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "./genesis.pem": bad permissions
ec2-user@3.34.74.183: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

인증 키페어의 권한이 잘못되었다고 나오는 경우가 있는데요. 이 때 키페어의 권한은 0600 (소유자만 읽기/쓰기 권한 부여)로 설정해야 합니다. 보안에 다소 엄격하죠.

소유권 변경 command는 아래와 같아요.

$ chmod 0600 ./genesis.pem
$ ls -al genesis.pem
-rw-------@ 1 user staff 1704 12 28 09:01 genesis.pem

Web Server 설치

접속이 정상적으로 완료되면, 서버에 아래의 명령어로 웹서버를 설치해 보도록 할께요.

http deamon 설치 command
$> sudo yum install httpd -y


지금까지의 과정을 그대로 따라왔다면, 설치가 이루어지지 않을 것입니다. 원인은 네트워크 ACL의 인바운드 규칙 때문입니다. 인바운드 규칙으로 SSH, HTTP, HTTPS만 허용되어 있어서, outbound request에 대한 yum repository server의 response port가 허용된 포트가 아니면 외부 트래픽을 차단하기 때문입니다. (stateless의 네트워크 ACL의 특징 때문이죠)

public 네트워크 ACL의 인바운드 규칙을 모든 TCP를 허용하도록 변경합니다.

인바운드 규칙을 모든 TCP 허용으로 변경


다시 웹서버 설치를 시도하면 정상적으로 설치가 진행되는 것을 확인할 수 있습니다. 이제 웹서버를 기동해 볼께요

[ec2-user@ip-10-0-0-217 ~]$ sudo systemctl start httpd
[ec2-user@ip-10-0-0-217 ~]$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-12-30 07:57:57 UTC; 43s ago
Docs: man:httpd.service(8)
Main PID: 1624 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 4787)
Memory: 29.2M
CGroup: /system.slice/httpd.service
├─1624 /usr/sbin/httpd -DFOREGROUND
├─1625 /usr/sbin/httpd -DFOREGROUND
├─1626 /usr/sbin/httpd -DFOREGROUND
├─1627 /usr/sbin/httpd -DFOREGROUND
└─1628 /usr/sbin/httpd -DFOREGROUND

Dec 30 07:57:57 ip-10-0-0-217.ap-northeast-2.compute.internal systemd[1]: Starting The Apache HTTP Server...
Dec 30 07:57:57 ip-10-0-0-217.ap-northeast-2.compute.internal systemd[1]: Started The Apache HTTP Server.
Dec 30 07:57:57 ip-10-0-0-217.ap-northeast-2.compute.internal httpd[1624]: Server configured, listening on: port 80
[ec2-user@ip-10-0-0-217 ~]$


먼저 웹서버 접속을 확인하기 전에 public-EC2와 연결된 보안그룹에서 인바운드 규칙에 추가한 HTTP, HTTPS 프로토콜을 삭제하고, 웹페이지 접근을 (http://{public ip address}/ 시도해봅시다. 보안그룹 규칙에 의해 트래픽이 차단되어 접속이 되지 않음을 확인할 수 있습니다.

다시 HTTP와 HTTPS 프로토콜을 인바운드 규칙에 추가하고 테스트하면 정상적으로 아래와 같은 웹서버 화면이 뜨는 것을 확인할 수 있습니다.

정상적으로 Web Server 접근이 이루어진다면 초기화면이 표시됩니다.

동영상 실습