(스토리지 범용 SSD 설명 다시)
복습
* S3(Simple Storage Service)
- 데이터를 저장하는 공간
- 비교적 저렴함
- Public 저장 : 객체(Object : 파일, 디렉토리 등)를 공개해서 많은 사용자에게 공유 가능
- Private 저장 : 외부에 공개하지 않고 비공개로 저장 가능
* Public 저장방법 : 정적 웹사이트
- index.html, 이미지 업로드해서 간단한 웹사이트 구현 가능
ex) 메인페이지가 다운되었을때 에러 페이지 (현재 접속이 되지 않습니다. 등 안내페이지) - DNS 장애기반 라우팅
* Zone : 가상의 데이터센터
- 실제 데이터센터를 임차해서 가상화도구(VMware, Xen 등)을 활용해서 가상의 데이터센터를 만듦
- 우리나라에는 Amazon Datacenter 없고, KT/SKT등을 일부 빌려서 가상화도구 설치, 가상의 데이터센서 만듦
- 가용성을 높이기 위해 1~6개까지의 실제 데이터센터를 하나로 묶어서 Zone을 만듦
- 실제로 어느 데이터센터를 사용하는지는 알려주지 않음(Cloud : 알려줄 필요 없음)
- 이름 : ap-northeast-2a, ap-northeast-2b, ap-northeast-2c, ap-northeast-2d
* Region
- 특정 지역(국가)에서 클라우드 서비스를 하기 위한 단위
- 리전 내에서 온전한 클라우드 서비스 가능
- 다른 리전에 의존하지 않고도 독자적으로 모든 클라우드 서비스 제공 가능
1.1 S3 Class
- 기본적으로 S3에 저장하면 3개 이상의 Zone(가상의 데이터센터)에 분산해 저장 → Availability(재난,재해에 대비)
- Standard : 저장비용이 비싸지만, 언제든지 인출 가능하고 인출 비용이 없음
- Standard-IA(Infrequent Access, 덜 자주 접속) : 저장비용이 약간 저렴하지만, 약간의 인출 비용이 있음
- One Zone-IA : 하나의 Zone에만 저장, 비용이 좀 더 저렴
- Glacier : 오랫동안 보관할 데이터를 저장하는 곳(저장비용은 저렴), 인출 시간이 오래걸리고 인출 비용도 높음
* 수명주기 관리(Life Cycle) → 스케줄링
- 일반적인 데이터의 특징 : 처음에는 자주 사용하다가 시간이 지나면 잘 사용하지 않음
→ 초기에는 Standard에 저장했다가 이후에는 Glacier에 저장하는 방법 등 효율적인 방법으로 저장
→ 위 방법을 자동으로 하는 방법 : S3 Intelligent Tiering
- 거의 사용을 하지 않으면 Archive Access Tier로 이동
문제) 1T를 Standard에 저장하면 한달에 얼마?(GB당 0.025USD) : 약 36,000원
1.2 S3 intelligent Tiering (자동으로 변경)
- Frequent Access Tier : 처음 Tier
- Infrequent Access Tier : 30일 동안 사용을 안할 경우
- Archive Access Tier : 90일 동안 사용을 안할 경우
- 어떤 Tier에 있더라도 사용자의 요청이 발생하면 Frequent Access Tier로 다시 이동
* S3에 버킷을 생성하고 버킷에 데이터를 저장(upload)해서 사용, Bucket 단위로 관리
- Bucket의 이름은? 전역에서 고유하게 설정(전체에서 유일한 이름 사용)
2.1 VPC(Virtual Private Cloud) 만들기
- VPC : 가상으로 만든 나만의 클라우드
1) VPC 생성(VPC만) - VPC 이름 : 이니셜(ex. mj_vpc)
2) IPv4 CIDR 수동입력
3) IPv4 CIDR : 10.9.0.0/16
4) IPv6 CIDR 블록 없음
5) 테넌시 : 기본값
→ VPC 생성
2.2 서브넷 생성
1) 서브넷 생성
2) VPC 선택(mj_vpc)
3) 서브넷 이름 (ex. msub01)
4) 가용영역(Zone=Availability Zone=AZ) : us-east-2a // aws 계정의 region에 맞게 설정
5) IPv4 CIDR : 10.9.1.0/24
→ 서브넷 생성
6) 서브넷 선택 > 작업 > 서브넷 설정 편집
7) 퍼블릭 IPv4 주소 자동할당 활성화 체크(퍼블릭 서브넷으로 변환)
→ 저장
- 퍼블릭 IPv4 주소 자동 할당 : 아니요 → Private Subnet : 인터넷과 연결 x
- 퍼블릭 IPv4 주소 자동 할당 : 예 → Public Subnet : 인터넷과 직접 연결 o, 인터넷에서 접근 가능
* 충돌이 발생하는 경우
- VPC와 Subnet을 모두 지우고 새로 생성 → IP 대역을 다르게 설정하면 해결
ex) VPC : 10.29.0.0/16, Subnet : 10.29.1.0./24
* IP대역의 /16,/24?
/16 : Subnet Mask의 1의 개수 : 11111111 11111111 00000000 00000000 → 255.255.0.0
/24 : Subnet Mask의 1의 개수 : 11111111 11111111 111111111 00000000 → 255.255.255.0
2.3 인터넷 게이트웨이 생성
1) 인터넷 게이트웨이 생성 - 이름 : igw-mj
2) igw-mg 선택 > 작업 > VPC에 연결
3) 사용가능한 VPC : 생성한 VPC 선택 > 인터넷 게이트웨이 연결
2.4 라우팅 테이블 연결
1) 라우팅 테이블 목록 > 생성한 VPC의 라우팅테이블 확인 (생성x)
2) 해당 라우팅 테이블 ID 선택
3) 라우팅 탭 > 라우팅 편집 > 라우팅 추가
4) 첫번째 대상 : 0.0.0.0/0, 두번째 대상 : 인터넷 게이트웨이 선택 → 생성한 인터넷 게이트웨이 선택
→ 변경사항 저장
5) 서브넷 연결 탭 > 명시적 서브넷 연결 > 서브넷 연결 편집
6) 생성한 서브넷 체크 > 연결 저장
* 삭제
- Subnet 삭제, Internet Gateway 삭제, VPC 삭제 순서로 삭제
* 인터넷이 안되는 이유
- 서브넷이 Public이 아닐 경우
- IGW와 연결이 안되어 있을 경우
- 라우팅 테이블에 인터넷(0.0.0.0/0 : 불특정 네트워크)연결이 안되어있거나, 명시적인 서브넷 등록이 안되어 있는 경우
- IP 설정을 잘못한 경우
2.5 EC2
1) 인스턴스 시작
- 이름 : gnuboard
- 어플리케이션 및 OS 이미지 : Ubuntu(22.04 LTS)
- 인스턴스 유형 : t2.micro
2) 키페어 생성
→ 키페어가 설치되면 pen 파일이 다운됨 → PC의 접근하기 쉬운 위치에 저장
3) 네트워크 설정
- 네트워크, 서브넷 확인
- 방화벽 보안그룹 생성
- SSH 트래픽 허용 체크 → 내 IP 선택
- 인터넷에서 HTTPs 트래픽 허용 체크
- 인터넷에서 HTTP 트래픽 허용 체크
- 편집 > 보안그룹이름/설명 : web-server
* 선택이 잘못되어있을 경우 편집을 선택해서 변경 가능
- 보안 그룹 규칙 확인
* Security Groups(보안규칙 = 방화벽)
- 보안규칙 설정을 안하면 모든 포트에 접근 가능
- 접근할 수 있는 포트를 제한해야 함
SSH : 나만 접근
HTTP/HTTPs : 누구나 접근 가능
4) 스토리지 구성
- 프로비저닝 : DB 등 민감한 문제가 있는 경우
- 마그네틱 : Glacier
→ 인스턴스 시작
2.6 키페어 보안 설정
- 키 속성 > 보안 > 고급
- 상속 사용 안함 > 이 개체에서 상속된 사용 권한을 모두 제거합니다
→ 컴퓨터 사용자(user)만 접속 가능해야 함
- 추가 > 보안 주체 선택 > 개체 이름에 user 입력 > 이름 확인
- 읽기에만 체크
→ SSH로 접속하려면 반드시 권한을 400으로 설정해야 함
2.7 인스턴스 연결
- 생성한 인스턴스 선택 > 연결
- SSH 클라이언트 탭에 명령 복사
- 윈도우 cmd 관리자 권한으로 실행
- 키페어 파일 저장 위치로 이동 > 복사한 명령어 실행
→ ubuntu 서버 접속 성공
3. AWS의 EC2 Ubuntu 서버 접속
cmd) $sudo apt update
3.1 gnuboard 설치
$ sudo apt install vim
1) 웹 서버 설치
$ sudo apt install apache2
2) database 설치
$ sudo apt install mysql-server
$ sudo mysql -u root -p // MySQL 접속(패스워드 x)
mysql> create database gnuboard; // gnuboard DB 생성
mysql> show databases;
mysql> create user board@localhost identified by 'cyber12#$'; //사용자 및 비밀번호 생성
mysql> grant all privileges on gnuboard.* to board@localhost; // board에게 gnuboard의 모든 테이블에 대한 권한 부여
mysql> exit
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
5) 마무리
$ sudo apt install net-tools
$ sudo service apache2 restart
6) 게시판 설정
- http://34.236.155.180/gnuboard5/ → aws의 region에 퍼블릭 IPv4 주소 사용
- 그누보드 설치하기
- 사용자 board, 비밀번호 cyber12#$, DB명 gnuboard, 웹사이트 관리자 admin/admin1234
* EC2를 계속 켜놓으면 비용 발생 : t2.micro → 시간당 0.0144 USD
* Scale Up : 더 고사양 스펙으로 바꾸는 것
* Scale Down : 더 저사양 스펙으로 바꾸는 것
4. Amazon Linux
- Red hat의 기본 커널에 최소한의 기능만 넣어서 클라우드 환경에 최적화시킨 운영체제
- 가볍고 빠르게 동작 → Amazon에서 많이 사용'
4.1 Amazon Linux 설치
1) 인스턴스 시작 - 이름 : amz_gnuboard
Amazon Linux 선택 (Amazon Linux2, 64비트)
2) VMware - Ubuntu 22.04 LTS 실행
- aws_key.pem 파일을 Ubuntu 로 복사
* 안될경우 Player > Manage > Reinstall VMware Tools (VMware Tool 재설치)
3) linux 터미널에서 키페어 파일 권한 변경
$sudo chmod 400 aws_key.pem
4.2 Amazon Linux 연결 - Ubuntu 22.04 LTS
- 생성한 인스턴스 선택
- 연결 > ssh 클라이언트 - 명령 확인
우분투 터미널에 확인한 명령어 입력 (sudo 사용!!)
4.3 gnuboard 설치
$ 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만 가능)
$ sudo find /var/www -type d -exec chmod 2775 {} \; // 웹서버 루트 디렉토리의 하위 디렉토리가 2775로 되어있는지 확인
$ sudo find /var/www -type f -exec chmod 0664 {} \; // 웹서버 루트 디렉토리의 하위 파일이 0664로 되어있는지 확인
$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
→ 웹 브라우저를 열고 http://IP주소/phpinfo.php에 접속(잘 실행되는지 확인) - ip주소 : 3.88.90.1
4.4 gnuboard 추가 설치
1) DB 설정
$ sudo systemctl start mariadb
$ sudo mysql -u root -p // 패스워드 x
MariaDB [(none)]> create database gnuboard;
MariaDB [(none)]> create user board@localhost identified by 'cyber12#$';
MariaDB [(none)]> grant all privileges on gnuboard.* to board@localhost;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;
2) gnuboard source 코드 다운로드 (git 설치 필요)
$ sudo yum install git
$ cd /var/www/html
$ sudo git clone https://github.com/gnuboard/gnuboard5
$ cd gnuboard5
$ sudo mkdir data
$ sudo chmod 0777 data
$ sudo yum install php php-mariadb php-common php-gd php-fpm php-xml php-json php-curl git -y
- lamp-mariadb10.2-php7.2를 설치했기때문에 php-mysql은 설치할 필요x
$ sudo systemctl restart httpd
3) gnuboard 실행
- http://3.88.90.1/gnuboard5/ 접속 - 생성한 인스턴스의 퍼블릭 IPv4 주소 입력
- gnuboard 설치 : 사용자 board, 비밀번호 cyber12#$, DB명 gnuboard, 웹사이트 관리자 admin/admin1234
- 게시판에 이미지 업로드해보기
* 사설 IP로 접속하면 x (10.x.x.x 는 사설 ip)
참고) AWS 비용 관련
- VPC와 Subnet은 별도 비용 발생 x
- S3는 아주 조금 발생
- EC2는 종료해야함(인스턴스 종료 후 1시간 정도후에 삭제됨)
- S3 - bucket 삭제(내부의 객체(파일)을 모두 삭제한 후 버킷 삭제)
'SK 쉴더스 루키즈' 카테고리의 다른 글
[SK 쉴더스] 클라우드 보안 4일차 (0) | 2022.09.29 |
---|---|
[SK 쉴더스] 클라우드 보안 3일차 (0) | 2022.09.28 |
[SK 쉴더스] 클라우드 보안 1일차 -- 추가예정 (1) | 2022.09.26 |
[SK 쉴더스] 네트워크 보안 7일차 -- 추가예정 (0) | 2022.09.26 |
[SK 쉴더스] 네트워크 보안 6일차 (2) | 2022.09.26 |