✏️ 글의 구성

  1. 나는 왜 클라우드 공부를 시작하게 되었는가 (미만 잡담)
  2. 클라우드 자격증과 실무
  3. 어떻게 클라우드의 실무를 배울까?
  4. 클라우드 구축 및 운영 mini 프로젝트









👩🏻‍💻 1. 나는 왜 클라우드 공부를 시작하게 되었는가 (미만 잡담)

현재 전산팀에서 근무를 하면서, IT동향에 대한 파악이 참 뒤쳐진 나다. 클라우드에 대한 관심이 어찌나 없었던건지, 몇달 전만 해도, eks며 docker며 용어들이 다소 생소했었다.

AWS에서는 아래와 같이 회사메일로 종종 온라인 세션 참가 독려 메일을 보내주시는데, 이 메일은 나에게 "이 등신아! 제발 세상을 좀 봐라, 어떻게 돌아가나!!!" 라는 메세지를 주는 것 같았다.
ㅋㅋㅋㅋㅋㅋㅋ..😂

어찌됬건 단순히 재밌을 거 같아서, AWS 온라인 세션을 듣게 되었고,

-> 그 이후로, 클라우드에 급격한 관심이 불타올라서 🔥 ,
급기야 현재 하고 있던 직무에서 클라우드 운영/교육이나 영업 쪽으로 직무 변경을 하고 싶다는 생각을 하게 되었다.

[클라우드 공부를 시작하게 된 이유 (요약)]
1. 투자비 없이 큰 서버나 네트워크, 스토리지를 구축하고 서비스를 만들어간다는 점이 너무 흥미롭고 즐거웠고,
2. 또, 이제는 거의 모든 기업이 클라우드를 사용해 서비스를 한다는 점에서,
=> 클라우드 공부를 한다면, 후에 돌이켜봤을 때 잘한 선택이 될 것 같고,
=> 안한다면 후회할 수 있을 것 같다는 생각에 공부를 시작하게 되었다.







📝 2. 클라우드 자격증과 실무

사실, 클라우드 자격증이 정말 실력을 뒷받침 할 수 있냐고 생각해봤을 때, 프로이상은 그런 것 같고, 그 이하는 그렇지 않은 것 같다. 실질적으로 내가 자격증을 취득해보니, 덤프에서 80프로 이상이 나오고, 덤프의 정답만 외우는 것으로 자격증 취득이 가능했기 때문이다.

물론, 당연히 자격증을 취득하면서, 물론 특정 CSP 사의 시스템이 어떤 서비스를 제공하고, 어떤 느낌인지는 살펴볼 수 있는 정도는 되는 것 같고, 없는 것보다는 있는게 낫지 않냐고 말하면 할말이 없다.어찌됬던 있는게 나을 것 같은데, 실무 실력이 전혀 없이 있는 것은 없는 것과 다를 게 없다는 취지에서 말을 한 것이고, 개인적인 견해일 뿐이라는 점을 미리 밝힌다.

아무튼, 나도 자격증을 취득하여 가지고 있는 입장이므로, 가지고 있는 사람을 비난할 목적은 없다. 혹여나 자격증 취득을 목표로 하고 계신 분 중에 MS 자격증을 염두에 두시고 계신다면, 아래 블로그를 추천해드리고 싶다.

나는 백상님의 블로그 글을 많이 참고하였고, 도움이 되었다. 좋은 정보가 되실 것 같다.

100sang님의 Microsoft Azure AZ-104 취득후기

그외에도 도움을 받은 글들은 아래와 같다.
https://brunch.co.kr/@topasvga/634


아무튼 그래서, 단단한 기초 지식을 위해, 실습부터 차근차근해보면서 탄탄하게 개념을 쌓아가는 과정에서 이 포스팅을 작성하고자 했다. 특히, 나와 같이 클라우드 관련 직무를 희망하거나 나와 같이 entry 레벨에 있는 분들에게 조금이라도 도움이 되었으면 하는 취지 + 기록 및 회고의 차원에서 포스팅을 작성한다.






3. 그럼, 어떻게 클라우드의 실무를 배울까?

=> 나는 "고객사의 클라우드 구축 및 운영"을 해보는 프로젝트(cloud operation)를 진행할 것이고, 포스팅을 할 것이다.

고객사의 클라우드를 구축하고, 운영한다고 하면,우선 클라우드가 뭔지 부터 (이미 알고 있지만) 제대로 짚고 넘어가보자.

☁️클라우드☁️ 왜 쓸까?
=> for 비용 (capex & opex) 절감
=> 물리적인 제약이 없고, 확장성/ 유연성을 제공

조금 더 쉽게 예를 들자면
나는 a라는 솔루션 회사 사장이고, 어쩌다 보니 사업 규모가 커져서, 50명에서 5000명의 직원을 거느리는 정도로 성장했다(?). 그래서, 이를 뒷받침할 여러 컴퓨팅 자원들 (서버, 네트워크, 컴퓨터 등)이 필요하고, 이 컴퓨팅 자원을 모두 구매하려니 어마어마한 초기 투자 비용이 든다(서버 한대 당 가격은, 대충 아래와 같은 가격인데, 하나의 서버랙 안에는 이런 스위치들과 장비들이 20~30개 정도 들어간다. 사실 이 물리적인 장비 구매에 대한 비용만 들어가는게 아니라, 운영비도 들어가야 하기 때문에, 어마어마한 비용이 들어가야하는게 사실이다.)

근데, 갑작스럽게 커진 사업이다 보니까, 투자 비용을 최소화하고 절감하는 것이 굉장히 중요하다는 의견이 내부 통합의견이 되었고, 이에 클라우드를 도입하기로 한다.

한마디로, CSP (Cloud Service Provider such as Microsoft, AWS, Google Cloud, Tencent..) 회사들은 특정 기업들에게 서버 장비나, 네트워크 장비의 구축(provision) 없이, 원하는 만큼 컴퓨팅 자원을 사용할 수 있도록 IDC를 구축해놨다.

그리고 우리는 놀랍게도 정말 매일 같이 클라우드 서비스를 사용한다. (outlook, office 계열 프로그램은 물론, google drive, dropbox 등은 진짜 매일 같이 쓰는 것 같다..)

4. 클라우드 구축 및 운영 mini 프로젝트

🖊 Step 01 . AWS IAM User 생성과 MFA 설정

AWS Cloud 페이지를 딱 처음 들어가면 이것저것 뭐가 참 많은데,
수많은 서비스들(ex.Ec2,s3,lambda,RDS..등등) 중에 하나를 클릭하면 위의 페이지가 뜬다.
로그인 페이지이다.

그리고, "루트사용자""IAM 사용자" 두가지로 들어갈 수 있도록 옵션이 나뉘어져 있다.

여기서 IAM이 뭔지 알아야 하는데,

  • IAM은 Identity Access and Management의 약자이다.

즉, 클라우드라는 것 자체가 다수의 사람들이 사용을 하기 때문에, 완전 풀 권한을 가진 root 사용자와 그 외의 다른 사용자들을 구분하는 것이다.

ex) velog라는 회사에서 개발팀, hr팀, logistic팀 등이 있다고 가정하면, 개발팀에서는 개발팀에서만 액세스하고 열람하고 수정하고 관리해야 하는 특정 인스턴스가 있을 것이다. 즉, 역할 또는 특정 유저를 나누고 권한을 한정하여 보다 쉽고 편하게 관리한다는 개념으로 이해하면 되겠다.

위 화면은 두명의 IAM 사용자를 추가해놓은 화면이다. 본화면에서는 액세스키와 비밀번호 수령날짜와, 마지막 활동 날짜, 그리고 MFA 옵션에 대한 정보를 볼 수 있다.

🙀 IAM 계정 생성 시, 관련하여 유의해야 할 사항

  1. Root계정은 초기에 IAM 계정을 생성할때에만 사용하고, 그 뒤에는 잘 사용하지 않도록 한다.
    (왜? 이 계정에서 또 다른 admin을 생성할 수 있기 때문에 (보안성 측면에서))

  2. AdminAccess 라는 권한은 신중하게 할당해야한다.

  3. 그리고 보안성을 위해 내가 사용하는 IAM 계정에다가 MFA(Multi Function Access) 기능을 설정해놓는 것을 추천한다. - Microsoft Authenticator 또는 Google Authenticator 앱이 있다.
    (핸드폰에서 앱스토어(또는 구글스토어)에서 다운로드 받아서 사용하면 된다.)

🖊 Step 02 . VPC 구축

vpc 구축이라 함은, 클라우드 세계에서 내 컴퓨터를 만드는 일이다.

설명을 덧붙이자면, 우리가 클라우드를 사용하는 이유는 "편리함"을 위해서 일거다.

if (만약)..., airbnb라는 회사가 온프레미스 환경에서 추가적인 증축을 원하는데, 변동성이 있는 비즈니스 일수도 있을 거고, 또는 물리적으로 증축이 어려운 상황일 수도 있다. 이런 것들을 모두 대처할 수 있는 것이 클라우드이다.

매우 간단히 VPC를 구축이라는 것을 설명하자면, 나만의 private 한 IDC (Datacenter) 하나를 만드는 일이라고 보면 된다.

AWS VPC구축과 관련하여 추천할만한 글

VPC는 아래 4가지로 구성된다.
vpc, subnet, routing table, igw

1. VPC
virtual private cloud로, 즉 논리적으로 아애 분리된 가상의 네트워크 환경



2. Subnet(서브넷이란?)
IP블록을 더 작은 그룹으로 분할하는 것

  • 기본적으로 같은 서브넷의 ip끼리만 통신 가능

  • 댜른 서브넷으로 라우팅을 설정해야 다른 서브넷과 통신 가능

  • 보통 Public Subnet & Private Subnet 두 가지로 분류되어, VPC가 구성된다.

  • 인터넷을 사용하고자 하는 리소스는 Public IP 필요하다.

  • Public Subnet: Public Subnet의 특징은 Internet Gateway, ELB, 그리고 Public IP/Elastic IP를 가진 인스턴스를 내부에 가지고 있다. 특히, Public Subnet 내에 있는 Nat Instance를 통하여 Private Subnet내에 있는 instances이 인터넷이 가능하게 한다.

  • Private Subnet: 기본적으로 외부와 차단되어 있습니다. Private Subnet내의 인스턴스들은 private ip만을 가지고 있으며internet inbound/outbound가 불가능 하고 오직 다른 서브넷과의 연결만이 가능하다.

3. Route Table
포워딩 테이블 또는 최적 라우팅정보를 모두 나타낸 표,
네트워크 요청이 발생하면 데이터는 우선 라우터로 달려간다. 라우터는 목적지이고, 라우팅테이블은 목적지에 대한 이정표를 제시한다. 데이터는 무조건, 라우터로 향하게되며, 네트워크 요청은 각각 정의된 라우팅테이블에 따라 작동한다.

아래 사진에 나와있는 인터넷 게이트 웨이를 예시로 들어 설명해보겠다.
여기서 인터넷게이트웨이는 vpc와 인터넷을 연결해주는 역할이고, public subnet B을 예시로 들자면, B의 라우팅 테이블을 보면, 10.0.0.0/16에 매칭되면 로컬에서 트래픽을 처리하는 거고, 매칭되지 않는다면, 그 외의 모든 트래픽은 IGW(인터넷 게이트웨이) 로 보낸다는 의미이다.

  1. IGW (인터넷 게이트웨이)
    VPC와 인터넷을 연결해주는 하나의 관문, public subnet(인터넷에 연결되어 있는 subnet) 에만 사용한다.
  • vpc는 격리된 네트워크 환경이므로, vpc에서 생성된 리소스들은 모두 인터넷 사용이 불가하고, 그래서 인터넷과 연결해주는 관문인 igw를 사용하는 것이다.

VPC생성을 위해서는, 위의 화면에서와 같이 태그, 아이피 주소,테넌시 등의 옵션사항을 넣으면 끝이다!

🖊 Step 03.Bastion Host(=NAT Instance) 생성

Bastion Host 의 정의 : 내부와 외부 네트워크 사이에서 게이트 역할을 하는 host이다.
즉, 보안을 위해 고안된 하나의 host로, 내부 네트워크와 외부 네트워크의 일종의 게이트웨이 역할을 한다고 보면 된다.

Bastion Host는 내부 네트워크를 겨냥한 공격에 대해 스스로 방어할 수 있도록 설계되었고, Private (사설) IP로만의 접근이 허용된 서버를, 외부에서 접속하고자 시도할 경우에, Bastion Host를 경유해서, Private (사설) IP 서버에 접근하도록 설계되곤 한다.

아래 블로그글에 Bastion Host에 대해 잘 풀어서 설명되어 있어서, 이해가 안가는 분들은 아래 글을 참조해주시면 되겠다.
Bastion Host의 이해

그리고, 내가 진행한 프로젝트에서는 NAT Gateway를 비용 문제를 연유로 하여(한 달 사용 가격 = $0.059(시간당 사용 가격) 24 31 * 2 = $43.896) NAT Instance를 bastion host로 대체 사용하였다.

이 프로젝트에서는 NAT Gateway를, 비용문제를 이유로 하여, NAT Instacne로 대체했다. 따라서, NAT Gateway에 대한 개념을 잠깐 짚고 넘어가겠다.

NAT Gateway란?
private 서브넷이 인터넷과 통신하기 위한 outbound 인스턴스이다.

📍 (중요) 헷갈리는 개념 정리1 (inbound vs outbound 정리)**

인바운드 아웃바운드는 어찌됬던 서버 입장에서 생각해야 한다.
인바운드는 호스트가 요청해서 서버로 들어오는 트래픽 이므로, in 바운드이고,
아웃바운드는 서버에서 호스트로 내보내는 트래픽이므로, out 바운드 트래픽이라고 생각하면 되겠다.

📍 (중요) 헷갈리는 개념 정리2 (NACL vs Security Group(보안그룹))

NACL : 네트워크 ACL이라는 뜻으로, stateless 한 방식으로 인바운드와 아웃바운드 규칙을 모두 제공한다.

  • 특정 IP대역을 허용하고, 거부하는 것이 모두 가능하다.
  • 서브넷 단위로 설정이 가능하다.
  • 주로 특정 포트나 소스의 허용을 위해 사용한다.

Security Group : 보안그룹, stateful 한 방식으로 인바운드와 아웃바운드 규칙을 모두 제공한다.

  • 인스턴스 단위로 설정이 가능하다. (좀 더 섬세한 설정이 가능하다.)
  • 주로 특정 ip를 차단하는 데에 사용한다.

😇 여기서 잠깐!
나와 같이, mac os (맥북)에서 aws-ssh 연결 및 실습 등을 진행하는 사람들은 ip 주소 확인이 필수 일텐데, 사설 ip는 윈도우 os에서와 동일하게, ipconfig 명령어를 통해서 수행할 수 있다. 약간은 다르다

1. 터미널에서 찾아보는 방법

ifconfig | grep inet

2. 그래픽 환경(GUI화면에서 찾아보는 방법)
apple 메뉴에서 애플 로고 > 시스템 환경설정 > 네트워크 > 연결되어있는 와이파이명 아래에 ip주소가 나타난다.

참고로, 우리가 일반적으로 윈도우 os의 cmd창에서 ipconfig해서 찾아보는 ip주소는 사설 ip주소이다.

우선, bastion host 계정을 생성하기 위해서,ec2-user로 로그인한다.
그리고, mission-key.pem (public 키 형식으로 최초 발급받는 키)로 들어가고, 추후에는 🔐 가 아니라 비밀번호를 입력해서 접속할 수 있게끔 설정을 바꿀 것이다.

chmod 600 ~/downloads/mission-key.pem       // rwe 권한변경

키 파일의 rwe(읽기쓰기실행) 관련 권한을 600으로 변경해준다.

ls -al                     // rwe 권한이 잘 변경되었는지 확인

권한이 잘 변경되었는지 -al 옵션을 붙여서 실행해보고, -rw---------@으로 성공적으로 바뀌었음을 확인한다.

참고할 만한 자료 - 리눅스 rwe 권한 관련

ssh -i 키 파일이 위치하는 경로 풀 패스 ec2-user(혹은 admin 혹은 user가 설정한 유저 네임@퍼블릭 dns address 또는 퍼블릭 ip주소

ex) ssh -i ~/Downloads/mission-key.pem ec2user@15.165.148.224

맥 os에서 터미널을 이용해서 ec2 서버에 접속하는 커맨드 명령어
.
.
.

뒤에, The authenticity of host 'ec2-15-165-148-224.ap-northeast-2.compute.amazonaws.com can't established. ECDSA key fingerprint is SHA256:7rbLWT5M3zxn~. Are you sure you want to continue connecting (yes/no/[fingerprint])?

관련 커맨드가 의미하는 바 찾아보기 -->

근데 모르겠는데 이렇게 뜰 때는 yes를 치고, authentication 무시하고 들어가는 것 같음. 방법론적으로 이 키로 들어가는거 맞아? 라고 물어보는건가..

이렇게 하면 ec2 서버에 성공적으로 접속 가능함.

아까 말했던 것처럼, 우선 os 계정을 생성 한다.
admin이라고 이름을 넣을 것이다.

useradd admin                      //os 계정 생성
passwd admin

id와 pw모두 admin으로 설정하고, 엔터를 치면, 새로운 패스워드를 입력하게끔 프롬포트가 뜬다. 참고로, passwd policy가 있어서, id명이 패스워드에 포함되거나, 우리가 흔히 생각하는 policy와 맞지 않으면, 패스워드로서 설정할 수가 없다.

제대로 설정을 하고 생성된 계정을 확인하기 위해 아래와 같이 명령어를 입력한다.

cat /etc/passwd                      //생성된 계정을 확인

cat = concrecate로, 리눅스에서 아주 흔하게 쓰이는 명령어이고, 조회/열람/화면에다가 뿌려주는 역할도 하고 대상 1, 대상 2를 같이쓰면 복사의 기능도 할 수 있다. Linux가 학부 수업 때 이후로 좀 오랜만이다.

리눅스 기본 명령어에 대한 정리를 잘 해놓으신 분의 포스팅이 있어서, 혹시, 리눅스 기본 명령어에 대해 알고 싶으신 분은 아래의 포스팅을 참조하시면 될 것 같다.

리눅스 기본 명령어 모음






생성한 admin 계정에도 ec2-user와 동일하게, sudo권한을 부여하고, 비밀번호 없이 명령어를 수행 가능하게끔 설정하기 위해서 아래와 같이 명령어 입력을 수행한다.


sudo -i                               // 루트로 계정 변경
vi /etc/sudoers.d/cloud-init   //ec2-user와 동일하게 권한 부여
admin ALL = (ALL) NOPASSWD : ALL     // 파일 저장

참고로, vi editor에서 입력은 i, 빠져나오기는 esc 이고, 종료위해서는 :wq!을 입력을 해야 한다.

굉장히 간단한 vi 편집기 사용이지만, i모드에서 :wq!을 입력했더니, 자꾸 종료가 안됬다. 그래서, 관련해서는, 헷갈릴 때 아래의 포스팅을 참고하면 좋다. 순서가 그림과 함께 잘 설명되어있다 !

vi 편집기 - i,:wq!








그 다음은, 비밀번호 입력 방식을 통한 로그인 방법 변경이다.

vi /etc/sudoers.d/cloud init       //루트로 계정 변경
cat /etc/sudoers.d/cloud.int.      // 그 안에 내용을 보겠다는거

PasswordAuthentication yes    //이부분 주석 해제 #PasswordAuthentication no    //이부분 주석 설정 후 파일 저장

service sshd restart//sshd         //데몬 재시작

이렇게 하면 정상적으로 admin os 계정 생성, 그리고 비밀번호 입력을 통한 접속 방식 변경이 끝난다.






다음 편에는, 쿠버네티스(k8s) 환경을 구축하고, 클러스터와 노드 그룹을 생성하고, 구축된 쿠버네티스 환경에 Nginx 서비스를 배포해보는 과정을 포스팅해보겠다..!

profile
행복과 성장에 대해 고민하는 사람🤓 , 포스팅 주기가 잦지 않을 수 있습니다만, 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글