AWS는 전 세계적으로 가장 큰 클라우드 서비스 제공 업체 중 하나로, 넓은 범위의 서비스를 제공하여 다양한 비즈니스 요구 사항을 충족한다.
현재 200개가 넘는 서비스가 존재하고, 사용자는 가상환경에서 거의 모든 작업을 수행할 수 있게 되었다.
이 AWS 파트는 AWS의 기초 원리부터 모두 설명하는 것이 아닌 실무 위주의 파트이다.
EC2란?
EC2란 Amazon Elastic Compute Cloud의 줄임말로서 AWS에서 제공하는 클라우드 컴퓨팅이다.
독립된 컴퓨터를 임대해주는 서비스로서 AWS의 대표적인 서비스라고 할 수 있다.
컴퓨팅 자원을 대여해서 내가 원하는 시간만큼 사용할 수 있는 서비스이다.
EC2는 컴퓨터를 주문하면 바로 1분 안에 생성되고, 삭제 또한 종료시키면 자동으로 제거된다.
대여라는 말 그대로 사용한 만큼만 비용을 지불하면 된다.
내가 만일 10GB의 용량만 필요하다면, 굳이 컴퓨터 SSD를 사는 것이 아닌 CSP 업체에서 그냥 그만큼의 자원만 빌려오면 되는 것이다.
EC2는 인터넷이 연결되어있기만 하다면 자유롭게 접속할 수 있다.
AMI라는 기능도 있다. 컴퓨터를 사용하면 프로그램도 설치하고, 파일도 저장하고, 설정도 변경하게 되는데, 이 OS 상태 그대로 저장하는 기능을 이미지(AMI) 라고 한다.
내가 좋아하는 블로거는 윈도우 백업 설정이라는 예시를 들었는데 맞는 말이다.
이미지를 이용해서 새로운 컴퓨터를 만들면 이미지에 저장된 상태와 똑같은 컴퓨터를 빠르게 생성할 수 있다.
즉, 컴퓨터를 하나 장만할 때마다 반복되는 설치 작업을 하지 않게 되는 것이다.
이를 통해 하드웨어 구매없이 더 빠르게 애플리케이션을 개발하고 배포할 수 있다.
EC2를 통해 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능하며, 또한 요구 사항이나
갑작스러운 트래픽 증가 등 변동 사항에 따라 신속하게 규모를 확장하거나 축소할 수 있어 서버 트래픽 예측 필요성이 줄어
든다는 장점이 있다.
첫 실습은 가상 EC2 환경에 내 인스턴스를 생성하는 것이다.
Key Pair 생성
Key pair가 필요한 이유는?
인스턴스에 접근
EC2 인스턴스에는 운영 체제가 포함되어 있다.
이 운영 체제에 접근하려면 SSH (리눅스) 또는 RDP (Windows)를 사용하여 해당 인스턴스에 로그인해야 한다.
Key pair는 이러한 접근을 안전하게 하기 위해 사용된다.
공개 키는 인스턴스에 전송되고, 해당 개인 키는 클라이언트 측에 보관된다.
보안
Key pair를 사용하면 암호를 통해 접속하는 것보다 더 안전한 인증 방법을 제공한다.
공개 키/개인 키 쌍을 사용하여 인스턴스에 접속하므로 암호를 노출할 위험이 없다.
권한 관리: 특정 개인 키를 가진 사용자만 특정 EC2 인스턴스에 액세스할 수 있도록 제한할 수 있다.
이를 통해 접속 권한을 세밀하게 관리할 수 있다.

EC2에 들어와서 네트워크 및 보안 에서 키 페어 를 선택한다
키 페어 생성에 들어가서 새로운 키 페어를 만든다
이름은 내가 원하는 식으로. 대신 내가 알아볼 수 있고 이게 어떤 Key Pair인지 알 수 있게 하는 것이 좋다.
일반적으로 각각의 서비스나 환경에 대해 별도의 key pair를 생성하는 것이 좋다.
예를 들어보자면 , Amazon EC2와 Amazon Lightsail은 각각 독립적인 서비스이며, 각 서비스에서 사용하는 key pair는 서로 다르다.
따라서 EC2 인스턴스에 사용하는 key pair를 Lightsail 인스턴스에 사용할 수는 없다.

이런식으로 파일은 .pem 형식으로 해주고 키 페어 생성을 누른다
그럼 텍스트 파일이 하나 저장되는데 이 긴 문자 모두 키의 일부분 이다.

다운받은 키 페어의 경로 정도는 알아두어야 한다. 내가 위치 파악을 하기 좋게 해야 한다.
웹 서버 인스턴스 생성
키 페어를 만들었으니 이제 웹 서버 인스턴스를 생성해보자.
지금부터 단계를 따라하면 된다.
- AWS Console 에 로그인하고 AWS EC2 로 이동한 후 Launch Instances를 선택한다.
- Name and tags 에서 생성할 인스턴스의 이름을 지정한다. (에 : [Your Name]-lab)
- Application and OS Images (Amazon Machine Image) 에서 다음과 같이 선택.
- Quick Start 를 선택
- Amazon Machine Image (AMI) 선택
- Amazon Linux 2 Kernel 5.10, SSD Volume Type 선택
- Instance type 에서 t2.micro 선택
- Key Pair (login) 에서 Key pair name 에 생성한 Key Pair 를 선택한다. 만일 미리 생성한 Key Pair 가 없다면 오른쪽에 Create new key pair 를 누르면 새탭에 Key Pair 를 생성하는 화면이 뜨고 Key Pair 를 생성하고 다시 인스턴스 생성하는 화면으로 돌아온다.
- Network settings 에서 오른쪽에 Edit 를 선택한다.
- VPC - required 에서 원하는 VPC 를 선택
- Subnet 에서 원하는 Subnet 선택
- Auto-assign public IP 에서 Enable 을 선택
- Firewall (security groups)에서 새로운 Security Group 만들려면 Create security group 을 선택하여 만들고 기존 Security Group 을 사용하려면 Select existing security group 을 선택한다. 여기서는 Select existing security group 을 선택다.
- Common security groups 에서 여기서는 Default 를 선택한다.
- Configure storage 사용할 EBS 용량과 Type 을 선택. 여기서는 기본 사양 8GiB 그대로 사용한다.
- Advanced details 에서 다음과 같이 설정한다.
- IAM instance profile 에서 생성할 인스턴스에 사용할 IAM Role 을 선택.
- Amazon Linux 2 일 경우
- Metadata accessible 에서 Enabled 선택.
- Metadata version 에서 v1 and v2 (token option) 선택.
- Amazon Linux 2023 일 경우
- Metadata accessible 에서 Enabled 선택.
- Metadata version 에서 v2 olny (token required) 선택.
- User data 에서 다음과 같이 스크립트를 빈칸에 추가.
- AMI 가 Amazon Linux 2 일 경우 User data.
이 유저 데이터에
#!/bin/sh
# Install a LAMP stack
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum -y install httpd php-mbstring
# Start the web server
chkconfig httpd on
systemctl start httpd
# Install the web pages for our lab
if [ ! -f /var/www/html/immersion-day-app-php7.tar.gz ]; then
cd /var/www/html
wget https://aws-joozero.s3.ap-northeast-2.amazonaws.com/immersion-day-app-php7.tar.gz
tar xvfz immersion-day-app-php7.tar.gz
fi
# Install the AWS SDK for PHP
if [ ! -f /var/www/html/aws.zip ]; then
cd /var/www/html
mkdir vendor
cd vendor
wget https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip
unzip aws.zip
fi
# Update existing packages
yum -y update
이 정보를 추가한다. amazon linux2 버전이다. 웬만해선 이걸로 가는 걸 추천.
간단하게 설명하자면
Amazon Linux에서 LAMP (Linux, Apache, MariaDB/MySQL, PHP) 스택을 설치하고 설정하는 스크립트이다.
LAMP 스택 설치: amazon-linux-extras 명령을 사용하여 LAMP 스택 구성 요소를 설치.
또한, yum 패키지 관리자를 사용하여 Apache 웹 서버와 추가적인 PHP 모듈을 설치한다.
웹 서버 시작: chkconfig 명령을 사용하여 시스템 부팅 시 Apache 웹 서버가 자동으로 시작되도록 설정하고, systemctl 명령을 사용하여 웹 서버를 시작한다.
웹 페이지 설치: 웹 서버의 루트 디렉토리인 **/var/www/html**로 이동한 후, 만약 해당 디렉토리에 immersion-day-app-php7.tar.gz 파일이 없다면 AWS S3 버킷에서 해당 파일을 다운로드하고 압축을 푸는 작업을 수행한다.
AWS SDK for PHP 설치: 만약 /var/www/html 디렉토리에 aws.zip 파일이 없다면, AWS SDK for PHP를 다운로드하여 해당 디렉토리에 압축을 해제한다.
이는 PHP 애플리케이션에서 AWS 서비스를 사용하기 위해 필요한 SDK이다.
패키지 업데이트: yum 패키지 관리자를 사용하여 시스템에 설치된 패키지를 최신 버전으로 업데이트한다.
이 정보를 추가하면서 새로운 인스턴스를 배포하거나 서버를 프로비저닝할 때 편리하게 사용한다.
EC2 인스턴스의 public DNS name을 브라우저 URL 칸에 입력해서 띄운다.
이렇게 EC2의 네트워킹에 가면 퍼블릭 DNS 이름을 알 수 있다. 이렇게 검색해서 들어가면
아파치 웹 서버를 확인할 수 있다. 메타데이터가 잘 동작한 것을 알 수 있다.
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
이렇게 명령어를 입력하여 웹 서버 테스트를 해보자
이렇게 PHP 페이지가 뜬 것을 알 수 있다.
DB까지 연결
여기서 끝나면 그냥 웹 페이지 하나 딱 띄운걸로 끝난다. 보통은 db까지 연결해야 한다. 왜 그럴까?
- 데이터 저장: 웹 애플리케이션은 종종 사용자 정보, 콘텐츠, 설정 등을 저장해야 한다. 이러한 데이터를 DB에 저장하면 영구적으로 보존되고 효율적으로 관리할 수 있다.
- 동적 콘텐츠 제공: DB와의 연결을 통해 웹 페이지는 실시간으로 업데이트되고 동적으로 생성된 콘텐츠를 제공할 수 있다. 사용자가 실시간으로 변경되는 데이터에 액세스하고 상호 작용할 수 있게 하는 것.
- 데이터 검색 및 필터링: DB를 사용하면 데이터를 쉽게 검색하고 필터링할 수 있다. 사용자가 웹 애플리케이션에서 원하는 정보를 빠르게 찾을 수 있도록 도와주는 것.
- 데이터의 일관성 보장: 데이터베이스를 사용하여 데이터를 중앙 집중식으로 저장하면 여러 사용자 또는 서버 간의 일관된 데이터 접근을 보장할 수 있다. 이를 통해 데이터 일관성과 무결성을 유지할 수 있다.
- 보안: 데이터베이스를 사용하여 데이터를 저장하면 데이터를 보호할 수 있는 다양한 보안 기능을 활용할 수 있다. 데이터 암호화, 접근 제어, 백업 및 회복 기능 등을 활용하여 데이터 보안을 강화할 수 있다.
웹 페이지에서 DB를 연결하는 것은 데이터 관리와 웹 애플리케이션의 기능을 개선하고 사용자에게 더 나은 경험을 제공하기 위한 필수적인 단계이다.
일반적으로 RDS를 생성해서 EC2와 연결한다는 상황을 가정해보자.
1. RDS 콘솔 또는 AWS CLI를 사용하여 데이터베이스 인스턴스를 생성한다.
2. 생성된 데이터베이스 인스턴스의 엔드포인트를 확인한다.
3. DB 전용 툴(예: MySQL Workbench, DBeaver, 등)을 사용하여 해당 엔드포인트에 연결한다.
4. 툴을 통해 데이터베이스에 접속하고 SQL 쿼리를 실행하거나 관리 작업을 수행한다.
5. 필요에 따라 내 EC2와 DB 엔드포인트를 연결하여 애플리케이션과 데이터베이스 간의 통신을 설정한다.
데이터베이스 서버 보안 설정
리눅스 업데이트를 먼저 실행한다
sudo yum update -y
예를 들어 마리아 db를 설치한다면
sudo amazon-linux-extras install mariadb10.5 -y
이런 식으로.
이제 서버 보안 유지하려면
systemctl start mariadb #서버 실행
mysql_secure_installation #실행
암호를 입력하라는 메시지가 표시되면 루트 계정의 암호를 입력한다.
현재 루트 암호 입력. 기본적으로 root 계정에는 암호가 없다. Enter를 누른다.
암호를 설정하려면 Y를 누른 후 안전한 암호를 두 번 입력한다. 이 암호를 안전한 장소에 보관하자.
데이터베이스 기반 애플리케이션을 빌드하거나 설치할 때, 일반적으로 그 애플리케이션의 데이터베이스 서비스 사용자를 만들고 데이터베이스 관리 이외의 어떤 목적으로도 루트 계정을 사용하지 못하게 한다.
MariaDB에 대한 루트 암호를 설정하는 것은 데이터베이스를 보호하는 가장 기초적인 방법이다.
Y를 눌러서 익명 사용자 계정을 제거.
Y를 입력하여 원격 루트 로그인을 비활성.
Y를 눌러서 테스트 데이터베이스를 제거.
Y를 눌러서 권한 테이블을 다시 로드하고 변경사항을 저장.
(선택 사항) 지금 바로 사용할 계획이 아니라면 MariaDB 서버를 중지. 필요할 때 다시 시작할 수 있다.
systemctl stop mariadb
부팅 시 서버가 시작되도록 하려면
systemctl enable mariadb
Session Manager 사용하여 리눅스 인스턴스 접근
Session Manager는 대화형 원클릭 브라우저 기반 셸 또는 AWS CLI를 통해 Amazon EC2 인스턴스를 관리할 수 있는 AWS Systems Manager의 기능이다.
Session Manager를 사용하여 인스턴스에 세션을 시작할 수 있다. 세션이 시작된 후, 다른 연결 유형을 통해 bash 명령을 실행할 수 있다.
systems manager를 위한 IAM 인스턴스 프로파일을 생성
IAM으로 먼저 이동하고. 역할에 들어가서 역할 생성을 누른다

이제

이렇게 선택을 하고 다음으로 넘어간다
권한 추가 칸에서

이 정책의 왼쪽 체크박스를 누르고 다음을 클릭한다
역할 이름은 SSMInstanceProfile이라 하고 역할 생성을 누른다.
역할에 들어가서 방금 생성한 역할 이름을 기록한다.
(AmazonSSMManagedInstanceCore는 AWS Systems Manager에 의해 관리되는 EC2 인스턴스에 대한 보안 및 관리를 제어하는 AWS Identity and Access Management (IAM) 역할)
systems manager을 사용해서 관리할 인스턴스에 해당 역할을 부여하면 된다.
기존의 인스턴스에 Systems Manger 인스턴스 프로파일 부착
EC2 콘솔로 들어가서 인스턴스 아래에 있는 인스턴스를 들어간다
실습 때 생성했던 EC2 인스턴스를 들어가서 연결을 누른다

그리고 session manager에 들어가면

이런 창이 뜬다

이 커널에 이제 명령어를 입력할 수 있다.
Session Manager는 SSH(Secure Shell)를 사용하지 않고, HTTPS 프로토콜을 사용하여 EC2 인스턴스에 안전하게 연결할 수 있다.
SSH는 보안에 취약한 프로토콜로 알려져 있으며, Session Manager는 암호화된 연결을 제공하여 보안성을 강화한다.
또한 Windows, Linux 등 다양한 운영체제를 지원한다.
'Cloud > AWS' 카테고리의 다른 글
[AWS] ECR에 도커 이미지 업로드 (44) | 2024.07.31 |
---|---|
[AWS] EFS 실습 (with EC2, VPC) (39) | 2024.06.28 |
VPC 간 통신 및 인터넷 접속을 위한 AWS 구성 요소의 역할과 설정방법 (31) | 2024.05.31 |
AWS 전체적인 용어 정리 (0) | 2024.05.20 |
SAA-C03 합격 후기 (1) | 2024.04.23 |