공부하는 블로그

AWS | 토이프로젝트 운영서버 구축기 (2) - Public subnet EC2 인스턴스 생성 본문

AWS

AWS | 토이프로젝트 운영서버 구축기 (2) - Public subnet EC2 인스턴스 생성

치킨닮은닭 2022. 12. 28. 13:39

* 토이 프로젝트를 진행하면서 AWS를 이용하여 Spring 기반의 운영 서버를 구축한 내용을 정리했습니다.

 

 이번 포스팅에서는 AWS EC2 인스턴스를 생성하고, 보안그룹을 설정하여 로컬 PC에서 ssh를 통해 터미널에 접근하는 방법에 대해 알아보겠습니다. 이전 포스팅의 인프라 구조 중, Public subnet 내의 Bastion server에 해당하는 부분을 만들어봅시다.

 

* 이전 포스팅 >>  2022.12.25 - [AWS] - [AWS] 토이프로젝트 운영서버 구축기 (1) - 인프라 모델링

 

[AWS] 토이프로젝트 운영서버 구축기 (1) - 인프라 모델링

* 토이 프로젝트를 진행하면서 AWS를 이용하여 Spring 기반의 운영 서버를 구축한 내용을 정리했습니다. 토이 프로젝트를 하면서 실제로 앱 배포를 해볼 수 있는 기회가 생겼습니다! 제가 합류했을

gongbu-ing.tistory.com

0. EC2?

 Elastic Compute Cloud의 약자로, 사용자가 가상 서버(컴퓨터)를 임대 받아 그 위에 자신만의 애플리케이션을 실행할 수 있도록 해주는 서비스입니다. 필요에 따라 원하는 사양으로 인스턴스를 생성하여 사용이 가능하며, 실행 중인 서버에 대해 시간당 지불하므로 "Elastic (탄력적인)" 이라는 용어를 사용합니다.

1. Bastion 서버용 Public EC2 생성

 AWS 콘솔에서 "EC2 서비스 > 인스턴스 > 인스턴스 시작" 메뉴를 선택하여 EC2 인스턴스를 생성할 수 있습니다.

 

 

 인스턴스 이름과 원하는 OS 이미지, 인스턴스 유형을 선택합니다. 인스턴스 유형은 CPU와 메모리 사양에 따라 다양하게 있는데, 프리티어에서 사용이 가능한 t2.micro 인스턴스를 선택하였습니다.

 

 

 다음으로는 안전하게 인스턴스로 접근할 수 있는 Key pair를 생성합니다. "키 페어 없이 계속 진행" 옵션을 선택하여 키 페어 사용을 안할 수도 있지만 보안상 권장되지 않습니다. 키 페어 이름, 유형, 파일 형식을 선택하여 인스턴스에 SSH 접속 시 사용할 키 페어를 생성해줍니다. 키 페어 생성 버튼을 누르면 자동으로 생성된 키 페어 다운로드가 진행됩니다. 

 

 

 네트워크 설정에서는 VPC와 서브넷, 퍼블릭 IP 사용 여부, 보안그룹에 대한 설정을 진행합니다. VPC는 계정 생성 시에 사용하는 지역별로 기본 생성됩니다. Bastion 서버는 외부(내 로컬 PC)에서 접속이 가능해야 하므로 public subnet으로 선택해주어야 하며, 접속을 하려면 주소를 알아야 하기 때문에 퍼블릭 IP 자동 할당 옵션을 활성화 시킵니다. 방화벽 역할에 해당하는 보안 그룹은 우선 기존 보안 그룹 중 default를 선택하여 줍니다. default는 외부로부터의 모든 접근을 허용하므로 이 후에 다시 설정할 예정입니다. 

 

 이후 스토리지 구성은 기본 설정되어 있는 값으로 두고 생성하였습니다!

 

인스턴스 요약

 인스턴스 요약에서 외부에서 접근 시 사용할 Public IP 주소와 같은 VPC 내의 인스턴스에서 접근 시 사용되는 Private IP 주소를 확인할 수 있습니다.

2. Security Group 설정

 EC2 생성 시 기본값으로 두고 넘어간 보안 그룹을 다시 설정합니다. 보안 그룹은 크게 인바운드 규칙과 아웃바운드 규칙으로 나뉩니다.

 

- 인바운드 : 외부에서 EC2 내부로의 접근 (ex. 나의 로컬 PC에서 SSH를 통해 EC2 내부 터미널로의 접근)

- 아웃바운드 : EC2 내부에서 외부로의 접근 (ex. EC2 내부에서 HTTP를 통해 외부 인터넷 환경에 접근)

 

 보안 그룹을 연결할 EC2 인스턴스의 용도에 맞게 접근을 허용할 프로토콜, port, IP 주소를 설정합니다. 보안 그룹에 대한 설정은 "EC2 서비스 > 네트워크 및 보안 > 보안 그룹 > 보안 그룹 생성" 메뉴에서 진행이 가능합니다.

 

 베스천 서버의 용도는 퍼블릭 영역에 위치시켜 개발자가 베스천 서버를 통해 프라이빗 영역에 있는 WAS에 접근하기 위한 프록시 서버입니다. 즉, 내 로컬 IP에서 베스천 EC2 내부로의 ssh 접근이 허용되어야 합니다. 따라서, 인바운드 규칙에 TCP 프로토콜, 22 포트, 나의 IP를 추가해주어야 합니다.

 

 이렇게 생성된 보안 그룹을 EC2 인스턴스에 연결해줍니다. 보안그룹 변경은 인스턴스 요약 페이지 오른쪽 상단에 "작업 > 보안 > 보안그룹 변경" 메뉴에서 가능합니다.

 

 

3. SSH 터미널 접속

 보안그룹 설정까지 끝마쳤으니 이제 내 로컬 PC에서 EC2 인스턴스 터미널로 접근을 해봅니다! 

* 로컬 PC는 Mac OS를 기준으로 작성되었습니다.

 

 터미널을 열어 아래의 명령어를 입력합니다.

 

> ssh -i {키 페어 경로} {EC2 유저이름}@{EC2 퍼블릭 IP 주소}

- 키 페어 경로 : 키 페어 생성 시, 다운로드 받은 .pem 파일 경로 (ex. ~/.ssh/bastion-key.pem)

- EC2 유저 이름 : EC2 인스턴스의 OS에 따라 다릅니다. (ex. Amazon linux : ec2-user / Ubuntu : ubuntu)

- EC2 퍼블릭 IP 주소 : EC2 상세정보 요약에서 확인 가능. (ex. 13.124.172.66)

 

 다운받은 pem key를 이용하여 처음 EC2로 접근할 때 아래와 같은 문구로 접속이 안되는 경우도 있습니다.

 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/younger/.ssh/bastion-key.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 "/Users/younger/.ssh/bastion-key.pem": bad permissions
ec2-user@13.***.***.***: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

 "Permissions 0644 for '{key pair 경로}' are too open."

 

 키 페어의 접근 권한이 너무 오픈되어 있으면 위의 문구가 나타나면서 접속이 진행되지 않습니다. 현재 접근 권한은 644로 파일 소유자는 읽기와 쓰기, 그룹은 읽기, 그 외 사용자도 읽기 권한이 주어져 있습니다. 400으로 변경하여 파일 소유자만 읽기 권한을 주고 그 외 사용자는 접근이 불가능 하도록 합니다.

 

> chmod 400 {키 페어 경로}

 

 권한 변경 후, 다시 ssh 명령어로 접속을 시도하면 연결에 성공합니다.

 

정상적으로 접속 성공!

 

 만약 보안 그룹에 등록되지 않은 IP에서 접근 시도를 하면 connection timeout이 발생하게 됩니다.

 

커넥션 타임 아웃.. 접속 실패!

 

 

 다음 포스팅에서는 프라이빗 서브넷 영역의 WAS용 인스턴스 생성과 베스천 서버를 통해 생성된 프라이빗 인스턴스에 접근을 해보도록 하겠습니다.

Comments