방학 기간 동안 AWS, 도커, 쿠버네티스, 젠킨스, 리눅스, MSA를 독학으로 부셔버릴 작정이었는데, 어쩌다 수업을 들을 기회가 생겨서 하게 되었다.
총 5주 동안 과제가 나오는데 덕분에 나의 미친 스케줄이 더욱 환장할 스케줄이 완성되어버렸다.
업보 청산을 시작해보자.
✅ 1주차 과제
- 클라우드 환경 구성 (AWS Free tier 계정 활용)
- 쿠버네티스 기반 Elastic Kubernetes Service 운영 전, AWS 클라우드 환경 구축 필요
- 하나의 VPC에 이중화된 subnet 구성 후, Bastion host 생성
- AWS free tier 계정 생성
- AWS IAM 계정 생성과 MFA 설정
- 본인이 사용할 IAM User 생성(AdministratorAccess) 후 MFA 설정 (보안을 위해 Root 계정 로그인 금지)
- 멘토가 사용할 IAM User 생성 (과제 체크용)
- 권한 : AdministratorAccess
- AWS Management Console 액세스 유형 선택 후 비밀번호 재설정 필요 체크
- VPC 구축
- VP CIDR : mission-vpc 10.0.0.0/16
- Subnet
- Public subnet A : 10.0.0.0/24
- Public subnet B : 10.0.1.0/24
- Private subnet A : 10.0.2.0/24
- Private subnet B : 10.0.2.0/24
- Bastion host와 NAT instance 생성과 security group 설정
- NAT AMI(무료 AMI 사용) 이용, t2.micro 타입 NAT instance 생성
- public subment에 생성
- 본인 계정 생성
- 키 방식 로그인 x, 비밀번호 로그인 허용, 계정에 sudo 권한 부여
- 멘토 계정 생성하여 비밀번호 공유(sudo 권한 부여)
- ex2-user 계정 사용 x
- Security group에서 ssh 접속 본인 IP로 지정
- NAT AMI(무료 AMI 사용) 이용, t2.micro 타입 NAT instance 생성
- 자산 현황 excel, 계정 정보, 주간 업무 보고 제출
(미션 카드까지 첨부하면 뭔가 저작권 문제 생길 거 같아서 패스..)
✒️ 용어 정리
- ARB(Architecture Review Board)
- IT 인프라 및 애플리케이션을 위한 효율적이고 효과적이고 포괄적 아키텍처를 계획·설계·구현
- 기업에서 프로젝트 투자 전, 해당 프로젝트가 적절한 아키텍처로 설계 및 비용 산정 유무 검토
- 투심 : 투자 심의
- MSP(Managed Service Provider)
- 네트워크를 통해 여러 기업들에게 network, application, system, e-management 서비스 제공 사업자
- 기본 SI 업체들이 연간 단위 인프라 구축과 운영 및 유지보수를 통합해 대규모 계약으로 수주했다
- 반면, MSP는 인터넷 네트워크를 통해 고객에게 애플리케이션, 시스템 네트워크 등의 서비스를 제공하는 것으로 Pay-as-you-go 형태 가격 정책을 통해, 사용한 만큼 서비스 이용이 가능하다.
- 체계적이고 세밀한 운영 관리 서비스를 고객 지향적으로 제공 가능하다.
- F/U (Follow Up) : 계속 신경쓰면서 진행하라는 뜻. 다음 단계를 진행하라는 의미.
📌 AWS 용어 정리
- 네트워크 / 보안
- 네트워크 = VPC(Virtual Private Cloud, 가상 네트워크망)
- Route53, Direct Connect 등
- 보안장비 = Security Group
- L4 = ELB(Elastic Load Balancer)
- CDN = CloudFront
- DNS = ROUTE5.3
- Pulbic IP
- 변경되는 공인 IP
- Elastic IP (EIP)
- 고정 공인 IP
- IGW (Internet GateWay)
- VPC가 내부망으로 외부와 통신하기 위한 게이트웨이
- IAM, WAF&Shield, Certificate Manager 등
- 네트워크 = VPC(Virtual Private Cloud, 가상 네트워크망)
- 서버
- 서버 = EC2 (Elastic Compute Cloud)
- 람다 (Lambda) : 이벤트 응답으로 코드 실행 (= Serverless Computing)
- 서버 자동 증설 (Auto Scaling)
- 데이터베이스
- RDS = RDB
- DynamoDB = NoSQL
- Redishift = DW(TB 규모)
- ElasticCache = 캐시
- 분석
- Kinesis = 데이터 수집 처리, 실시간
- EMR = 데이터 프로세싱
- Data Pipeline = 데이터 액세스, 변환처리
- CloudWatch, Config, Cloudtrail 등
- 디스크
- 스토리지 = S3 (Simple Storage Service)
- EFS
- 하드디스크 = EBS (Elastic Block Store)
- 서버 이미지 = AMI (Amazon Machine Image)
- Glacier = 저렴한 스토리지
- 스토리지 = S3 (Simple Storage Service)
📌 IAM(AWS Idensitity and Access Management)
- AWS 리소스에 대한 액세스를 제어할 수 있는 AWS 서비스
- AWS 리소스 사용 권한 부여와 제어
- Group Admins는 거의 모든 권한을 부여 받았거나, 솔루션들의 설정 권한, 대금 결제, 신규 계정 생성 등의 권한이 있을 수 있다.
- Group Developers는 개발자별로 자신이 속한 개발 부서 또는 분야에서 사용하는 AWS 솔루션들의 접근 권한을 부여받았을 것이다.
- Group Test는 별도의 설정 권한 없이 실행 권한 위주로만 권한을 받았을 것이다.
- 보안상의 이유(권한이 너무 막강함)로 운영 환경에서 AWS root 계정(처음 회원가입한 계정)사용을 금지.
- 1인 1계정 생성하여 장애 발생 시 책임의 소재를 명확히 함
- IAM 생성할 때만 root 계정 사용(생성한 계정에 AdministratorAccess 권한 부여)
✒️ MFA(Multi-Factor Authentication)
사용자 이름과 암호 + OTP 인증 추가하여 로그인하는 서비스
보안상 이유로 운영 환경에서 IAM 개별 계정에 MFA 설정을 권고한다.
📌 IAM 생성하기
1️⃣ IAM - 사용자 - 사용자 추가하기
2️⃣ 사용자 세부 정보 설정
mento님 전용 계정이라 그냥 이름을 mento로 지었다.
Identity Center가 정확히 뭔진 잘 모르겠지만, IAM 계정을 생성하라고 했으므로 이걸로 선택했다.
찾아보니까 너무 내용이 방대하던데, 아마 더 좁은 권한을 가지고 있지 않을까..? ㅠㅠ
pw는 자동 생성하고, 다음 로그인 시 새 암호를 생성하실 수 있도록 설정했다.
3️⃣ 권한 설정
직접 정책 연결에서 AdministratorAccess(관리자 모드) 권한을 부여한다.
3️⃣ 암호 검색
자동으로 부여된 패스워드 확인이 가능한 유일한 시간이라고 하니, 꼭 어디 저장해서 기억해두자.
우 상단의 계정 토글을 누르면 root 계정의 12자리 고유값이 있는데, 로그인을 위해 필요하니 기억해두자.
4️⃣ IAM 계정 로그인
root 계정에서 로그인 한 후, 위에서 확인한 12자리 혹은 계정 별칭을 입력한다.
마찬가지로 12자리 아이디를 입력하고, 아까 만든 계정으로 로그인 해주자.
난 멘토님 계정 말고, 내 계정을 다시 따로 만들었다.
이렇게 하면 IAM 계정으로 로그인 완료.
5️⃣ MFA
위에 있는 사진의 보안 자격 증명 항목을 클릭한다.
나는 위의 인증 도구를 크롬 확장자 도구에 설치했다.
꼭 저걸 설치해야 하는지는 모르겠는데, 신기한 기능이 있다.
위의 QR 코드 표시를 누르면, QR 코드가 뜨는데 이게 1분 주기로 숫자가 계속 바뀐다.
그걸 저 확장자에 등록해놓으면 볼 때마다 숫자가 바뀌어 있어서 그냥 그걸로 로그인을 수행하면 된다.
여기서도 MFA 코드1 입력하고 1분 뒤에 보면 다른 코드 뜨니까 그거 MFA 코드2에 입력하면 된다.
짜잔, MFA 등록에 성공했다는 화면이 나를 반겨준다.
📌 VPC(Virtual Private Cloud) 구축
✒️ 용어 정리
- CIDR(Classless Inter-Domain Routing) 블록
- CIDR(사이더) = IP 주소 구성(SUBNET ID + HOST ID) / IP 주소 표현(A.B.C.D/N)
- IP 범위를 지정하는 방식 (VPC 내의 자원들은 VPC의 CIDR 범위 안에서 IP 할당)
- Route table의 기본 규칙이 VCP CIDR 블록에서 찾음
- 사설망이 아닌 CIDR을 사용하면 인터넷과 연결되는 라우트 규칙을 정의하더라도 통신 불가
- Subnet
- VPC를 CIDR 블록을 가지는 단위로 나누어 더 많은 Network 망을 구축한다.
- 실제 리소스가 생성되는 물리적 공간
- VPC CIDR 블록 범위 안에서 지정 가능
- 인터넷과 연결되어 있으면 public subnet, 아니면 private subnet
🤔 Multi AZ 사용 이유
하나 이상의 Availability Zone에 유사한 리소스를 동시에 배치하는 기능을 말한다.
AZ는 물리적 공간으로 분리되어 있으므로 이중화 구성을 하여 하나의 AZ에 장애가 발생하더라도 서비스에 문제가 없다.
추가 비용도 들지 않는다.
- Router
- Subnet을 만들면 자동으로 Router를 하나씩 만들어진다.
- External-rt : Public subnet의 라우트 테이블
- Internal-rt : Private subnet의 라우트 테이블
- IGW(Internet Gateway)
- VPC는 격리된 네트워크 환경이므로 VPC에서 생성된 리소스들은 인터넷 사용 불가
- IGW는 VPC와 Internet을 연결해주는 관문
- 목적지의 주소가 10.0.0.0/16에 매칭되는지 확인 후 없으면 IGW로 전송 (default gateway)
💡 Public/Private Route Table을 따로 관리해주어야 한다.
- NAT Gateway
- private subnet에서도 CentOS의 yum, Ubuntu의 apt를 업데이트해야 할 수 있음
- Private Subnet이 Internet과 통신하기 위한 Out-bound Instant
- In-bound : 외부에서 들어오는 트래픽
- Out-bound : 내부에서 발생시켜 외부에서 데이터를 받아오는 트래픽
- Private Subnet은 외부에서 요청하는 In-bound는 차단해도 Out-bound 트래픽은 허용 필요
- Private Subnet에서 외부로 요청하는 Out-bound 트래픽을 받아 IGW와 연결
- Router에게 내부망에 없는 IP로 요청 시, Public subnet의 NAT Instance이 전달받아 요청을 처리해준다.
- 한 달 사용 가격 = $0.059(시간당) * 24 * 31 * 2 = $43.896 (비싸서 NAT instance로 대체)
- Bastion Host(=NAT instance)
- 내부와 외부 네트워크 사이에서 Gate 역할을 하는 Host
- 외부에서 접근 가능하도록 Public IP 부여
- EC2 VM에서 NAT instance 역할을 하도록 설정할 수 있다.
- 원래는 외부에서 Private subnet으로 접근이 안 되지만, 관리자처럼 접근이 필요한 경우 Bastion Host를 이용해 ssh 접속을 허용한다. (보안 기능 필요)
원래는 NAT Instance와 Bastion Host를 따로 만들어야 하는데, 이게 또 돈이라서...하나가 두 개의 역할을 동시에 수행하도록 만들 것이다.
1️⃣ VPC 생성
VPC를 검색해서 생성을 누른다.
과제에서 내준대로 mission-vpc를 하나 생성했다.
VPC 설정에서 "DNS 호스트 이름 활성화"를 체크해주자.
2️⃣ Subnet 생성
여긴 딱히 어려울 게 없다.
새 서브넷 추가해서 총 4개의 Subnet을 구축해주자.
이렇게 되면 Subnet까지 모두 구축이 끝났다.
3️⃣ External Routing Table
라우팅 테이블이 자동으로 만들어져 있는 것이 있다.
VPC 항목을 보면, mission-vpc에 묶여서 생성된 애를 클릭해서 subnet을 엮어주자.
여기서 모든 subnet을 붙이는 게 아니라, public subnet에 대해서만 연결해준다.
명시적으로 보이게 하기 위해 Route table 이름을 External-rt로 변경하였다.
4️⃣ Internal Routing Table
public subnet을 제외한 private subnet을 위한 routing table을 따로 만들어주자.
생성 누른 후에 위랑 똑같이 작업을 해주면 끝난다.
5️⃣ IGW 생성
별 거 없다. 계속 하던 것처럼 대충 만들어주면 되는데, 마지막에 VPC 연결까지 해주자.
External-rt로 돌아와서 라우팅 편집에 igw를 연결해주면 된다.
6️⃣ NAT Instance
instance긴 한데, AMI를 일반적인 강좌와 다른 걸 받아야 한다.
커뮤니티 AMI에서 nat을 검색해서 나온 이미지 아무거나 선택해주자.
서브넷은 반드시 Public subnet으로 선택해준다.
스토리지는 왠지는 몰라도 gp2 하라고 하셔서 했다.
7️⃣ EIP
다른 포스팅에서 이미 다뤘으므로 패스.
EIP 할당 받아서 방금 만든 인스턴스에 연결해주면 된다.
할당 받아놓고 연결 안 하면 요금 청구되니까 안 쓰면 꼭 해제해야 한다.
8️⃣ Private Route Table에 NAT Instance 연결
Private subnet이 Out-bind를 가능하게 하기 위해서 Public subnet에 붙어있는 NAT 인스턴스에 연결해주면 된다.
여기까지 하면 이제 인터넷 통신을 할 준비가 완료되었다!
📌 OS 계정 생성
기본적으로 ec2-user가 제공되긴 하나, 보안상의 이유로 사용을 금지한다.
ec2-user는 워낙 잘 알려진 계정이라, well-known port 번호인 22번 포트로 bot들이 접속을 시도하는 경우가 많다.
만약, 여기서 뚫리면 내 인스턴스는 비트코인 채굴 광산으로 전락하고 돈은 돈대로 지불해야 하는 초유의 사태가 벌어진다.
putty를 이용한 접속 방법은 AWS 카테고리에서 다뤘으므로 패스
ec2-user로 로그인 했으면 이제 os 계정을 만들어줄 차례다.
# sudo -i // 루트로 계정 변경
# useradd (계정명) // 계정 생성
# passwd (계정명) // 비밀번호 입력
# cat /etc/passwd // 생성된 계정 확인
# vi /etc/sudoers.d/cloud-init // ec2-user와 동일한 권한 부여
(계정명) ALL=(ALL) NOPASSWD:ALL // 파일 저장
# vi /etc/ssh/sshd_config // 루트로 계정 변경
PasswordAuthentication yes // 이 부분 주석 해제
#PasswordAuthentication no // 이 부분 주석 설정 후 저장
# service sshd restart // sshd 데몬 재시작
여기까지하고 등록한 계정으로 다시 터미널에 접속하면 무사히 들어와지는 것을 확인할 수 있다.