카테고리 없음

[2023.04.11 화] AWS MFA 설정, EC2 띄우기, 탄력적IP 생성, CLB 로드밸런서 생성

16비트 2023. 4. 11. 19:45

 

aws 콘솔 로그인
가용영역에 서브네트워크는 네트워크를 분할해 놓은 것이다
VPC라는 네트워크가 있고 서브네트워크로 나누어 놓고 서브네트워크 하나하나를 가용영역에 세팅해놓고 있다
결제 대시보드를 비용관리를 위해 자주 들어갈 것이다. 어제까지 내가 사용한 AWS비용을 볼 수 있다

 

 

- 청구서 : 내가 언제 회원가입하는지 확인할 수 있다
- Free tier : 내가 프리티어 적용받는 서비스를 이용했다면 사용한 양과 한도를 확인할 수 있다

 

MFA 설정

- MFA : Multi Factor Authentication  // 보안자격 증명에서 2단계 인증하기. 
// 인증 방식에는 지식(ID/PW), 속성(OTP), 소유(홍채, 지문) 가 있다. 2가지 이상을 이용한 것
// OTP앱을 지워버리게 되면 AWS에 로그인할 수 없다. 

 

[아이폰 어플 Google OTP]
아이폰 앱스토어에서 Google Authenticator 설치하기 > 실행 > 시작하기 > QR코드 스캔

 

[MFA 설정]
우측 상단 '아이디' 클릭 - '보안자격증명' > 'MFA디바이스 할당' 클릭 > 디바이스 이름 'new-mfa' - 다음 > 'QR코드 표시' 클릭 후 어플로 인증하면 코드가 2번 나오면 입력 > MFA 추가 // MFA코드를 2개 넣는 이유 - 시간 동기를 맞추기 위함. 어플을 지우려면 MFA를 지우고 어플을 지워야 한다
다음부터 로그인할 때 MFA 코드 번호를 입력해야 로그인할 수 있다

 

EC2

[EC2] Elastic Compute Cloud
AWS클라우드에서 확장 가능 컴퓨팅 용량(CPU, RAM)을 제공한다
각종 자원들을 모아서 가상서버로 만들어준다 - Openstack의 Nova
EC2를 사용하면 하드웨어에 선 투자할 필요가 없어 더 빠르게 애플리케이션을 개발하고 배포할 수 있다
EC2를 통해 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능하다
EC2는 요구 사항이나 갑작스러운 사용량 증가 등 변동 사항에 따라 신속하게 규모를 확장하거나 축소할 수 있어 서버 트래픽 예측 필요성이 줄어든다

 

인스턴스(Webserver) 만들기

스팟요청, Saving Plans, 예약 인스턴스, 전용 호스트, 용량 예약 사용안함(비용이 나감)

[인스턴스]
// 인스턴스 시작은 launch(생성)를 의미 // 인스턴스 상태의 시작과 구분해야한다. 인스턴스 종료는 삭제를 뜻함

[인스턴스 유형]  // Openstack의 flavor. aws는 커스터마이징할 수 없다
t2.micro는 무료로 이용할 수 있다  // 이름이 스펙을 뜻하지 않음. 앞의 알파벳은 인스턴스 타입을 뜻함. 알파벳 뒤 숫자는 CPU의 새대 수를 뜻함. 한달에 750시간 무료로 사용할 수 있다

 

[webserver인스턴스 만들기] // 이미지, 인스턴스 유형, 키 페어, 네트워크, 보안그룹, 스토리지
인스턴스 시작 > 이름 'web01' 
> OS이미지(AMI) 'Amazon Linux' - 'Amazon Linux2 AMI'
// AMI는 클라우드 이미지로 qcow2, img와 같이 설치가 필요없다. 복사(스냅샷) 형태로 가지고와서 VM 운영체제로 활용하는 것. iso는 설치가 필요한 파일
// 원하는 이미지를 검색하여 AWS Marketplace AMI탭에서 선택할 수 있다. kali 리눅스는 해킹, 보안관련 어플이 설치된 Debian베이스의 OS 이미지 
// 이미지도 프리 티어 아닌 것은 비용이 발생한다. mac은 유료라서 사용안할거임
// 대부분의 OS이미지는 CPU를 통한 HVM(하드웨어기반 하이퍼바이저)를 이용한다.
// amazon linux는 레드햇7과 centos7을 섞어서 클라우드 이미지로 만든 것. 독자적으로 만든 OS가 아니고 이름을 빌려줌
// Red Hat는 엔터프라이즈용. CentOS는 검색해서 marketplace에서 찾을 수 있다
// Windows는 서버만 제공한다. WIN10은 Azure에서 제공. t2.micro로 운영하기에는 많이 무거움
// CPU x86, arm은 CPU의 종류.

> 새로운 키페어 생성 'new-key' - 'RSA' - '.pem' > 키페어 생성   
// 키페어를 생성하면 new-key.pem이 자동으로 다운로드된다. 키는 D드라이브에 new_key폴더를 생성 후 넣어두기

> 네트워크 설정 '편집' - 'vpc(기본값)' - 서브넷 '가용영역 ap-northeast-2a' - 퍼블릭 IP 자동 할당 '활성화' - 보안 그룹 이름 'web' - 보안 그룹 규칙 'ssh' '내 IP' 'HTTP' '위치 무관' 'HTTPS' '위치 무관' 'ICMP'
// 네트워크 VPC가 172.31.0.0/16. 서브넷은 16비트를 서브넷팅하여 20비트(ip개수 4096) 16개로 네트워크를 분할해놓았다. ip 4091개 사용가능. 보안상과 가용성(이게 큼)의 이유로 분할. 4개의 서브넷만 이용할 수 있고 필요하다면 12개의 서브넷을 더 이용할 수 있다. 각 가용영역 a b c d...는 다른 지역에 위치한다.
// 가상 네트워크에는 브로드캐스팅 기능이 없다. 
// 2a, 2c만 EC2를 만들 수 있고 2b, 2d에는 만들 수 없다. 지원되지 않음
// 퍼블릭 IP 자동할당은 퍼블릭 IP를 무료로 받을 수 있다. db서버를 만들 때는 비활성화해야한다
// 세팅을 다했는데 안되면 보안그룹의 문제일 가능성이 크다
// 위치무관 ip는 0.0.0.0/0으로 표시하고 아무나 접근할 수 있음. 내 ip는 강의실 공유기 ip 106.253.56.124/32 (host-only)로 특수비트이고 퍼블릭 ip(external ip)이다. 이제 WIN10이 내부 ip로 되고 12층 공유기를 사용하는 사용자로 한정한다. 에코서비스란 접속자의 헤더를 보고 ip를 추출해서 화면으로 반환해주는 서비스. 구글에 '내 ip'로 검색하면 확인할 수 있다

> 스토리지(볼륨) '8' GIB - 'gp2' - '어드밴스드' > 종료 시 삭제 '예' - 암호화됨
// gp2와 gp3는 IOPS(초당 input output 데이터 개수) 차이이다. IOPS가 클수록 좋음. gp3가 더 좋음. 프로비저닝된 io2가 제일 좋음 
// 처리량에 최적화된 HDD가 콜드HDD보다 빠르다. COLD 스토리지는 차갑다=느리다. HOT=빠르다
// EBS는 윈도우에서 C드라이브에 해당된다
// 스냅샷은 OS이미지를 복사본으로 가져온 것. 
// '종료 시 삭제'는 인스턴스를 삭제하면 스토리지까지 삭제한다는 뜻 
// '암호화됨'은 디스크를 쉽게 열어보지 못하도록 전송되는 데이터를 암호화시켜 평문이 아닌 암호화하여 키를 가진 사람만 복호화하여 읽을 수 있게 하는 것
// KMS 키'는 데이터를 암호화하는데 사용할 뿐 아니라 디스크를 Attached하는 권한을 부여한다

> 파일 시스템
// 파일시스템하면 파일스토리지가 떠올라야하고 NFS가 떠올라야 한다
// EFS나 FSx 마운트를 보다 쉽게 하기 위한 것

 

 

> 고급 세부 정보 - 사용자 데이터 '#!/bin/bash' 'yum install -y httpd' 'systemctl enable --now httpd' 'echo "<h1>web01</h1>" > /var/www/html/index.html'
// '도메인 조인 디렉터리'란 인증서버를 활성화시키고 접근 제어를 하는 것. Active Directory라는 인증 서버가 있다. 사원에게 ID/PW를 부여하고 중앙 인증 서버를 가지고 전사적으로 회사의 컴퓨터를 통제하는 것. 
// '호스트 이름 유형'은 나중에 프라이빗 IP로 호스트 이름을 지정한다. Resource name은 EC2 이름이다.
// '인스턴스 자동 복구'는 부팅중에 잘못되면 복구해주는 것.
// '종료 동작'은 삭제가 아니라 poweroff이다. poweroff했을 때 인스턴스를 중지할지 종료(삭제)할지 설정
// '최대 절전 중지 방식'은 꺼두는것처럼 보이지만 전원을 키면 빠르게 프로그램을 올리게 하는 것. EC2 비용은 나가지 않지만 EBS 비용은 나간다
// '종료방지'는 인스턴스를 실수로 삭제하는 것을 방지하는 것이고 '중지방지'는 인스턴스를 실수로 끄는 것을 방지하는 것
// '세부 CloudWatch 모니터링'은 인스턴스의 자원을 1분단위로 모니터링하는 것. 기본값은 5분단위로 모니터링한다. 활성화된 경우 추가 요금이 적용됨
// 'Elastic Inference'는 머신러닝을 위한 자원이 가끔 필요할 때 머신러닝 전용 자원이 아닐 때 체크
// '크레딧 사양'은 트래픽이 과폭주할 때 CPU 부족으로 접속이 안되는 상황을 완화시키고자 CPU 성능을 늘려주는 설정. Scale Up.
// '배치 그룹'은 각 가용영역 데이터센터마다 EC2를 전략적으로 배치하는 것. 같은 가용 영역이더라도 건물 배치, 랙 배치를 할 수 있다
// '용량 예약'은 퇴근 후 EC2를 정지하면 CPU, Memory비용이 안나오지만 퍼블릭 자원이므로 누군가 CPU, Memory 자원을 사용할 수 있다. 다음 날 켰을 때 EC2 자원을 사용하지 못할 수 있기 때문에 용량을 예약하는 설정. 켜놓은 것보다 요금은 적게 내어 용량을 확보해놓는 기능
// '테넌시'는 공유된 자원을 사용할지 전용 자원을 사용할지 설정하는 것. 전용 자원을 사용하면 EC2를 끄든 켜든 비용이 나가게 된다
// '메타데이터'는 EC2의 정보를 보다 쉽게 확인하기 위한 데이터
// '사용자 데이터'는 인스턴스를 처음 띄울 때 실행할 스크립트

> '인스턴스 시작' 클릭 > '모든 인스턴스 보기' 클릭 인스턴스 시작을 눌렀지만 페이지가 새로고침됨. 한 페이지에 오래 머물렀기 때문

 

크롬 URL 창에 13.125.179.125 입력해보기 // 웹페이지가 안뜬다

윈도우 CMD에 ping 13.125.179.125 퍼블릭 IPv4 쳐보기 // 핑이 안나간다. 인바운드 규칙을 설정하지 않았기 때문이다

인스턴스 체크 - 보안그룹탭 > 인바운드 규칙 편집 > 규칙 추가 - 유형 'SSH' - 소스 '내 IP'  // Inbound규칙이 없어서 접속이 안됨. Outbound 규칙은 다 허용.
> 규칙 추가 - 유형 'HTTP' - 소스 '내 IP' // 내 IP로 설정하면 휴대폰 LTE로는 접속하지 못함. 공유기를 통해 접속 가능
> 규칙 추가 - 유형 'HTTPS' - 소스 'Anywhere IPv4'
> 규칙 추가 - 유형 '모든 ICMP-IPv4' - 소스 '내 IP' 

 

cmd창에 핑을 치면 잘 나감
URL 브라우저에 ip를 입력하면 web01웹페이지가 잘 뜬다

 

 

 

[인스턴스 중지시켰다 ipv4 바뀌는거 확인하기]
인스턴스 상태 - '인스턴스 중지' 
퍼블릭 IPv4 주소는 무료이지만 인스턴스를 중지시키면 IPv4주소를 반납한다

인스턴스를 중지하고 새로 시작하면 퍼블릭 IP가 바뀐다

 

인스턴스 상태 - '인스턴스 시작' > IP가 바뀌었다 3.36.159.90

 

탄력적 IP

[탄력적 IP]
퍼블릭 IPv4는 생성한 인스턴스 ip를 고정. Openstack에서 Floating IP과 유사함
집에서 쓰는 퍼블릭 IP는 유동 IP이다. 고정 IP를 설정하려면 탄력적 IP를 설정해야 한다
탄력적 ip를 사용안하면 비용이 나감. 인스턴스와 연결해서 사용하면 비용이 안나감
하나의 아이디마다 한 개의 탄력적 IP는 무료이다
탄력적 ip를 인스턴스와 연결하고 ping이랑 web테스트를 해보자
탄력적 ip를 연결하면 인스턴스를 중지하고 다시 시작해도 퍼블릭 ip는 변경되지 않는다
퍼블릭 IPv4 DNS를 URL창에 쳐도 웹페이지가 정상적으로 뜬다
// 사용자 데이터 편집에서 스크립트를 수정해도 적용되는 것이 아니다. 인스턴스를 다시 띄우는 것이 낫다

 

MobaXterm에서 인스턴스 SSH 접근 

[MobaXterm에 접속해보기]
MobaXterm 상단 Session > SSH - ec2-user로 로그인
# ip a // 호스트의 ip. 가용 영역을 2a영역으로 선택했기 때문에 172.31.0.0/20부터 132.31.15.255 사이의 4094개 중에 랜덤하게 하나의 ip를 받음

 

 

인스턴스(webserver2) 만들기

[web02 인스턴스 만들기]
인스턴스 콘솔에서 '인스턴스 시작' > 이름 'web02' 
> AMI 'Ubuntu' - 버전 'Ubuntu Server 20.04 LTS'
> 인스턴스 유형 't2.micro'
> 키페어 'new-key'
> 서브넷 'ap-northeast-2c' - '기존 보안 그룹 선택' - 'web' 선택 // 가용 영역을 다르게 하여 가용성을 높였다
> 스토리지 구성 '8' 'gp2'
> 고급 세부정보 - 호스트 이름 유형 'Resource name'
#!/bin/bash
apt update
apt install -y apache2
echo "<h1>web02</h1>" > /var/www/html/index.html
> '인스턴스 시작' 클릭
// AWS는 Azure와 GCP에 비해 VM 만들어지는 속도가 빠르다
인스턴스 콘솔에 만들어진 web02를 클릭 - 퍼블릭 IPv4를 복사해서 URL에 입력하면 web02 웹페이지가 뜬다
// ip 는 가용 영역을 2c영역으로 선택했기 때문에 172.31.32.0/20 ~ 172.31.47.255/20 대역에서 ip가 만들어 진다

접속테스트

 

 

로드밸런서(CLB) 만들기

[로드밸런서] 클래식 로드밸런서
왼쪽 로드밸런서탭 - 로드밸런서 > 로드밸런서 생성 > Classic Load Balancer '생성' 클릭 
> Load Balancer 이름 'new-elb-clb' - LB생성할 VPC '내 기본 VPC' - 고급 VPC 구성 활성화' 체크, 2a 2c '+' 클릭 > 다음: 보안 그룹 할당
// Gateway Load Balancer눈 고객사에게 특별한 가상화 네트워크가 있어야 한다. 실습이 어려움
// ALB는 HAproxy로 실습 해봤다
// Classic Load Balancer는 VPC전에 EC2-Classic 가상 네트워크가 있었다(지금은 단종). CLB 로드밸런서 기능은 EKS기능을 이용할 때 Pod를 로드밸런싱하는 장치라서 사용된다
// Azure/GCP와 동기를 맞추기 위해서 CLB를 사용한다
// web01과 web02는 내 기본 VPC(default VPC)에 있다
// 내부 로드밸런서는 내부 db서버로 부하분산해야 할 때 사용함. 
// 고급 VPC 구성 활성화는 Load Balancer가 트래픽을 라우팅할 각 가용 영역에 대한 서브넷을 선택. 2a 2c 영역에 웹서버를 만들어주었으므로 2a 2c를 선택해서 라우팅한다

> 보안 그룹 할당 '새 보안 그룹 선택' 체크 - 보안 그룹 이름 'clb' - 유형 - 설명 'clb' > 다음: 보안 설정 구성
// 포트 범위를 80포트로 해놓음으로써 웹 포트를 거쳐간다 소스0.0.0.0/0을 통해 불특정 다수가 접근할 수 있게 한다
// CLB를 위한 보안 그룹을 만들자. 같은 보안그룹으로 놔두면 SSH접속할 수도 있기 때문
// 기존 보안 그룹인 web보안그룹을 선택하게 되면 webserver와 똑같은 보안 그룹으로 묶이게 되어 운영하기 쉽다

> 다음: 보안 설정 구성
// 왜 HTTPS를 이용하지 않고 있냐는 경고. 도메인도 없고 인증서도 없기 때문에 넘어간다

> 초기 세팅값 그대로 - 다음: EC2 인스턴스 추가
// CLB는 web01과 web02에게 주기적으로 헬스체크를 해서 서버들이 정상적인지 확인한다. 
// 상태검사를 주기적으로 해서 정상이 아님을 미리 감지하고 포워드 리스트에서 배제시키고 포워딩하지 않는다
// 포워딩하지는 않지만 상태검사는 계속하면서 10번 연속으로 접속 성공을 하게 되면 정상이라고 판단하고 다시 포워드 리스트에 포함한다
// 임계값 조정은 충분한 경험이 있어야 한다.

> '인스턴스 모두 체크' - 다음: 태그 추가 > 태그는 추가 안함 - 검토 및 생성 > 생성
// 인스턴스가 많을 경우 선별적으로 백엔드 그룹을 설정할 수 있다

로드밸런서 콘솔에서 생성된 elb 클릭 > 인스턴스탭 - OutOfService가 떠있는데 초기의 상태검사를 통과하지 못했다는 뜻(신호를 보냈는데 오지 않는다)이다. 곧 InService로 바뀌게 되는데 InService로 바뀌면 접속을 시작한다
보안그룹 콘솔에서 clb가 강의실에서 clb가 web01 web02로 index.html로 접속해서 판단해야하는데 출발지 IP가 KOSA IP로 설정되어있기 때문에 OutOfService로 뜨고 있었다
인바운드 규칙 편집을 통해서 HTTP '사용자 지정'을 'Anywhere'로 변경한다 clb를 허용할 준비가 되었다. HTTPS '사용자 지정'을 'Anywhere'로 바꿔준다
다시 로드밸런서 - 인스턴스탭으로 가서 확인해보면 InService로 변경되었다

 

인스턴스 삭제하기

[인스턴스 지우기] // 과금 방지
인스턴스 콘솔에서 'web01' 'web02' 체크 - '인스턴스 종료' 클릭
로드밸런서 콘솔에서 'new-elb-clb' 체크 - '작업' - '로드밸런서 삭제' 클릭
탄력적 IP 콘솔에서 만들어 놓은 것 체크 - '작업' - '탄력적 IP 주소 릴리스' 클릭
// EC2 대시보드 콘솔에서 지워야할 리소스를 본다

// 보안그룹과 키 페어는 요금이 들지 않기 때문에 지우지 않는다
// 컴퓨터를 끌 때 AWS콘솔 로그아웃을 꼭 하자. 창만 닫으면 로그아웃 안됨