* RDS 실습
- Database 서버를 클라우드에서 동작시키고, 이용자는 Database를 사용하기만 함 ----> PaaS
- 장점 : DB서버 관리를 하지 않아도 됨 (DB 대용량으로 교체, 백업, 관리 등을 AWS에서 다 해줌)
- DB는 로드밸런서를 사용하기 어려움 ★★★ : Master DB에서 쓰기를 수행하기 때문(데이터 일관성) ----> 대용량을 사용
Slave DB는 Master DB에서 정보를 받고 사용자들이 읽기 요청을 할 때 처리해줌
- Database에 대한 root권한이 없음 (권한이 높은 사용자 권한만 주어짐)
- Database가 설치된 서버에 대한 통제권이 없음 (OS에 대한 권한 없음)★★
* 서버, 가상머신(EC2), 컨테이너(ECS), Lambda 들이 부족하면? Auto Scaling을 통해서 자동으로 확장 가능, 로드 밸런서(부하 분산장치) 사용
* 컴퓨팅 설비 운영 방식
- On-Premise : 사용자들이 직접 자신의 회사 내에 서버, 네트워크 등을 구성해서 운영하는 것 ex) 국내 은행
- Hybrid : On-Premise와 Cloud를 섞어서 사용하는 방식
- All in Cloud : 모든 서버와 네트워크를 클라우드에 구성하는 것 ex) Netflix
- Multi-Cloud : 여러 회사의 클라우드를 사용하는 것 AWS과 Azure, GCP, NCP등을 사용하는 것
실습준비) 다른 VM Ubuntu에 설정하기
- 지난번에 백업해둔 Ubuntu 22.04 LTS.zip 파일의 이름을 Ubuntu web server.zip으로 변경하고 압축을 풉니다.
- VMware를 실행해서 Player > File > Open을 클릭하고, 새로 압축푼 폴더에서 vmx파일을 선택하고 열기합니다.
- VM이름이 Ubuntu 22.04 LTS로 동일하기 때문에 새로 불러온 VM이름을 변경해야 합니다.
- Edit Virtual Machine Settings에서 Options 클릭, 이름을 Ubuntu Web Server Only로 변경합니다.
실습) Hybrid Server 구축하기
- Ubuntu Web Server only에는 Apache2, PHP등 9개, vim, Gnuboard 설치
- DB는 RDS를 사용합니다. DB에 대한 설정은 Workbench를 활용합니다.
* VM Ubuntu Web Server only에 설정
$ sudo apt update
$ sudo apt install vim
$ sudo apt install apache2
$ sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl git
$ cd /var/www/html
$ sudo git clone https://github.com/gnuboard/gnuboard5
$ cd gnuboard5/
$ sudo mkdir data
$ sudo chmod 777 data
$ sudo service apache2 restart
* RDS에 접속이 안되는 경우
- VPC를 여러분이 만든 VPC로 선택해야 함 (EC2와 연결하는 VPC를 선택한 경우)
- 보안 그룹 설정할 때, db_server로 선택 (3306번 포트를 오픈하도록 설정한 보안 그룹)
- 퍼블릭 IP 활성화
* RDS 삭제
----> 스냅샷 남기지 않고 삭제합니다.
* IAM
* Identification (식별)
- 다른 사용자와 구분되는 사용자의 정체성 ex) ID, ID카드, 사번, 학번, 주민등록번호(사회보장번호) 등
* Authentication (인증)
- 지식기반, 소유기반, 생체기반, 위치기반 ----> 본인임을 인증하는 방식
* Authorization (인가=권한부여)
- 읽기,쓰기,수정,복사,삭제,출력 권한을 업무에 맞게 부여하는 것
* 인증 (Authentication)
- 올바른 사용자임을 증명하는 것 (본인 인증)
1. 지식기반 : 알고있는 것으로 증명하는 것 (What You Know)
- 방법 : 패스워드(=암호), 패스프레이즈(패스워드보다 긴 문구), 암구어, 야구에서 사인 등
2. 소유기반 : 가지고있는 것으로 증명하는 것 (What You Have)
- 방법 : 열쇠(key), 신분증(주민증, 여권, 사원증, 학생증), 카드(신용/체크/현금), OTP, 공인인증서, 휴대폰인증(SMS), 마패/호패, 부러진 칼 등
3. 생체기반 : 생체적 특징으로 증명하는 것 (Who You Are)
- 방법 : 지문, 홍채(iris), 망막, 손바닥(융기선과 골짜기), 손모양, 손등(정맥), 얼굴, 목소리, 제스쳐 등등
4. 위치기반 : 자신이 있는 위치로 증명하는 것 (Where You Are)
- 방법 : GPS, Wi-Fi(IP주소), 통신사 기지국 삼각측량 등 ----> 출석체크(GPS)
* 인증에서 중요한 것은 Multi-Factor 인증을 사용해야 함
=> 네가지 방식중에 최소한 2가지 이상을 사용해야 안전함
AWS에서는 Multi-Factor인증을 권장 : 비밀번호 + 구글OTP, Root계정의 경우 Email로 인증을 추가해서 사용(PW변경 본인확인)
* Root계정을 개인 메일로 등록한 사람이 퇴사하면??? 이메일 회사에 반납 안하면?
=> 구글OTP를 사용해서 Multi-Factor 인증을 사용해야 함 (퇴사한 사람은 구글OTP접근이 안되므로 PW변경할 수 없음)
* Root계정 관리 방법
- AWS 가입할 때, root계정을 회사의 AWS용 계정을 별도로 만들어서 이걸로 등록해야 함 (AWS담당자가 메일관리를 해야 함)
* 프로젝트를 할 경우, root계정을 제공하면 안됨!!!
- 사용자를 생성하고 권한을 부여해야 함
- 권한은 최소한의 권한(Least Privilges)을 부여해야 함
- 권한을 너무 많이주면?? 부정행위나 불법행위의 가능성이 높아짐
- 정보는 꼭 필요한 만큼만 알려줌 (Need to Know) ---> 업무를 수행하는데 필요한 만큼만 알려줌
* 접근 (Access)
- Subject (주체) : 접근을 하는 쪽 ex) User, Program, Process, Cloud Service 등
- Object (객체) : 접근을 받는 쪽 ex) Data, File, Directory, Database 등
- 접근 권한을 부여 : Subject가 Object에 접근하는 것을 통제(Control)
ex) EC2가 로그를 S3에 저장하려면? 접근권한을 모아서 Role을 EC2에 부여해야 함
* 클라우드의 종류
- 클라우드 업체가 책임을 지는 범위 : IaaS < PaaS < SaaS
- SECaaS : Security as a Service (클라우드에서 보안 서비스를 제공하는 것) ex) 건물 출입 (얼굴 정보가 Cloud에 저장), 통합로그인 등
cf. RaaS : Ransomware as a Service (클라우드에서 랜섬웨어를 제공하는 것)
* 계정의 종류
- 사용자(User) : 1인당 1개씩 부여 (여러사람이 하나의 ID를 공유하면? 사고 발생 시, 책임소재를 찾을 수 없음)
- 사용자 그룹(User Group) : 사용자가 너무 많으면, 권한을 일괄적으로 부여하거나 제거할 수 있음
- 정책(Policy) : 세부적인 권한을 모아서 정책으로 만듦
- 역할(Role) : 정책을 모아서 역할(Role)을 만듦 -----> 다른 클라우드 서비스에 부여 (CloudFormation 등 자동화 도구 등) ★★★
* 정책
- Root 계정은 업무에 사용하지 않음
- AdministratorAccess : 모든 서비스에 대해 모든 권한 ------> 최소한의 인력에게만 부여해야 함
- 꼭 필요한 만큼만 제공
ex) 프로젝트에 참여하지 않는 임원이 프로젝트 진행을 보려고하는 경우, 어떤 권한을 부여하면 될까요? AmazonEC2ReadonlyAccess
* Access Key
- Command Line만 사용해야하는 상태에서 로그인 대신 사용할 수 있는 Access key(ID)와 Secret Key(PW)를 부여함
- Amazon의 EC2, S3 등을 Command Line으로 확인, 생성, 관리할 수 있는 방식
- API 연결이 가능 : API를 통해서 다른 Subject 또는 Object와 작업 가능
- 인터넷에 절대 공개해서는 안됨!!! ----> 채굴기가 Cloud에 연결될 수 있음 (시간당 1000만원씩 나옴)
* Bucket을 Public으로 생성하고, 이미지(전체공개)를 업로드 합니다.
실습) Ubuntu에 CLI설치
$ sudo apt update
$ sudo apt install python-setuptools python3-pip -y
$ sudo apt install net-tools
$ sudo apt install vim
$ sudo pip install awscli
* 로드밸런싱
- 가용성(Availability) : 항상 사용 가능한 상태를 유지하는 것
- 서버들의 부하를 분산해주기 때문에 더 많은 클라이언트들이 접속할 수 있음
- 혹시, 서버가 고장이 나더라도 다른 서버들이 응답하기 때문에, 가용성 향상
- 서버에 문제 발생을 확인(Health Check)하는 기능도 있음
* 로드 밸런서의 종류
- ALB (Application Load Balancer) : 7계층 로드 밸런서 ----> URL등을 보고 부하를 분산
- NLB (Network Load Balancer) : 4계층 로드 밸런서 ----> Port번호를 보고 부하를 분산
* 두대의 EC2를 생성하기
- 정상적으로 동작하는 EC2 한대가 필요함 (Apache만 설치, index.html를 vim으로 복사)
(이름은 이니셜_red 로 설정)
- 템플릿을 만듦 ----> 템플릿을 이용해서 이니셜_blue 추가하기
$ sudo apt update
$ sudo apt install vim
$ sudo apt install apache2
$ cd /var/www/html
$ sudo mv index.html index.old
$ sudo vi index.html
i
(게시판에 댓글 복사해서 붙임, Blue Server에서는 red를 blue로 모두 바꿔주세요)
ESC
:wq
=> 웹브라우저로 red server에 접속해보기