클라우드 보안 수업 5일차 (22/09/30)
- Hash Function 활용법
- 출IP, 출Port, 목IP, 목Port 고려해 Hash 값 계산
→ 일치될 경우 같은 서버에 계속 고정해 연결 유지
- ALB와 NLB
- ALB는 URL, HTTP 헤더에 따라 분산, 먼저 출시, Round Robin 지원
- NLB는 목적지 Port를 보고 분산, 나중 출시, Hash Function 지원(Sticky Session), EIP 부여 가능
- EIP (Elastic IP Address)
- 탄력적 IP 주소 (탄력 : 변하지 않는다란 의미로 고정IP란 뜻)
- IP 주소가 바뀌지 않고 계속 같은 IP를 사용할 수 있는 서비스
- 용도 : 도메인 네임에 고정해놓을 때
Bastion Host 생성 실습)
- Public Subnet으로 생성 (Public, Private 모두 존재해야 하긴 함)
- 웹서버로 설정
① 인스턴스 생성
⑴ 이름 : Bastionhost-ksh
⑵ OS : Ubuntu
⑶ 인스턴스 유형 : t2.micro
⑷ 키 페어 : aws_ksh
⑸ vpc : ksh_vpc
⑹ subnet : kshsub01 (public)
⑺ 퍼블릭 IP 자동 할당 : 활성화
⑻ 기존 보안 그룹 선택 후 web_server
② ssh 연결 후 명령어
$ sudo apt update
$ sudo apt install apache2
$ cd /var/www/html
$ sudo rm index.html
$ sudo vi index.html
(어제 작업했던 red server의 index.html 복사 후 넣기)

$ exit

③ 웹서버로 이미지 생성 → 템플릿 생성 후 작업
⑴ 인스턴스 ID 오른쪽 마우스 클릭
⑵ 이미지 및 템플릿
⑶ 이미지 생성
⑷ 이미지 이름 : webser-ksh 적고 이미지 생성 클릭

⑸ AMI로 인스턴스 시작 클릭
⑹ 이름 : Redserver
⑺ 인스턴스 유형 : t2.micro
⑻ 키 페어 : aws_ksh
⑼ vpc : ksh_vpc
⑽ subnet : kshsub01 (public)
⑾ 퍼블릭 IP 자동 할당 : 비활성화
⑿ 기존 보안 그룹 선택 후 web_server
⒀ 인스턴스 시작
⒁ AMI 클릭해 Yellowserver, Blueserver 모두 같은 방식으로 생성

④ 보안 그룹 수정
⑴ 보안 그룹 클릭
⑵ web_server 보안 그룹 ID 클릭
⑶ 인바운드 규칙 편집 클릭
⑷ 규칙 추가 > SSH > 자신이 생성한 vpc로 public subnet 등록 후 규칙 저장 클릭
⑸ 키 페어 Bucket에 업로드 시 일시적으로 public 허용 (업로드 전 권한 클릭해 변경)

⑹ 키 다운로드 후 권한 변경
$ sudo wget [key 객체 URL]
$ sudo chmod 400 aws_ksh.pem
※ 다 한 후 Bucket에서 무조건 삭제
⑤ Yellow, Blue 서버에 접속 (Bation Host에 접속된 상태에서 접속)
⑴ 권한 ubuntu로 변경
$ sudo chown ubuntu:ubuntu aws_ksh.pem // 키 소유권 ubuntu로 변경
$ ssh -i "aws_key.pem" ubuntu@yellow 프라이빗 IPv4 주소 // root → ubuntu 변경
⑵ yellow, blue 서버 바탕 색상 바꾸기
$ cd /var/www/html
$ sudo vi index.html
red → yellow와 blue 변경
⑥ NLB 설정
⑴ 탄력적 IP (EIP) 사용하도록 설정
⑵ 탄력적 IP 주소 할당 클릭 > 할당 클릭
⑶ 로드밸런서 클릭 > 로드밸런서 생성 클릭 > Network Load Balancer 생성 클릭
⑷ NLB 이름 : NLB-ksh
⑸ 체계 : 인터넷 경계
⑹ IP 주소 유형 : IPv4
⑺ VPC : ksh_vpc
⑻ 매핑 : 두 군데의 가용영역에 클릭
⑼ IPv4 주소 : 탄력적 IP 주소 사용 클릭(퍼블릭 서버에서만) / AWS에서 할당(프라이빗 서버에서만)
⑽ 프로토콜 : TCP , 포트 : 80
⑾ 기본 작업 tg-ryb 클릭
※ 대상 그룹 생성 : 인스턴스 > 대상 그룹 이름 : tg-ryb > 다음 > red, yellow, blue server만 체크 > 아래에 보류 중인 것으로 포함 클릭 > 대상 그룹 생성 클릭

⑿ 로드밸런서 생성 클릭
※로드밸런서를 통해 접속하는 방법
- ALB : DNS 경로 통해 접속
- NLB : 탄력적 IP주소가 우선 적용 > DNS 경로를 통해서 접속 (둘중 하나만 됨)
DNS IP 주소로 들어가 새로고침을 할 경우 넣은 세 컬러의 사이트가 나온다
![]() |
![]() |
![]() |
- 오토스케일링
- EC2을 필요한 만큼 숫자 자동으로 늘리거나 줄이는 것 (개수 제한 설정 가능: Max ~ Min)
→ 관리자의 개입 없이 자동 증감
- 가상머신이기 때문에 빠르게 늘리기 가능
- 오토스케일 적용 사례 : 티켓예매(KTS, 공연표 등), 게임, 블랙프라이데이, 수강신청 등
- Scale out : 서버 개수를 늘리는 것 (양적 증대, 양적 확장)
- Scale in : 서버 개수를 줄이는 것 (양적 감소, 양적 축소)
- Scale up : 고사양 스펙으로 변경하는 것 (질적 증대)
- Scale down : 저사양 스펙으로 변경하는 것 (질적 감소)
※ EC2 요금제
- On Demand : 사용자가 필요할 때 시작해서 필요 없을 때 삭제 (할인X)
ex) 이벤트(월드컵, 올림픽, 행사), 프로젝트(시스템 개발) 등
- Spot Instance : 사용자가 구매 가격을 제시하면, 가장 높은 가격을 제시한 고객한테 EC2를 사용하게 해 줌 (경매)
→ 자주 중단될 수 있음, 작업이 계속 미뤄질 수도 있음
ex) 급하지 않은 일 : 데이터 변환작업, 빅데이터를 분석 등
- 예약 인스턴스 : 약정을 하고 요금 지불하는 것 (선불, 월별 납부 가능) → 할인 적용 가능, 선불일 시 추가 할인
→ 장기간 사용하는 서비스 ex) 웹서비스
오토스케일링 with Load balancer (ALB) 실습)
① amazon linux로 ec2 생성 후, apache2만 설치
⑴ 인스턴스 생성 클릭
⑵ 이름 : Amzn_webserver
⑶ 인스턴스 유형 : t2.micro
⑷ 키 페어 : aws_ksh
⑸ vpc : ksh_vpc
⑹ subnet : kshsub01 (public)
⑺ 퍼블릭 IP 자동 할당 : 활성화
⑻ 기존 보안 그룹 선택 후 web_server
⑼ 인스턴스 시작
⑽ ssh 연결
⑾ 명령어
$ sudo yum update
$ sudo yum install httpd
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
$ sudo usermod -a -G apache ec2-user
$ sudo chown -R ec2-user:apache /var/www
$ sudo chmod 2775 /var/www
$ cd /var/www/html
$ sudo vi index.html
(아까 redserver에서 설정했던 index.html 코드 복사, 붙여 넣기, bgcolor=pink로 수정)

$ exit

② 스냅샷 설정
⑴ 스냅샷 > 스냅샷 생성 > 인스턴스 > 인스턴스 ID 선택 > 스냅샷 생성 클릭
⑵ 스냅샷에서 이미지 생성 클릭 > 이미지 이름 : img_amzn_webserver > 이미지 생성 클릭
⑶ 시작 구성 > 시작 구성 생성 클릭
⑷ 이름 : lc-amzn-webserver
⑸ AMI : img_amzn_webserver
⑹ 인스턴스 유형 : t2.micro
⑺ 보안 그룹 : 기존 보안 그룹 선택 > web_server 체크
⑻ 키 페어 : 기존 키 페어 선택 > aws_ksh 클릭 > 시작 구성 생성 클릭
⑼ auto scaling 그룹 생성 클릭
⑽ auto scaling 그룹 이름 : as-amzn-webserver
⑾ 시작 템플릿으로 전환 클릭 > 시작 구성 : lc-amnz-webserver 클릭 > 다음
⑿ VPC : ksh_vpc
⒀ 가용 영역 및 서브넷 : kshsub01, kshsub02 (퍼블릭, 프라이빗 둘 다 넣기) > 다음
⒁ 새 로드 밸런서에 연결 클릭 > 로드밸런서 이름: alb-amzn-webserver > 로드 밸런서 체계 : Internet-facing 클릭
⒂ 기본 라우팅 : 대상 그룹 생성 클릭 > 새 대상 그룹 이름 : tg-amzn-webserver
> 원하는 용량 : 2 , 최소 용량 : 1 , 최대 용량 : 3 > 다음 > 다음 > auto scaling 그룹 생성 클릭
※ Auto Scaling 사용하는 이유
- 장애가 발생하거나 해킹을 당해 인스턴스가 응답을 하지 않는 경우에도 새로운 인스턴스를 생성해서 항상 서비스 가능한 상태 유지
- 트래픽이 높아지면 추가로 인스턴스를 실행할 수 있도록 설정 가능 → Target Tracking (티켓 구매)
- Target Tracking 기법
- 트래픽이 높아지는 경우 사용
- 기준 : CPU 사용률을 70% 지정하는 경우, 70%를 넘으면 인스턴스 추가로 늘림 → 개수 제한 설정 가능
반대로, CPU 사용률이 70% 이하로 내려가면, 인스턴스를 줄이도록 설정하면 비용 절감
Q. 티켓 판매를 하려고 하는데, 예측 크기 조정 정책으로 설정해도 될까?
A. Target Tracking 기법을 사용
- NACL과 Security Group의 차이점 (★)
① NACL
- 서브넷에 배치
- 방화벽 룰셋과 동일 (허용과 거부 설정)
- 위에서부터 내려가면서 적용 (번호 작을수록 우선순위 높음)
② Security Group
- 허용만 설정
- Stateful 방식 (방화벽의 3세대 방식)
- 리턴 트래픽이 허용
- EC2, RDS, NLB/ALB, ECS 등 적용