- AWS에서 IAM의 보안 모범 사례 정의

1. AWS 계정 루트 사용자의 액세스 키 잠금

2. MFA 활성화

3. 개별 IAM 사용자 생성

4. 사용자 그룹을 이용한 접근 권한 할당

5. 사용자에 대한 강력한 암호 정책 구성

 

1. AWS 계정 루트 사용자의 액세스 키 잠금

루트 사용자의 권한을 이용해서 프로그램으로 AWS의 리소스 조작을 지양하기 위해 루트 사용자의 액세스 키는 없는 상태로 두는 것이 좋다.

액세스 키가 이미 생성 되어 있다면 삭제를 해주자.

콘솔의 우측 위 aws계정 이름을 클릭 하여 "보안 자격 증명" 관리 화면 열기

액세스 키 삭제 항목을 선택 하여 활성화된 액세스 키를 찾아 삭제

 


2. MFA 활성화

루트 사용자의 권한이 강력한데 비해 인증 방법이 초기에는 메일주소와 비밀번호 뿐이기 때문에 더 안정한 방법이 필요 하다.

Google Authenticator나 Authy를 이용해서 가상 MFA 디바이스를 이용하는게 좋다.

AWS 관리 콘솔을 열어 "보안 자격 증명"으로 이동

 

멀티 팩터 인증(MFA) 항목을 선택 후 활성화 버튼을 클릭

디바이스 종류를 가상 MFA 디바이스를 선택 하고 계속 진행을 한다

 


3. 개별 IAM 사용자 생성

일상적인 개발 조작을 수행하는 일반 사용자인 IAM 사용자를 생성 한다.

 

IAM 대시보드로 이동해서 사용자 메뉴로 이동 후 "사용자 추가" 실행

사용자 세부 정보를 설정 해줘야 하는데 사용자 이름에는 다른 사용자와 중복 되지 않는 이름을 설정

"암호 - AWS 관리 콘솔 엑세스" 항목에 체크

 

권한 설정에서 사용자 혹은 그룹을 선택 할 수 있다.

그룹에 사용자 추가를 선택

 

태그 추가 항목에서는 지정한 이름 외에 사용자를 구별하는 정보를 추가 할 수 있다.

IAM 사용자가 수백명 정도의 대규모일 경우 이름과 함께 관리자 부서 이름 역할 등을 이용해 쉽게 관리가 가능 하다.

일단 패스

 

검토 후 사용자 만들기 클릭

 

생성한 사용자 에게 메일을 전송 할 수 있다

IAM 사용자여도 루트와 마찬 가지로 MFA를 활성화 할 수 있다. 그리고 하는 것이 좋다.

 


4. 사용자 그룹을 이용한 접근 권한 할당

사용자 그룹에 접근 권한을 할당 해서 효율 적으로 누락 없이 사용자에게 접근 권한 부여가 가능 하다

 

루트 사용자로 로그인한 뒤 관리 콘솔 화면을 열어 IAM대시보드 -> 액세스관리 -> 사용자 그룹을 클릭 후 그룹을 생성 한다

그룹 이름을 입력 하는데 접근 권한을 관리한느 것을 고려해서 역할을 의미한 이름을 적는 것이 좋다

예) Developers, Financial Managers

 

접근권한 부여에서는 여러 리소스로의 접근 권한을 묶은 정책(policy)를 제공 한다.

정책을 직접 만들 수도 있지만 미리 설정된 정책을 부여 하는 것이 훨씬 편리하다.

PowerUserAccess 와 IAMFullAccess 를 검색 하여 선택 해준다.

PowerUserAccess는 AWS안의 리소스에 대한 모든 접근 권한을 가진다.

IAMFullAccess 정책은 IAM에 대한 모든 접근 권한을 가진다.

두 정책 모두 AWS 계정 자체에 대한 계약 해지는 할 수 없기 때문에 루트 사용자보다 안전하다.

 

그룹을 생성했기 때문에 이제 그룹에 사용자를 추가 할 수 있다

액세스 관리 -> 사용자 그룹을 클릭 해서 IAM 사용자를 추가 하려는 그룹 이름을 클릭 하면 사용자 추가를 할 수 있다

 

비밀번호 정책을 설정할 수도 있다

쉬운 비밀 번호를 이용 할 수 없도록 제한을 추가 할 수 있다

액세스 관리 -> 계정 설정 -> 암호 정책 변경 버튼 클릭

"최소 암호 길이 적용 10자"

"1개 이상의 라틴 알파벳 소문자 필수"

"1개 이상의 숫자 필수"

이정도를 설정 해주자

 

 

 

- 본 내용은 도서 "aws로 시작하는 인프라 구축의 정석"에서 발췌 하였습니다.

우분투 업데이트

sudo apt update



아파치 설치 

sudo apt install apache2

AWS 보안에 인바운드 설정을 해주고 브라우저에서 정상적으로 뜨는지 확인

In Browser:
http:// ip address



php 설치

sudo apt install php libapache2-mod-php php-mbstring php-xmlrpc php-soap php-gd php-xml php-cli php-zip php-bcmath php-tokenizer php-json php-pear php-fpm php-dev php-curl php-mysql
php --version


mysql && phpmyadmin 설치

sudo apt install mysql-server
sudo apt install phpmyadmin


중간에 물음창 나오면 install to apache2 선택

 

브라우저에서 확인

In Browser:
http:// ip address/phpmyadmin


Mysql root 유저 설정

sudo mysql;
USE mysql;
select user, host, plugin from mysql.user;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';

 

비밀 번호를 mypassword로 설정한다.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
mysql -u root -p
CREATE database 테이블명;

 

mysql 재실행

sudo service mysql restart

 

mysql 잘 돌아 가는지 확인하기

sudo service mysql status

 

mysql 외부 접속 설정 하기

cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf

 

127.0.0.1 에서 외부 접속이 가능 하도록 변경

( 수정은 i , 저장은 :wq , 검색은 / )

## bind-address = 0.0.0.0 으로 변경
bind-address 의 맨앞에 # 를 넣어서 주석 으로 변경함



composer 설치

cd /var/www/html
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer



라라벨 git 클론

html 폴더로 이동

cd /var/www/html

 

깃허브에 프로젝트 연결 (폴더 생성 후 깃 허브 연결)

sudo git clone [깃허브 저장소 주소] [저장할 폴더이름]

 

프로젝트 폴더로 이동해서 composer로 php 외부 패키지 설치

cd /var/www/html/프로젝트이름
sudo composer install

 

ls -al 로 모든 파일을 확인 해보면 .env 가 아직 없다.

.env.example을 .env로 복사한다.

sudo cp .env.example .env

 

env 파일 열어 mysql 정보 셋팅 후 저장

sudo vi .env

 

env 파일에 key 생성 하여 주입

sudo php artisan key:generate


아파치 root directory 설정

cd /etc/apache2/sites-available
ls -al
sudo nano 000-default.conf

 

DocumentRoot /var/www/html/라라벨설치폴더/public 으로 변경

예 ) DocumentRoot /var/www/html/laravel_project/public

sudo service apache2 restart

 

아파치가 잘 돌아가는지 확인

sudo service apache2 status

 

(필요시) 아파치 서버 정지와 재시작

sudo service apache2 stop
sudo service apache2 restart

 

라라벨 폴더 권한 변경 및 migration

cd /var/www/html/프로젝트폴더

 

public과 storage 폴더의 권한을 설정

sudo chown -R www-data:www-data storage
sudo chown -R www-data:www-data public

 

디비 마이그레이션과 시드 적용

sudo php artisan migrate
sudo php artisan migrate --seed

RPM 설치

sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

 

 

yum 으로 설치

sudo yum install mysql-community-server

 

## 설치 하는 과정에서 GPG KEY error가 발생 한다면? ##

 

RPM 다시 설치

sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

 

yum으로 mysql 설치 실행

sudo yum install mysql-community-server

gpgkey를 업데이트 해야 한다

/etc/yum.repos.d/에 있는 mysql repo파일의 gpgkey행을 아래와 같이 수정 한다

gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

혹은 이렇게 해도 된다.

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

 

이후 다시 yum으로 mysql 설치

sudo yum install mysql-community-server

 

서버 자동 시작 설정

sudo systemctl enable mysqld
sudo systemctl start mysqld

 

mysql 서버가 실행되있는지 확인

sudo systemctl status mysqld

 

 

mysql root 초기 비밀번호 확인

sudo grep 'A temporary password' /var/log/mysqld.log

 

myslq 접속

mysql -u root -p

 

root 계정 비번 변경 하기

sudo mysql_secure_installation
Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : n

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

1. php 최신버전 조회

sudo amazon-linux-extras | grep php

 


2. php8.0 레포지토리 설치

sudo amazon-linux-extras install php8.0



3. php7.4

sudo amazon-linux-extras enable php8.0



4. php 모듈 설치

sudo yum install  php-cli php-common php-gd php-mbstring  php-mysqlnd php-pdo php-fpm php-xml php-opcache php-zip php-bcmath



5. php 버전 확인

php -v

## AWS 콘솔에 접속 후 인스턴스 시작하기

 

 

##  정보입력

크게 중요하지 않음. 대충 적고 아래로 내려가자

 

AWS에서 프리티어 사용 가능한 서버를 자동으로 선택 해준다.

 

새 키페어 생성 하기

 

키 페어 생성 후 어딘가에 저장 해놓자

생성한 키페어를 잘 저장 해놓아야 한다.

 

우측에 "인스턴스 시작" 버튼 클릭 해서 인스턴스 실행.

 

 

## 처음에는 준비중으로 있다가 잠시 뒤에 생성한 인스턴스 상태가 실행 중으로 변경 된다.

연결을 눌러 SSH 클라이언트 탭으로 이동.

 

## 키페어 받은 키가 pem형식일 경우

AWS에서 다운 받은 키가 .pem 형식일 경우 
PuTTY에서 이용하기 위해서는 .ppk형식으로 변환해야 한다 

 

Putty 다운 받기

PuTTY 사이트(www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 에서 installer를 받아 설치한다.

 

Putty key generator 실행

Load 버튼을 눌러 AWS에서 받은 키페어를 불러온다.

이후 Save private key를 눌러 pem형식 키를 저장 해준다

 

 

## Public DNS 복사하기

퍼블릭 DNS 복사 하기

 

HoseName 영역에 붙여넣기

 

aws pem키 불러오기

 

이후 "OPEN" 버튼을 클릭 하면 아래처럼 리눅스 창이 열린다.

일반적으로 ubuntu 기본 아이디는 ubuntu 이지만 aws의 경우 ec2-user 로 되기도 한다.

 

ec2-user 로 접속 한 모습

 

이렇게 aws ubuntu 서버에 접속 하였다.

1.

C:\Windows\System32\drivers\etc\hosts 파일을 관리자 형태로 열어 아래 내용 추가

# XAMPP ServerNames
127.0.0.1   localhost dev.localhost

localhost나 dev.localhost 이름의 url로 아이피에 접근 할 수 있도록 설정

 

 

2.

C:\xampp\apache\conf\extra\httpd-vhosts 파일을 열어 아래 내용 추가

<VirtualHost *:80>
       DocumentRoot "C:/xampp/htdocs/"
       ServerName localhost
</VirtualHost>

<VirtualHost *:80>
       DocumentRoot "C:/xampp/htdocs/example-app/public"
       ServerName devtost.localhost
</VirtualHost>

1번에서 설정한 호스트이름을 ServerName에 등록 한다.

 

이후 XAMPP컨트롤 창을 열어 아파치 재시작을 해준 뒤 ServerName으로 접속 해보면 된다.

+ Recent posts