복습
* EC2
- 클라우드의 핵심 (서버를 아웃소싱, AWS가 가장 먼저 시작한 서비스)
- Ubuntu를 웹서버로 만드는 실습(Debian 계열 : apt, 예전에는 apt-get)
- Amazon Linux를 웹서버로 만든느 실습(Red hat 계열 : yum, 최근에는 dnf)
예정
- Windows Server 2016 → 실습 예정
- RDS(관계형 데이터베이스 서비스, Relational Database Service)
1. Windows Server 2016
1.1 인스턴스 시작
- 이름 : mj_Win2016
- 애플리케이션 및 OS 이미지 : Windows - MS Windows Server 2016 Base
* AMI(Amazon Machine Image)
- 아마존에서 미리 만들어놓은 가상머신 이미지
- 인스턴스 유형 : t2.micro → 윈도우는 다른 OS보다 좀 더 비쌈
- 키 페어, vpc, 서브넷 : 이전에 생성한 키가 남아있으면 사용, 없으면 생성
- 보안그룹 설정
→ 인스턴스 시작
1.2 인스턴스 연결
- 생성한 인스턴스 선택 > 연결
1) RDP 클라이언트 > 암호 가져오기(맨 아래)
- 키페어 파일 Browse 후에 암호해독
2) 윈도우 원격 데스크탑 연결
- 인스턴스의 퍼블릭 IP, 사용자이름 복사
- 윈도우 원격 데스크탑 > 옵션표시 > 컴퓨터 : 복사한 퍼블릭 IP, 사용자이름 붙여넣기 > 연결
- 사용자 자격 증명 암호 : 인스턴스의 암호 입력 > 확인
3) 원격 데스크톱 설정
- 원격) 윈도우 > 서버 매니저 > Add Roles and Features
- Installation Type > Role-based~ 선택 > next
- Server Roles > Roles 에 Web Server(IIS) 체크 > next
- 이외에는 모두 next, 마지막에 install 클릭 > install succeeded가 뜨면 close
4) 생성한 인스턴스의 Public IP에 웹 브라우저로 접속 → http://IP주소 (https는 ssh/tls 설치 필요)
1.3 원격 데스크톱 실습
* Windows Server의 Web Server Root Directory(IP주소나 도메인만 입력시 가장 먼저 접속되는 위치)
- 윈도우 웹 서버 루트 디렉토리 : C\inetpub\wwwroot
- iisstart.htm 파일의 확장자를 old로 변경 → iisstart.old
- 지난 실습의 index.html 코드에서 이미지 경로 수정 (파일이름만 작성)
- 수정한 코드 파일 및 이미지 파일(로컬 윈도우)을 원격 데스크톱(원격 윈도우)의 웹 서버 루트 디렉토리에 복사(마우스 우클릭 copy, paste - 끌어오기, 단축키 안됨)
- index.html 파일 이름 및 확장자 변경 → iisstart.htm
→ http://IP주소 에 다시 접속 시 생성한 issstart.htm 화면 출력
* 403 error가 뜨는 경우 : 인스턴스 설정 시 보안 그룹에서 http를 허용하지 않았기 때문
→ 생성한 인스턴스 선택 > 보안탭 > 보안그룹 선택 > 인바운드 규칙 편집으로 수정가능
* 접속이 안되는 경우 : 보안 그룹의 설정이 잘못된 경우 / 서비스가 실행되지 않은 경우(설정 후 아파치 재시작 필요)
* 저장한 파일이 페이지에 안보이는 경우 : 파일 또는 이미지 확장자가 잘못된 경우 / 이미지 업로드가 잘못된 경우
* Security Group(보안그룹)
- 인바운드 규칙 : 인터넷에서 AWS에 들어갈 때의 규칙(밖 → 안) → SSH, http, https, RDP 등 꼭 필요한 경우에만 허용
→ SSH, RDP는 반드시 IP주소를 엄격하게 제한(http, https는 제한 x)
- 아웃바운드 규칙 : AWS에서 인터넷으로 나갈 때의 규칙(안 → 밖) → 대부분 허용
* 웹 서버 루트 디렉토리 접속 화면 - 파일 우선순위 설정
- window2016(원격 데스크톱) > Server manager > IIS
- server 선택 > 우클릭 > Internet Information Services(IIS) Manager > Default Document
→ IP주소에 접속시 보여줄 파일 선택(파일이 여러개일 때 어떤 파일을 화면에 보여줄 지 우선순위 설정)
2. Database Server에 원격으로 접속
2.1 실습 준비 - VMware Ubuntu 22.04LTS
* Workbench : 클라이언트용 프로그램
- 구글에 workbench 검색 → MySQL workbench 8.0.30 다운로드
- MSI installer 다운 및 실행 - Client Only > next 또는 execute (error가 나올경우 try again)
1) 우분투에서 원격에서 사용할 계정 생성
$ sudo mysql -u root -p // 비밀번호 x
mysql> create user blackpink@'%' identified by 'icecream'; // % : 어디서든지 접속이 가능한 계정
mysql> grant all privileges on *.* to blackpink; // 모든 DB에 대해 모든 권한 부여
mysql> exit
2) Workbence
- +버튼 클릭
- 이름 : VMware Ubuntu MySQL
- Method : Standard(TCP/IP)
- Hostname : 우분투 서버 IP주소
- Username : blackpink
- Password > Store in Vault : icecream
→ OK 클릭
3) 외부에서 접속이 안되도록 설정되어 있음
* 우분투)
$ sudo ufw allow 3306 // 포트 허용(Ubuntu FireWall : 방화벽 규칙 업데이트 - 3306 포트에 외부접속 허용)
$ cd /etc/mysql/mysql.conf.d
$ sudo vi mysqld.cnf
: set nu → 31번 라인 : 127.0.0.1을 0.0.0.0으로 변경
// 127.0.0.1이면 본인 컴퓨터에서만 접속 가능(외부 접속x)
// 0.0.0.0이면 전세계 어디든지 접속 가능(매우 위험)
:wq
$ sudo service mysql restart // MySQL 재시작
* 참고) 회사 내부에서 접속하려면
ip 주소가 59.6.0.106 일 경우, 끝자리가 바뀔 수 있으므로 59.6.0.0으로 설정 → 회사 내에서는 IP가 바뀌어도 접속 가능
4) 생성한 workbench 접속
5) query1 에 명령어 입력 > 번개+커서 아이콘(커서가 있는 줄의 명령어 실행)
- create database awstest;
- use awstest;
- show databases;
* Root 계정을 업무에 활용하면 안되는 이유
- Root 계정이 크래킹되면 제어할 방법이 없음
- 다른 계정을 만들어서 활용
- 특히 DB의 경우 database마다 따로 계정을 할당하는 것이 좋음
* blackpink는 '%'로 되어있어서 Workbench 또는 mysql command line으로 DB에 접속 가능
* board는 localhost로 되어있어서 Workbench 또는 mysql command line으로는 DB에 접속 불가
→ SSH로 서버에 접속하고 board 계정으로 DB에 접속하면 가능
- use gnuboard;
- select * from g5_write_free;
2.2 goods.sql 파일 실습
- open a sql script~ 버튼 클릭 > goods.sql 파일 선택
- 전체선택(ctrl+a) 후 번개표시 버튼 클릭(goods.sql 파일 실행)
- 파일 맨 아랫줄에서 show databases; > 번개+커서
- use classicmodels
- show tables;
- desc orders; // orders 테이블에 컬럼 확인
- select orderNumber, orderDate, shippedDate from orders;
- select orderNumber, orderDate, shippedDate from orders order by orderDate desc limit 10;
→ orderDate를 기준으로 내림차순 정렬해 상위 10개만 출력 (최근 주문한 10개 목록 출력)
3. RDS 생성
* RDS 사전 조건
1) RDS는 가용영역 2개 필요 → Subnet 1개 추가해야 함
2) VPC에서 DNS 경로를 사용해야 함(호스트 이름 편집 → 활성화)
→ 두 조건을 만족해야 접속할 수 있는 URL을 생성할 수 있음
1) 서브넷 생성
- 지금 존재하는 서브넷과 다른 가용영역, 다른 IP(첫번째 두번째는 같아야함)
- VPC 탭 > VPC 선택 > 작업 > DNS 호스트 이름 편집
- 활성화 체크 > 변경사항 저장
2) 데이터베이스 생성
- 생성방식 : 표준생성
- 엔진옵션 : MySQL - 버전 : 8번대 아무거나
- 템플릿 : 프리티어
- DB 인스턴스 식별자 : mjgoods
- 마스터사용자 : mj_goods / admin1234
- 인스턴스 구성 : 버스터블클래스 - db.t2.micro
* 연결
- EC2 컴퓨팅리소스에 연결 x
- 퍼블릭 액세스 : 예
- VPC 보안그룹 : 새로생성 - 새 VPC 보안그룹이름 : DB_server
- 데이터베이스 인증 : 암호 인증
* Cloud의 종류
1) IaaS(Infrastructure as a Service)
- 클라우드에서 인프라를 제공해주는 서비스
- 인프라는 가상머신(Ubuntu, Amazon Linux, Windows Server 등), 네트워크(VPC, Subnet), 스토리지(S3) 등을 의미
- AWS는 HW, Network, Security 등만 책임
- 나머지(OS, Application, Data, Platform 등)는 사용자의 책임
- 장점 : 대부분 통제가 가능하며, 가격 저렴함
- 단점 : 사용자가 확장, 관리(백업, 용량, 보안, 장애 등) 해야함
2) PaaS(Platform as a Service)
- 클라우드에서 플랫폼을 제공해주는 서비스
- 플랫폼은 개발자가 개발할 수 있는 환경까지 제공해줌(RDS)
- AWS는 HW, Network, Security + OS + Applicatoin 설치 및 관리
- 사용자는 Application 사용 및 Data만 책임
- 장점 : 관리를 해주는 부분은 신경쓰지 않아도 됨(백업, 용량, 보안, 장애 관리 등을 AWS에서 제공)
- 단점 : OS 및 Application에 대한 완전한 통제는 어려움(root 권한x, admin 등을 만들어서 사용))
- PaaS-ta : 정부에서 개발자들이 창업할 수 있도록 만든 환경
3) SaaS(Software as a Service)
- 클라우드에서 소프트웨어를 제공해주는 서비스
- 사용자는 ID/PW 등 인증만 하면 모든 서비스를 이용할 수 있음, Client 용 SW만 필요
- 장점 : IT인력이 많이 필요하지 않음
- 단점 : 의존성 문제(마이그레이션이 어려움), 비용이 많이 듦, 사용자가 customizing하기 어려움
4. 실습 - Workbench를 이용해 goods.sql을 RDS에 업로드하고 명령실행
1) 새 workbench 생성
- 이름: AWS RDS
- hostname : 생성한 RDS의 엔드포인트
- username/password : RDS 생성시 작성한 마스터사용자 계정정보
→ 생성한 workbench 접속
2) Open a SQL script~ > goods.sql 오픈
- 전체선택(ctrl+a) > 번개표시(실행)
3) 명령어 실행
- show databases;
- use classicmodels
- show tables;
- desc products;
- select productName, productLine, productVendor, buyPrice from products;
5. 실습 - 3Tier로 구성하기(웹 서버와 DB 서버를 따로 사용)
- 이전 EC2 삭제 후 새로운 EC2를 생성한 다음, DB를 설치하지 않고 RDS에 데이터 저장하도록 해서 gnuboard 동작시키기
- OS : Ubuntu 22.04 LTS - MySQL을 제외하고 설치
- DB는 RDS 활용, 설정은 Workbench로 설정
- gnuboard 설치시 Host : 엔드포인트:3306 으로 작성
5.1 EC2 생성
5.2 gnuboard 설치
1) cmd에서 ssh 접속
$ sudo apt update
$ sudo apt install vim
$ sudo apt install apache2
2) RSD 설정 및 계정생성, 권한부여
- EC2 접속 허용으로 RSD 다시 생성(식별자 mj-goods), 퍼블릭 IP설정 불가 → EC2 통해서 접속
$ sudo apt install mysql-client
$ sudo mysql -h [엔드포인트] -u [계정명 : mj_goods] -p
- 접속 후 계정 생성 및 권한 부여
3) 웹 서버에서 사용할 언어 설치
$ sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl git
4) 게시판 소스 다운로드
$ cd /var/www/html
$ sudo git clone https://github.com/gnuboard/gnuboard5 // github의 gnuboard를 통째로 복제
$ cd gnuboard5
$ sudo mkdir data
$ sudo chmod 707 data
6) 마무리
$ sudo apt install net-tools
$ sudo service apache2 restart
5.3 Gnuboard 접속
1) 인스턴스 IPv4 퍼블릭 IP주소 /gnuboard5/ 접속
2) gnuboard 설치하기
- host : RDS 엔드포인트:3306
- User/Password : RDS 생성 시 작성한 마스터사용자 계정정보
- DB명 gnuboard, 웹사이트 관리자 admin/admin1234
3) 관리자 로그인 후 이미지 업로드 → 정상 동작 확인
* RSD 연결 방법
1) Public IP 부여 : EC2와 연결 안됨
2) EC2와 연결 : 지정할 EC2가 필요하므로 EC2를 미리 생성하고 연결해야 함 → workbench 사용 불가
→ 실습 후에는 RDS와 EC2 모두 삭제(종료)
'SK 쉴더스 루키즈' 카테고리의 다른 글
[SK 쉴더스] 클라우드 보안 5일차 (2) | 2022.09.30 |
---|---|
[SK 쉴더스] 클라우드 보안 4일차 (0) | 2022.09.29 |
[SK 쉴더스] 클라우드 보안 2일차 -- 추가 예정 (1) | 2022.09.27 |
[SK 쉴더스] 클라우드 보안 1일차 -- 추가예정 (1) | 2022.09.26 |
[SK 쉴더스] 네트워크 보안 7일차 -- 추가예정 (0) | 2022.09.26 |