클라우드 보안

루키즈 교육 - 1005 학습

김띵똥 2022. 10. 5. 17:50

* 클라우드의 특징

- 확장성, 유연성

- 종량제 : 사용한 만큼 비용을 지불

- Multi-tenancy : 복수 점유

 

* S3 클래스에서 보관 비용 순서 (인출비용은 역순)

 S3 Standard > S3 Standard-IA > S3 One Zone-IA > Glacier instant retrieval > Glacier flexible retrieval > Glacier Deep Archive

 

* VPN (Virtual Private Network) : 네트워크 암호화 통신하는 서비스

- Public Network(공중망) : ISP(Internet Service Provider)들이 제공하는 네트워크 ------> 저렴하지만 안전하지 않음(침해사고 발생)

- Private Network(사설망) : 기업들이 자체적으로 구축한 네트워크    ex) 현대차와 납품업체들간 통신을 위한 선을 설치 ---> 고비용

- VPN(가상의 사설망) : ISP들이 공중망에서 암호화된 네트워크 서비스를 제공하는 것  ----> 저렴하면서 안전함

 

* VPN에서 사용하는 기술

- AH (Authentication Header) : 인증헤더 (인증, 무결성) -----> 믿을 수 있는 상대인가? (인증), 데이터 신뢰(무결성)

- ESP (Encapsulation Security Payload) : 데이터 암호화, 무결성 ----> 데이터를 안전하게 암호화해서 보냄(기밀성), 데이터 신뢰(무결성)

 

* VPN 구현 방법

- Transport : 종단간 암호화, 헤더는 암호화 안됨

- Tunneling : 구간 암호화, 헤더까지 통째로 암호화

 

* 안전한 정도 : ESP Tunnel > ESP Transport > AH Tunnel > AH Transport                  (CISSP시험에서 기출)

 

* RDS (관계형 데이터베이스 서비스)

- Aurora : AWS에서 MySQL, PostgreSQL를 AWS Cloud 환경에 맞게 최적화한 서비스 (여러번 복제를 함) ----> 약간 비싸지만 안정성 높음

  (중요한 서비스를 실행할 때, 안정성이 높고 Cloud에 최적화 되어서 속도도 빠름)

 

* Route 53 (도메인 등록 및 관리 서비스)

- DNS 관련 부하 분산 서비스

 

* Elastic IP (탄력적 IP)

- 고정 퍼블릭 IP주소 => 한번 설정하면 IP주소를 변동없이 그대로 사용할 수 있음 (NLB 할당)

  ex) 도메인 주소와 EIP를 연동하면 안정적인 서비스 가능

 

* AWS을 활용해서 돈을 벌려면? (IaaS/PaaS/SaaS)

- PaaS를 이용해서 SaaS를 만들어서 서비스를 제공하면 됨

- 가격 : IaaS(캠핑) < PaaS(글램핑) < SaaS(호텔)                    ex) SNS를 서비스하려는 Startup들이 PaaS를 이용해서 제공

 

* AWS 도입 사례

 

* Direct Connect : 회사에서 Cloud로 접속하기 위한 안전하게 연결해주는 서비스 (VPN기능) ---> 기업들이 사용하는 전용 통로

  cf. IGW(Internet Gateway) : 암호화 안됨, 공인IP를 통한 공개된 연결 통로

 

* Red Shift : Data Warehouse (대용량 데이터 저장 및 분석)   p.47

  ex) 자동차 회사 : 영업사원들이 계약정보 입력을 할 때 처리는 EC2에서하고 S3에 저장, Red Shift에서 분석하고 분석 자료는 S3에 저장

 

* DynamoDB

- AWS에서 제공하는 NoSQL 서비스

- NoSQL은 SQL형식을 무시하는 Database 방식

- 비정형 데이터를 저장할 때 주로 사용   ex) 로그, 이미지, 쿠키 등등

 

cf. SQL에서는 아래와 같이 정형화된 데이터를 입력해야 함

- char(고정길이 문자)

- varchar(가변길이 문자)

- int(숫자)

 

 

* PaaS

- IT를 잘 하는 사용자(개발자)가 서비스를 만들기 위해서 사용

 

* SaaS

- IT를 모르는 비전문가들이 ID/PW만 입력하면 다 해주는 서비스

 

* AWS 아키텍처 설계 사이트

https://cacoo.com/

 

* Putty

- 서버와 연결할 때 사용하는 클라이언트용 도구

- https://putty.org  ---> chiark.greenend.org.uk(공식 웹사이트)

-----> putty.exe와 puttygen.exe 파일 두개를 다운로드 받음

- putty.exe  :  서버와 연결할 때 사용 (SSH 등)

- puttygen.exe    :  키형식을 변경해주는 도구  ( aws_key.pem  ---->  aws_key.ppk  )

- ppk (Putty Private Key)형식으로 변경하면, 400 설정 안해도됨

 

실습) aws_key.pem 파일을 aws_key.ppk로 변환해서 접속해보기

- puttygen.exe를 실행해서

-File > Load > aws_key.pem (원래 사용하던 키)를 선택

- Save private Key를 클릭해서 aws_key 이름을 입력하면  aws_key.ppk 라는 파일이 생성됨

 

- EC2 생성할 때, AMI 검색창에 Bitnami로 검색 (관련성으로 검색하면 가장 위에 있음)

  =>  WordPress Certified by Bitnami and Automattic

* 공인IP주소를 복사해서 웹브라우저에서 열어보면 (퍼블릭 IP 넣어야됌)

http://54.200.232.178//wp-login.php 

cat bitnami_credentials에서 본 ID와 PW를 입력하면 관리자 페이지로 들어가짐

login  as : bitnami

$ cd /home/bitnami

$ cat  bitnami_credentials                           // Database 접속 ID/PW가 보임  => Wordpress의 ID/PW도 동일함

 

- The default username and password is

'user'(로그인할때 사용하는 ID), and 'biM5gsQ1AITz'(로그인할때 사용하는 PASSWORD)

 

 로그인

업로드 성공!

 

* Wordpress 공식 웹사이트

https://ko.wordpress.org/

- 소스코드를 무료로 배포하는 웹사이트

- 다운로드 하면 손쉽게 블로그 사이트를 만들수 있음

- 단점 : 플러그인들 중에 취약점이 발견되는 사례가 많음

   https://www.exploit-db.com/  에서 wordpress로 검색해보면, 취약한 plugin들이 검색 가능함 ---> 설치하면 안됨

 

만일, 보안 컨설턴트라면,

- 고객사의 Wordpress에서 사용되는 플러그인 조사 ----> 취약한 버전인지 확인 ---> 업데이트 혹은 제거 권고

 

삭제 : Bitnami EC2 인스턴스 삭제합니다.

 

* AWS 계정 (p.88)

- 계정을 만들려면, 신용카드를 등록해야 함.

- 아마존 쇼핑몰 계정과는 다름 ----> AWS 자격증 시험 볼때 쇼핑몰 계정으로 로그인해서 시험 볼 수 있음

 

* Root 사용자

- Email 주소 등록 => 소유기반 검증으로 활용 (PW변경 등)

- Root 계정은 업무에 사용하면 안됨, 별도로 계정을 생성(IAM사용자 계정)을 생성해서 권한을 부여하면 됨

- IAM관리 권한을 가진 사용자를 생성해서 Project 팀에 부여하면 됨 (인사권 가진 사람에게 부여, PM등)

 

* IAM 계정

- 일반 사용자 계정을 의미함

- 사용자 그룹 단위로 관리해야 편리함

- 임원 등이 진행상황 체크 및 모니터링 -----> ReadOnlyAccess

 

* Federated User (연합사용자) ★

- 고객사에서 잠깐 보려고 한다면?

- 외부 컨설턴트에게 문제점을 도움받으려고 할때

- Google, Facebook 등 다른 계정을 가진 사용자에게 '임시 접근 권한'을 부여하는 방법

- 업무가 끝나면 권한 제거

 

* AccessKey, SecretAccessKey : Command Line에서 사용자를 인증하는 방식

 => AccessKey와 SecretAccessKey는 ID/PW와 마찬가지이므로 보안 주의해야 함 (절대로 외부에 노출하면 안됨!!!)

 

- 확장자가 csv (Comma Separated Value : 값을 콤마로 구분함)

 

* AWS CLI 설치

$ sudo apt update

(비밀번호 : ubuntu )

$ sudo apt install python-setuptools python3-pip -y

$ sudo apt install vim

$ sudo apt install net-tools

$ sudo pip install awscli

$ aws  --version                        // 버전이 달라도 큰 문제 없음

 

(  ---- cache lock -----  :  apt 잠기는 경우 ----> rebooting 하면 해결됨)

$ aws configure

 Access Key ID : 복사해서 붙여넣기

 Secret Access Key : 복사해서 붙여넣기

 Region : (여러분들의 리전 이름)

 Output :  그냥 엔터

 

$ aws  s3  ls                                    // S3의 버킷 리스트가 출력됨

$ aws  s3  mb  s3://고유한이름              

$ aws  s3  ls                                     // 새로운 버킷이 잘 만들어졌는지 확인 (구버킷, 신버킷 두개 보여야 함)

$ aws  s3  ls  s3://구버킷                    // 버킷 안에 있는 파일들이 모두 보임

$ aws  s3  cp  s3://구버킷/파일명.jpg   s3://신버킷/                 // 구버킷의 파일을 신버킷으로 복사하기

$ aws  s3  ls  s3://신버킷

 

참고) aws cli를 사용하는 경우는 반복작업이 많은 경우에 효과적

    ex) 로그 파일 백업 등을 하는 경우, shell script로 만들어서 엔터 한번이면 끝!

 

$ aws  s3  rm  s3://destinyofpuppets/tulip.jpg                     // 버킷안에 있는 파일 삭제

 

* AWS CLI로  EC2 생성하기

- Amazon Linux의 AMI 번호 : ami-0c76973fbe0ee100c                        //  x86으로 선택,  ARM은 선택하면 안됨,  리전마다 다름

 

$ aws ec2 run-instances  \

--image-id   ami-0c76973fbe0ee100c  \                                  // EC2 메뉴에서 확인

--count 1   \

--instance-type t2.micro  \                                                   

--key-name aws_key    \

--security-group-ids  [보안그룹 ID]   \                                    // EC2 메뉴에 보면, 왼쪽 보안 그룹 클릭하고 webserver 참고

--subnet-id  [여러분의 퍼블릭Subnet ID]                                  // VPC 메뉴에서, 왼쪽 Subnet 클릭하고 Subnet ID 복사

 

 

No default VPC for this user.  ----> VPC 메뉴에서 VPC를 기본 VPC로 지정

 

확인) EC2가 제대로 만들어졌는지 확인

- EC2에서 인스턴스 메뉴에서 인스턴스 ID를 복사

 

$ aws  ec2  describe-instances                                            // 전체 인스턴스 보기 (인스턴스ID 확인, 복사)

 

$ aws  ec2  describe-instances --instance-id   [인스턴스 ID]         // 특정 인스턴스 보기

$ aws  ec2  describe-instances --instance-id  i-02c3651634c1dca31

 

* 태그 추가하기

$ aws  ec2  create-tags  --resources  인스턴스ID   --tags Key=Name,Value=[지정할 이름]

 

* mysql_real_escape_string( )함수는 아래 문자열을 만나면 앞에 \(백슬래시)를 붙여서 Escape처리를 함.

\x00, \n, \r, \, ', " and \x1a