모노산달로스의 행보

[AWS] EC2(Elastic Compute Cloud)의 대하여 with SSH로 EC2 Instance 접근하기 본문

Infrastructure/AWS

[AWS] EC2(Elastic Compute Cloud)의 대하여 with SSH로 EC2 Instance 접근하기

모노산달로스 2024. 10. 13. 23:01

aws-EC2 with SSH

 

AWS(Amazon Web Services)

 

 

AWS(Amazon Web Services)는 아마존이 제공하는 클라우드 컴퓨팅 서비스로, 서버, 스토리지, 네트워크 등을 클라우드를 통해 이용할 수 있습니다. 높은 안정성과 확장성을 갖춘 AWS는 클라우드 분야에서 높은 점유율을 차지하고 있습니다. 스파게티처럼 많은 기술이 존재하여 올바른 사용을 위해서는 꼭 학습이 필요합니다. 반대로 배워두면 많은 클라우드 기술을 사용할 수 있게 됩니다.

 


 

EC2(Elastic Compute Cloud)

What is EC2(Elastic Compute Cloud)

 

EC2(Elastic Compute Cloud)란 마치 aws 서비스의 Infrastructure와 같습니다. 단순히 하나의 서비스가 아니라 여러 기능을 포괄하고 있습니다.

 

EC2는 매우 중요한 위치에 있습니다. 클라우드 서비스란 컴퓨터 기능을 필요에 따라 임대하는 것을 의미합니다. 즉, EC2의 사용 방법을 이해하는 것은 클라우드 기능의 사용 방법을 이해하는 것과 같습니다. 해당 포스트에서는 이러한 EC2 그중에서도 EC2 Instance에 대하여 자세히 알아보겠습니다.

 

EC2 : 가상 머신을 빌리는 기능
EBS : 가상 드라이브에 데이터를 저장하는 기능
ELB : 머신들 사이의 부하를 분배하는 기능
ASG : auto-scaling group을 사용하여 서비스를 스케일링하는 기능

 

 


 

EC2 Configuration options

Page of the creating EC2 instance

 

EC2 Instance 생성시 여러 가지 Option을 선택할 수 있습니다.

OS : Linux, Mac, Windows ...
CPU : How much compute power & cores
RAM : How much random-access memory
EBS & EFS : How much storage space
Network Card : Speed of the card, public IP address
Firewall rules : security group
Bootstrap script : EC2 User Data

 

여기서 중요한 부분은 가상 머신의 특정 부분을 설정하고 임대가 가능하다는 것입니다. 아래에서 몇 가지를 살펴보겠습니다.

 

 

EC2 Instance types

EC2 Instance type

 

EC2 Instance type은 매우 많은 선택지가 존재합니다. 해당 정보는 아마존 공식 홈페이지에 자세히 정리되어 있습니다.

 

 

컴퓨팅 - Amazon EC2 인스턴스 유형 - AWS

 

aws.amazon.com

 

모든 Instance type을 설명할 수는 없지만, 각 Instance type은 다음과 같은 규칙으로 구분할 수 있습니다.

예를 들어 m5.xlarge Instance type을 분석해봅시다.
m은 Instance class를 의미합니다. m 혹은 t와 같은 type은 general purpoes로서 일반적으로 사용될 수 있는 type입니다.
5는 세대(generation)를 의미합니다. aws가 해당 type의 새로운 버전을 출시할 때마다 숫자가 늘어납니다.
2xlarge는 instance class의 크기를 의미합니다. 크기가 클수록 많은 리소스를 사용할 수 있습니다.

 

 

 

EC2 User Data

EC2 User data configuration

 

Bootstrap이란 컴퓨터 실행 시 수행하는 초기 작업들을 의미합니다. EC2 Instance에서 같은 역할을 하는 것이 바로 user data입니다.

 

EC2 Instance 생성 시 Advanced 설정으로 위와 같이 User data를 입력할 수 있습니다. 이는 Bootstrap 작업을 시작할 때 실행되는 스크립트입니다. 해당 스크립트는 root user로 실행된다는 특징이 있습니다.

 

yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html

 

위와 같이 User Data를 설정할 수 있습니다. 시스템 업데이트, 아파치 웹 서버 설치, index.html 생성 등의 작업들을 자동화하는 역할을 수행합니다.

 

 


 

Secruity Groups

What is Inbound traffic and Outbound traffic

 

Security Groups는 AWS 네트워크 보안의 기본으로서, EC2 Instance의 방화벽과 같은 역할을 하기도 합니다. 즉, 인스턴스로 들어오고 나가는 트래픽을 허용하는 부분을 담당합니다. 이때, 각 트래픽을 Inbound RulesOutbound Rules으로 구분하여 관리할 수 있습니다.

 

Inbound traffic이란 위 그림과 같이 웹과 같은 외부 요소에서 EC2에 접근하는 것을 의미합니다. 반대로 Outbound traffic은 EC2 Instance에서 다른 웹 혹은 애플리케이션으로 신호를 보내는 것을 의미합니다.

 

Creating Security Group

 

Rule 생성시 위와 같은 요소들을 통해 규제가 가능합니다. Port의 대한 범위, IPv4 혹은 IPv6의 대한 범위로 규칙을 정할 수 있습니다.

Port number는 고전적으로 아래와 같은 의미를 가집니다.
22 : SSH - Linux instance에 로그인하는 경우
21 : FTP (File Transfer Protocol) - file share로 파일을 업로드하는 경우
22 : SFTP (Secure File Transfer Protocol) - SSH를 사용하여 파일을 업로드 하는 경우
80 : HTTP - 웹사이트에 암호화되지 않은 상태로 접근하는 방법
443 : HTTPS - 웹사이트에 암호화된 상태로 접근하는 방법
3389 : RDP (Remote Desktop Protocol) - Windows instance에 로그인하는 경우

 

이러한 Security Groups는 몇 가지 특징을 가집니다.

 

첫 번째로 하나의 Security Groups에 인스턴스가 여럿 존재할 수 있습니다. 반대로, 하나의 EC2 인스턴스는 여러 보안 그룹에 속할 수도 있습니다. 이를 통해 각 인스턴스에 대한 다양한 트래픽 규칙을 적용할 수 있으며, 네트워크 접근 제어를 더욱 세밀하게 설정할 수 있습니다.

 

두 번째로 특정 지역 혹은 VPC 조합에 의해 제한된다는 특징이 있습니다. 즉, 새로운 VPC 혹은 다른 지역에서 사용하는 경우 새롭게 그룹을 생성해야 합니다. 특히 추후 설명할 SSH 액세스를 위해서는 별도의 그룹이 존재하는 것이 추천됩니다.

 

EC2 Instance에 public IP로 접근 시 에러가 발생하는 경우 다음과 같은 상황을 의심할 수 있습니다.

Timeout error 발생 : Security Groups 설정이 되어있지 않은 상황
Connect Refused 발생 : Traffic이 통과되었지만 애플리케이션에서 에러 발생

 

 

Referencing other security groups

Referencing other security groups Diagram

 

Security Groups 생성 시 위와 같이 다른 Security Group을 참조하는 것이 가능합니다. 예를 들어, 데이터베이스 서버가 속한 보안 그룹이 웹 서버가 있는 보안 그룹을 참조하여, 웹 서버에서만 데이터베이스 서버로의 트래픽을 허용하는 식으로 설정할 수 있습니다.

 

위 그림은 Inbound Rules로서 Security Group 1와 Security Group 2에 대해 허용을 하는 경우를 나타내고 있습니다. 따라서 해당 보안 그룹에 속하지 않은 세 번째 EC2 Instance은 신호를 보내도 거부됩니다.

 

 

 


 

SSH(Secure SHell)로 EC2 Instance 접근하기

 

What is SSH(Secure SHell)?

 

SSH(Secure SHell)란 네트워크를 통해 원격 시스템에 안전하게 접속하고 제어할 수 있도록 하는 암호화된 통신 프로토콜입니다. Windows, Linux, Mac 등 모든 OS에서 사용 가능합니다. 특이하게도 Windows환경에서는 PuTTY를 사용 하는 방법도 있습니다.

 

이러한 SSH를 통해서 EC2 Instance를 CLI(command-line interface)로 조작할 수 있습니다. 보안그룹에서 포트 22 (SSH)를 허용했다면, 웹으로 22번 포트를 통해 접근하여 터미널 혹은 커맨드라인에서 EC2 Instance에 접근이 가능하게 됩니다.

 

아래는 실제로 SSH를 통해 EC2에 접근하는 과정입니다.

 

01

 

EC2 Instance 생성시 위와 같이 Key pair를 생성 할 수 있습니다.

 

 

위와 같이 .pem 형태로 생성이됩니다. 해당 파일을 통해 SSH로 터미널 혹은 커맨드라인에서 접근이 가능합니다.

ssh -i <pem file name> <user name>@<EC2 Instance public IP>

 

첫 접근시 위와 같이 에러가 발생하는 경우가 있습니다. key의 보안 수준이 너무 낮다는 의미입니다. 따라서 보안 수준을 높여주어야합니다.

 

chmod 0400 <pem file name>

 

위와 같이 보안 수준을 설정해줍니다.

 

 

이후 다시 접근하면 위와 같이 EC2 Instance에 잘 접근되었음을 확인 가능합니다.

 

 

이후 aws의 IAM 유저 리스트를 출력해보고자 합니다. 그러면 credentails configure를 수행하라고 나타납니다. 이때, Access Key를 그대로 입력하는 것은 좋은 방법이 아닙니다. EC2 Instance에 매우 민간함 정보가 저장되기 때문입니다.

 

 

대신 Instance의 IAM Role을 업데이트 해주는 방법을 사용할 수 있습니다.

 

 

업데이트 후 다시 명령어를 실행하면 IAM user의 정보가 출력되는 것을 확인할 수 있습니다.

 


 

가장 유명하고도 많이 사용되는 EC2에 대한 첫 포스트입니다.

 

AWS에서 가장 중요한 부분이라고도 생각되고 많은 분들이 처음 접하는 서비스라고도 생각합니다.

 

후에 나오는 서비스들과도 유기적으로 연결되니 꼭 잘 정리하고 넘어가야 할 것 같습니다.