공부/클라우드 보안

10월 06일 클라우드 보안 7

마준123 2022. 10. 7. 00:23

With 그림으로 이해하는 AWS구조와 기술 ( http://www.yes24.com/Product/Goods/102368122 )

 

* 인증
 = 다단계 : 1차 인증 후에 2차 인증을 하는 방식 (종류와 관계없음)   ex) i-pin
 = 다요소 : 서로 다른 종류의 인증을 하는 방식                                  ex) 계좌이체 : 공인인증서+비밀번호+OTP

* AWS에 회원 가입을 하면 계정 생성 (Root 계정)   p.100
 = Root 계정으로 사용자 생성 ----> IAM계정(User, 사용자)
 = Role(역할)은 서비스나 프로그램에 부여함
 = Policy(정책)을 Role or User에게 부여함

* CloudWatch
 = 리소스를 Monitoring 하면서 상태를 Graph로 표시 
 = 서비스 지표, 로그 등을 수집, 기록
 = 임계값을 넘으면 특정 동작이 일어나도록 설정   ex) 10만원이 넘으면 Mail로 보내라
 = CPU 사용률, 볼륨의 읽기 쓰기 횟수나 바이트 수, 네트워크 송수신 패킷 수 등 감시

* AWS CloudTrail 
 = 감사 서비스를 활성화하면 '누가' 어떤 리소스에 접근했는지도 기록으로 남길 수 있음

* 감사(Audit)
 = 위험(Risk)를 줄이기 위해서 통제(Control)를 사용해야 함   
 = 통제(Control)의 적절성을 평가하는 것이 감사(Audit)
 = 기록을 추적(증적:Trail) ----> 감사할 때 증거를 추적하는 것을 Audit Trail이라고 함
 = 클라우드에서 발생하는 모든 행위를 기록하고 추적하는 서비스 ----> CloudTrail이라는 서비스를 제공

 

* EC2 요금체계
 = On-Demand : 필요할 때 사용하고, 필요하지 않으면 종료, 할인이 없음
 = Spot Instance : 경매형식, 가장 높은 가격을 제시한 고객부터 EC2를 사용하게 해줌 
      수요와 공급에 따라 시세가 책정됨 ----> 시세 이하의 금액을 제시한 EC2는 절전/중지/종료
      적절한 사례 : 급하지 않은 업무 처리, 연산 등에 적합   ex) 빅데이터 분석, 변환 작업 등
      저렴하게 사용 가능하다는 장점이 있음
 = 예약 인스턴스 : 약정, 장기간 사용하기로 하고 할인을 받을 수 있음

* AMI (Amazon Machine Image) : 아마존 클라우드에서 사용하기 위해서 만든 가상머신 이미지

* 저스펙 type을 사용하다가 고스펙 type으로 바꾸는 것은?  Scale up   <------> Scale down

* HDD와 SSD의 차이점 (속도가 차이나는 이유는?)
 = HDD는 기계식 : 모터+원판+헤드 -----> 속도 느림
 = SSD는 전자식 : 반도체 장착   --------> 속도 빠름

* EBS (p.133)
 = 가상머신의 Disk (선택 : HDD or SSD)
 = 부트 섹터, 운영체제, 데이터 저장 가능(가격 문제)
 = 가상머신에 부착해서 사용하다가 따로 분리해서 별도로 보관할 수 있음

* Key Pair 사용방법
1) 윈도우에서 사용하려면, 상속제거하고 Windows사용자만 읽기 권한을 부여해야 함
2) 리눅스에서 사용하려면, chmod 400

3) Putty에서 사용하려면, ppk로 변환해서 SSH>Auth에서 ppk파일 첨부해서 로그인  
4) 윈도우 서버에 RDP로 로그인하려면? 암호로 변경해서 RDP의 패스워드에 입력

* EIP(탄력적IP) 
 = IPv4 주소는 부족함(한정된 자원)
 = EIP를 확보해놓고 사용하지 않으면? 비용청구됨(페널티 비용)  ----> Release해서 다른 사용자가 사용할 수 있게함
 = 사용자당 5개까지 사용가능 (추가 요청을 하면 심사후에 제공)
 = NLB등에 할당하는 경우에는 비용이 별도로 청구되지 않음 

* IPv4주소 부족하기 때문에 URL방식 사용 권장  ex) ALB의 URL경로

* Snapshot
 = 시스템의 상태를 이미지로 만들어서 저장
 = AMI이미지로 저장해서 사용 가능  ex)오토스케일링에서 사용

* Auto Scaling
 = 일정개수를 유지하는 방식
 = Target Tracking : CPU의 사용률을 지속적으로 일정수준으로 맞춤 ----> EC2가 자동으로 증가 또는 감소

* ELB (ALB, NLB)
 = Listener (들어오는 곳)에 설정하는 것은? 프로토콜과 포트를 설정 
 = Target Group (분배대상) : EC2를 직접등록 또는 그룹으로 설정  (그룹으로 설정할 때 Auto Scaling그룹을 설정할 수 있음)

* CloudFront (p.196)
 = 콘텐츠를 배포하는 서비스, 대용량 Cache 서비스
 = 고객이 전세계에 많이 있고, 콘텐츠를 많이 가지고 있는 사업자가 주로 이 서비스를 이용함    ex) 넷플릭스 ( 유튜브는 구글 클라우드를 쓰겠지 )

 

* Netflix
 = 드라마, 영화, 애니메이션 등을 S3 Bucket에 저장해놓음
 = 전세계의 수많은 고객들이 같은 영화를 보려고 합니다.  ----->  Cache (임시보관) 서비스 필요함 ----> CloudFront
 = 원래는 자체 데이터센터를 보유하였으나, 10년에 걸쳐서 순차적으로 AWS로 Migration을 했음 (현재는 데이터센터 없음)

* 인터넷 게이트웨이(IGW)  p.220
 = 양방향 통신이 가능  (인터넷에서 AWS VPC에 들어올 수 있고:Inbound, AWS VPC에서 인터넷으로 나갈수도 있음:Outbound)

* NAT 게이트웨이 p.221
 = Inbound(인터넷-->AWS VPC)는 안되고, Outbound(AWS VPC-->인터넷)는 가능  (공유기와 비슷)
 = 어떤 경우에 적합할까?  외부에서 접근할 필요 없는 Database Server가 업데이트를 해야하는 경우에 적합 

* 보안 그룹과 NACL (네트워크 ACL) p.223 표

* ENI (Elastic Network Interface) : AWS에서 제공하는 가상의 랜카드(NIC : Network Interface Card) ---> MAC주소들어있고, IP할당 가능

* VPC 엔드포인트
 = 인터페이스 엔드포인트 : ENI를 연결하는 방식 (개별적인 연결)
 = 게이트웨이 엔드포인트 : 네트워크를 연결하는 방식 ---> 라우팅테이블에 등록

* VPC  (p.231)
 = 한 사용자가 VPC를 여러개 만들수 있음, 다른 사용자의 VPC도 있음
 = VPC와 VPC를 연결하려면? VPC Peering                          

( Peer : 동료    ex. P2P Network)
 = VPC Peering은 VPC와 VPC를 1대1로 연결하는 방식 ---> VPC가 많으면 복잡
 = Transit Gateway를 사용하면 복잡한 연결을 한방에 해결

* AWS DirectConnect
 = AWS VPC와 기업의 네트워크를 연결하는 전용선(암호화 지원)
 = 안정적이고 빠르고 약간 비쌈

* AWS VPN
 = 저렴하지만 인터넷을 거쳐서 연결되다보니 네트워크 품질과 속도를 보장못함

* Aurora (p.250)
 = MySQL, PostgreSQL(포스트그레스큐엘)과 호환 가능
 = AWS에 최적화해서 속도가 빠르다

* AWS에서 DB사용하는 방법
 = Aurora : AWS에서 자동 복제, 최적화 등등 (가장 추천)
 = RDS에서 사용자가 설정
 = EC2에 MySQL, Oracle 설정 (비추) ----> 관리문제... 고객이 직접 관리???

* 키밸류 데이터베이스 (p.257)
 = Key Value Store (KVS) : NoSQL 방식
 = 장점: 형식에 구애받지 않고 데이터를 입력할 수 있다, 데이터에 대한 Access가 빠르다.
 = 빅데이터와 IoT 같은 대용량 데이터를 빠르게 처리

* ElastiCache
 = 인 메모리 데이터베이스 (빈번하게 읽고 쓰는 데이터는 일시적으로 메모리에 보관하는 방식)  ----> 속도 무지 빠름
 = Redis, Memcached와 호환 가능

 

* Lambda (p.270)
 = 람다 함수라고 부름 (Lambda Function)
 = 간단한 프로그래밍(5분 이내)으로 단순 반복 작업을 여러번 수행하는 경우에 적합함
 = 어떤 특정행위를 Trigger(방아쇠)로 등록해놓으면, 특정행위가 발생될 때 Lambda함수가 동작함
   (이미지 업로드하면 람다함수가 동작하면서 크기를 줄여서 저장)

* Lambda 사용 사례
 = 쇼핑몰 담당자가 원본 사진을 업로드하면, 람다가 썸네일을 만들어서 S3등에 저장
 = 일반 게시판 사용자들이 사진을 업로드하면 사진의 크기를 일정크기로 줄여서 S3에 저장
 = 비밀번호 잊어버린 사람들이 휴대폰 본인 인증을 하려는 경우, 본인 확인 프로세스 

실습 1 )
 = AWS CLI를 이용해서 EC2를 생성하고, Wordpress 사이트를 만들어보기
 = 어제처럼 Bitnami_lamp 처럼 다 만들어져 있는 AMI를 사용하면 안됨
 = Amazon Linux만 설치하고, PHP+MariaDB+Apache2+Wordpress 설치 
 = RDS는 하지 말고, 2Tier로 구성하기
 = 블로그가 나오면 이미지 업로드까지 해서 이미지 Publish 되면 성공!

 

           

 * 아마존에서 Amazon Linux 인스턴스 생성 ( 잘 모르겠으면 10월5일 클라우드 보안 6 참조 )

m@mvm:~$ aws --version                                                                                     //버전확인 ( 사실상 깔려있나 확인 )
aws-cli/1.25.87 Python/3.10.6 Linux/5.15.0-48-generic botocore/1.27.86            //잘 깔려있다고 알려줌
m@mvm:~$ aws configure                                                                                    // cli접속
AWS Access Key ID [****************OZMG]: 계정 Access Key ID 입력
AWS Secret Access Key [****************OtWr]: Secret Access Key 입력
Default region name [ap-northeast-3]: ap-northeast-3                                               // 리전 선택
Default output format [None]:                                                                                    //그냥 엔터
m@mvm:~$ aws s3 ls                                                                                                 //접속완료

m@mvm:~$ aws ec2 run-instances \                                      //인스턴스를 만들겠다
> --image-id ami-0953215c6a0ce5164 \                                 // 이미지 id입력
> --count 1 \                                                                             // 사실 이건 정확하게는 뭔지 모르겠음
> --instance-type t2.micro  \                                                    // t2.micro
> --key-name 키이름    \                                                          // 키 이름 입력
> --security-group-ids 보안그룹ID \                                            //보안그룹 ID
> --subnet-id 서브넷ID \                                                            //서브넷 ID 

 

인스턴스가 생성되었다.

 

 

 * 이제 ssh로 Amazon linux로 들어가보자

 

$ sudo  yum  update  -y                                     // -y는 미리 yes로 설정
$ sudo  yum  install  httpd                                  // 아파치 웹서버 설치
$ sudo  amazon-linux-extras  install  -y  lamp-mariadb10.2-php7.2  php7.2          // lamp : Linux 용 Apache2 MySQL PHP( 웹서버 세트)
$ sudo  yum  install  -y  mariadb-server
$ sudo  systemctl  start  httpd                             // 아마존 리눅스에서는 아파치 시작명령을 사용해야 아파치가 시작함
$ sudo  systemctl  enable  httpd                          // 부팅할 때마다 시작하도록 등록함
$ sudo  usermod -a -G apache ec2-user                 // 아파치 그룹(-G apache)에 ec2-user를 추가(-a : add)함
$ sudo  chown -R ec2-user:apache  /var/www           // 웹서버 루트 디렉토리(/var/www)의 소유권을 apache그룹의 ec2-user로 변경함
$ sudo  chmod 2775  /var/www                             // 웹서버 루트 디렉토리의 권한을 2775로 변경(other는 read와 executable만 가능)

 

 

 = 여기서부터는 아마존 공식 자습서를 참고하였다 https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/hosting-wordpress.html

 

 

$ wget https://wordpress.org/latest.tar.gz//최신 wordpress 패키지 설치

$ tar -xzf latest.tar.gz              //압축해제

$ sudo systemctl start mariadb                //db시작

$ mysql -u root -p                                     //로그인

$ CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';        //계정생성

   (계정 만들기인데 그대로 복붙해서 아이디는 wordpress-user로 비밀번호는 your_strong_password로 만들어졌다ㅋㅋㅋ)

$ CREATE DATABASE `wordpress-db`;                  //db만들기

$ GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";

                                //데이터베이스에 대한 전체 권한을 이전에 생성한 WordPress 사용자에게 부여

$ FLUSH PRIVILEGES;       //데이터베이스 권한을 새로고침

$ exit

 

$ cp wordpress/wp-config-sample.php wordpress/wp-config.php     //워드프레스 샘플 카피

$ nano wordpress/wp-config.php                              

$ cp -r wordpress/* /var/www/html/

$ mkdir /var/www/html/blog
$ cp -r wordpress/* /var/www/html/blog/                                       // 솔직히 이 위에 4개는 뭔지모르겠다

 

 = 여기서부터는 공식자습서가 불친절해서 다른 블로그를 참조했다

https://potato-yong.tistory.com/68(여기선 RDS로 하는게 그거만 local로 바꿔주면 될거같다.)

$ sudo vi wp-config.php   //내용 수정

 

DB-NAME = DB의 이름
DB-USER = DB 사용자 이름
DB-PASSWORD = DB 사용자 패스워드
DB-HOST = RDS 데이터베이스의 Endpoint ( 나는 로컬로 할꺼라 localhost )

을 입력해준다.

 * wordpress 디렉터리안에 모든 파일들을 /var/www/html/ 으로 복사해 주도록 하자.
/var/www/html/ 은 웹브라우저가 요청했을 때, 웹 서버가 웹페이지의 파일을 찾는 디렉터리이다.

 

$ sudo cp -r wordpress/* /var/www/html/                   //내용복사

$ sudo systemctl restart httpd                //httpd 재시작

 

 

 

 = 그리고 나서 퍼블릭 IP로 접속을 해본다.

타란~
커스터마이징 한 모습

 

---------------------------------------------------------------------------------------------------------------------------

 

* 실습2
- cacoo.com 에서 AWS Architecture를 그리고, 실제 구현해보기  ----> 캡쳐해서 저장해서 제출 (아키텍처_이름.jpg)
- Auto Scaling + NLB 사용(EIP장착)   -----> 캡쳐해서 저장해서 제출  (과제_이름_01.jpg, 과제_이름_02.jpg, 과제_이름_03.jpg 등) 
- lms.sslc.kr  학습게시판 > 과제에 zip으로 압축해서 업로드
- 5시 30분까지 완성하세요~
- CMS는 자유롭게 선택 : Gnuboard or Wordpress or 간단이미지
- 과제 제출하신 분들은 실습 내역 삭제하세요~ (EC2, NLB, Auto-Scaling, 이미지, 스냅샷, EIP해제 등)

* 블로그는 매일매일 꼭!!! 작성하셔야 해요.  (신의 한수라고 합니다.)

 

 = 실습 2 는 시간이 촉박해서 ( 다 하고나니까 엄청 남긴했지만... ) 사진을 찍을 여유가 없었다.

 = 참고로 나는 고수가 아니기 때문에 간단 이미지로 페이지를 만들었다.

 = 대충 내용을 기억 해 보자면

 

ec2 > index.html변경 > 스냅샷만들기 > 대기 > 스냅샷으로부터이미지만들기 > 오토스케일링 시작구성 > 오토스케일링그룹 > 대기 > 로드밸런서 > 로드밸런서 안에서 대상그룹생성 > 완료

 

--------------------------------------------------------------------------------------------------------------------------------------

 

오토 스케일링 부분은 지난번 실습때도 버벅여서 제대로된 자료가 없는데 이번에도 써볼 여유가 없어서 좀 아쉽다.

나중에 개인 계정으로 실습을 다시 한번 해봐야겠다....