[AWS 클라우드 Discovery] 02. 확장성과 안정성 높은 서버 만들기

leny·2021년 7월 10일
0
post-thumbnail

💻 서버와 스토리지

서버

서버란, 특화된 어떤 임무를 수행하기 위해 설계된 컴퓨터
어떤 임무를 부여하느냐에 따라, 일반 노트북도 서버가 될 수도 있고, 데스크톱 컴퓨터도 서버가 될 수 있지만, 우리가 일컫는 서버는 고성능의 CPU, 빠르고 고용량의 메모리, 대용량의 디스크를 포함하여, 대용량의 서비스를 빠르게 처리한다.

그래서 일반적인 서버는, 일반 컴퓨터보다 가격이 많이 높으며, 서버용 OS가 설치가 된다.
서비스의 용도에 따라 Unix, Linux, 혹은 Windows Server 등 다양한 서버용 OS를 설치할 수 있으며, 서버의 용도에 맞는 특화된 임무를 수행하기 위한 별도의 S/W들이 설치된다.

우리가 사용하게 될 AWS는 EC2(Elastic Compute Cloud)라는 서비스를 이용해 가상의 서버를 구성하고 필요한 S/W를 설치하여 사용할 수 있다.

하드디스크

알루미늄 합금 또는 강화유리 위에 자성 재료로 박막 처리된 원형 디스크(Platters)들이 원의 중심축에 여러 겹으로 쌓아 올려져 모터로 빠르게 회전시켜 데이터를 저장, 검색, 삭제를 수행하여 영구적으로 저장하기 위해 사용되는 컴퓨터의 주요 장치를 하드디스크라고 부른다.

하드디스크는 스핀들 모터 방식의 기계식 하드디스크와 플래시 메모리 기반의 전자식으로 동작하는 SSD (Solid-State Drive) 디스크가 있다. SSD 디스크는 기계식 디스크보다 향상된 검색속도와 낮은 지연 속도, 그리고 낮은 소음을 가지고 있지만, 기계식보다 용량 대비 비싼 것이 단점이다.

이러한 일반적인 하드디스크는 우리가 흔히 사용하는 Desktop PC에서 많이 사용된다. 다만 서버와 같이 고성능으로 대량의 데이터를 빠르게 처리하기 위해 디스크 어레이 컨트롤러 (Disk Array Controller)와 RAID(Redundant Array Of Independent Disks)와 같은 기술을 활용하여, 디스크 장애 발생 시에도 데이터를 보호하며, 보다 높은 성능을 제공할 수 있도록 구성할 수 있다. Amazon Web Services는 EBS 서비스를 이용하여 EC2에 디스크를 추가하여 서비스를 사용할 수 있다.

⚔ 보안과 방화벽

정보화 사회에서 서버 및 스토리지 등 IT 인프라에 저장된 중요한 정보를 보호하고 지키는 일은 무엇보다 중요하다, 이러한 정보 자산을 보호하고 지키는 데 필요한 것이 바로 보안과 방화벽이다.

보안

보안이란, 단어 자체를 풀어 써보면 "안전"을 지키는 것이라고 말할 수 있다. 안전은 상태이며, 보안이란 활동을 전제로 한다. 결국에는 안전한 상태를 진키는 것을 보안이라고 할 수 있다.

정보보안은 각종 위험으로부터 정보 및 데이터를 안전한 상태로 유지하는 것이다.
AWS에서 클라우드 서비스를 안전하게 사용하기 위해, AWS IAM(Identity&Access Management), 관리형 위험탐지 서비스 Amazon GuardDuty, DDos 보호를 위한 AWS Shield, 악성 웹 트래픽 필터링을 위한 서비스인 AWS WAF(Web Application Firewall) 등 다양한 보안 서비스를 제공한다.

방화벽(Firewall)

방화벽은 원래 자동차에서 객실을 엔진 블록으로부터 분리하기 위한 물리적인 장치로, 자동차 폭발이나 화재가 발생하였을 때 탑승자를 보호하기 위한 것이다.

정보시스템에서 방화벽은 인터넷과 같이 외부 네트워크에 연결되어 있는 내부 네트워크의 중요한 정보자산에 대해 외부로부터 불법적인 침입을 보호하기 위한 시스템을 일컫는다.

외부 사용자 또는 외부 시스템이 내부의 서버 및 자원에 접근하기 위해서는 반드시 방화벽을 거쳐야 하고, 침입이나 공격을 외부에서 시도하더라도 방화벽을 거쳐야 하기 때문에ㅡ 관리자가 이를 탐지하고 방어할 수 있는 시간을 벌 수 있으며, 근본적인 공격 자체를 어렵게 만들 수 있다.

AWS는 자체 방화벽 서비스인 Security Group, NACL, AWS WAF(Web Application Firewall)를 통해 방화벽 서비스를 제공한다.

📙 클라우드 기초 용어

리전 (Region)

물리적으로 위치가 다른 나라들을 대상으로 동일 서버를 사용하게 하면 ,재해 또는 불가항력으로 서버가 정지되었을 때 대처할 수 없어서 서비스를 종료해야 하거나, 물리적 거리로 인해 빠른 속도를 낼 수 없다. 이러한 이유로 아마존은 전세계 주요 국가에 리전(Region)을 구축하여 해당 위치에서 가장 가까운 곳에서 클라우드 서비스를 이용할 수 있도록 서비스를 제공한다. 2020년 기준으로 24개의 리전을 운영하고 있으며, 한국은 2016년 1월 28일 서울리전이 오픈되어, 국내에서도 빠르게 AWS를 이용할 수 있다.

가용영역 (AZ, Availability Zone)

가용영역이란, 우리가 흔히 알고 있는 데이터 센터(IDC)를 말한다.
AWS 하나의 리전에 다수의 가용영역(AZ)을 보유하고 있고, 가용영역이 위치한 데이터 센터는 같은 리전이라도 지리적으로 멀리 떨어져 있다. 가용영역(AZ)이 이렇게 물리적으로 떨어져 있는 이유는, 하나의 가용역이 재해, 정전, 테러, 화재 등의 다양한 이유로 작동 불능이 되더라도, 다른 가용영역(AZ)에서 서비스를 재개할 수 있도록 하기 위함이다. 한국은 서울 리전에 3개의 가용영역(AZ)를 구축하여 운영하고 있다.

엣지 로케이션 (Edge Location)

엣지로케이션이란, Amazon의 CDN 서비스인 CloudFront를 위한 캐시서버들의 모음을 의미한다.

CDN 서비스는 Content Delivery Network의 약자로, 콘텐츠(HTML, 이미지, 동영상, 기타 파일)를 서버와 물리적으로 사용자들이 빠르게 받을 수 있도록 전세계 곳곳에 위치한 캐시 서버에 복제해주는 서비스이다. 콘텐츠를 빠르게 받기 위해 물리적으로 멀리 떨어진 서버에서 다운로드 하는 것보다, 가까운 서비스에 접속하여 다운로드 받는 것이 속도가 훨씬 빠르기 때문에 CDN 서비스는 전세계 주요 도시에 캐시 서버를 구축해놓는다. AWS CloudFront는 가장 빠르게 성장하고 있는 CDN 서비스로 2020년 기준 글로벌 205개의 엣지 로케이션을 보유하고 있다.

🖥 Amazon EC2

Amazon EC2는 Elastic Computing Cloud의 약자로, AWS 상에서 안정적이며, 크기를 조정 가능한 컴퓨팅 파워를 제공하는 웹 서비스를 말한다. 이러한 가상화 서버 (Virtual Server)를 인스턴스라고 부르며, 필요에 따라 한개의 인스턴스에서 수천개의 인스턴스로 손쉽게 컴퓨팅 파워를 확장할 수 있다.

회사에서 물리적인 서버를 도입하는데에는 최소 1개월 이상(경험 상 실제로 해외 서버 구매시에는 더 걸린다^^)이 소요되는 반면, AWS를 도입하면 최소 1시간이면 새로운 서버를 생성하고 서비스를 위한 인프라를 만들 수 있다.

Amazon EC2의 주요 특징

EC2 인스턴스는 사용 목적과 비용을 지불하는 방식에 사용자가 원하는 유형을 선택하여 사용할 수 있도록 구성되어 있다.

1. 인스턴스 유형
인스턴스 유형은 크게 범용(M Series), 컴퓨팅 최적화(C Series), 스토리지 최적화(I Series), GPU 최적화(G Series), 메모리 최적화(R Series)로 나눌 수 있다.

EC2를 이용하는 목적에 따라 인스턴스 유형을 선택함으로서 최적화된 컴퓨팅 파워를 사용할 수 있도록 해준다.

또한, 아래와 같이 본인이 선택하는 EC2 인스턴스의 유형과 사이즈에 따라 최종으로 사용하게 될 인스턴스의 타입을 선택할 수 있으며, CPU Core 수, 메모리 용량, 네트워크 인터페이스의 속도 등을 필요에 따라 선택할 수 있다.

C4.Large (Instance Family=C Instance Generation=4.Instance Size=Large)

2. 인스턴스 구매 옵션
EC2는 사용자의 요구사항에 따라 비용을 최적화할 수 있도록 다음과 같은 구매 옵션을 제공한다.




🗃 Amazon EBS

Amazon EBS는 Elastic Block Storage의 약자로, EC2에 연결되는 Block Level의 스토리지 서비스이다. 즉, "서버에 장착하는 서버용 하드디스크"라고 이해하면 이해가 빠르다.

Amazon EBS는 EC2 인스턴스용 영구 블록 수준의 스토리지 볼륨으로, 안정적이고, 지연시간이 짧다.

Amazon EBS의 주요 특징

  • 크기는 1GB 단위로, 1GB~1TB까지 선택 가능
  • 크기/사용 기간을 기준으로 비용 과금
  • 마그네틱의 경우, 발생하는 I/O 횟수에도 비용 과금
  • EC2 인스턴스와 독립적으로 사용 가능하며, 다른 EC2 인스턴스에 교체가 가능
  • 데이터는 영구적으로 저장되며, 원하는 가용영역(AZ)에 생성 가능함
  • 백업된 스냅샷에서 EBS 볼륨을 생성/복원 가능함 (다른 AZ에도 생성 가능)

프리티어(Free Tier)는 30GB 범용(SSD) 또는 마그네틱을 원하는대로 조합할 수 있고, 2백만 I/O와 1GB 스냅샷 스토리지를 지원합니다. 프리티어는 가입 후 12개월 이후에 종료됩니다.

1. EBS 볼륨 유형

보통 EC2 서비스는범용성이 높고, 가성비가 뛰어난 '범용 SSD'를 사용한다. 다만, 저렴한 비용으로 EC2 서비스를 원한다면 '마그네틱'도 나쁘지 않은 선택이다.

2. EBS 스냅샷 활용

Amazon EBS 스냅샷 기능은 EBS 볼륨의 데이터를 스냅샷(Snapshot)으로 만들어, Amazon S3에 백업 및 보관할 수 있는 기능이다. 컴퓨터의 하드디스크를 통째로 백업할 수 있는 기능이라고 생각하면 편하겠다.

이렇게 백업받은 스냅샷으로 다시 EBS 볼륨을 생성하거나, 다른 EC2로 연결하여 데이터를 복원하는 작업을 수행도 할 수 있다.

EBS 스냅샷은 4가지 특징을 가지고 잇다.

    1. EBS 스냅샷은 스냅샷 진행 과정 중에도, EBS나 EC2 서비스 중단 없이 기존 서비스를 즉시 사용할 수 있다.
    1. EBS 볼륨의 크기 조정에 사용될 수 있다. 보통 Disk의 크기를 늘리는 작업을 수행하는 경우, 기존 Disk를 스냅샷으로 백업한 후, 신규로 장착할 EBS의 크기를 늘려서 볼륨의 사이즈를 늘릴 수 있다.
    1. 스냅샷의 공유 기능을 활용하여 권한이 있는 다른
  1. EBS 성능과 보안성 높이기

🛡 Amazon 보안 그룹(Security Group)

보안 그룹(Security Group)은 인스턴스에 대한 인바운드(Inbound), 아웃바운드(Outbound)의 네트워크 트래픽을 제어하는 가상의 방화벽 역할을 수행한다.

EC2 인스턴스를 시작할 때 각 인스턴스 당 최대 5개의 보안 그룹을 할당할 수 있다.
이렇게 구성된 보안 그룹은 기존의 온프레미스에서 사용되고 있는 방화벽의 정책과 유사한 기능이다.

다만, (중요) 보안그룹은 네트워크 트래픽에 대한 'allow'만 가능하며, 'deny'는 설정할 수 없다. 이는, 보안 그룹이 EC2 인스턴스 수준에 적용되기 때문에 적용되는 룰이며, 차단 기능을 적용하기 위해서는, (중요) VPC 기능 중 하나인 ACL(Network ACL)을 통해 서브넷 수준에서 네트워크 흐름을 제어할 수 있다.

주요 특징 (4가지)

  1. 생성가능한 보안그룹의 숫자와 규칙에 제한이 있다.
    하나의 VPC 당 생성할 수 있는 보안그룹의 개수는 기본 한도 500개이다.
    각 보안그룹 당 추가할 수 있는 규칙의 개수는 50개로 제한되어 있으며, 네트워크 인터페이스 당 5개의 보안 그룹을 적용할 수 있다.
    다만, 필요한 경우, aws support 를 통해서, 한도 증가 요청을 할 수 있다.

  2. 네트워크 트래픽을 위한 'allow' 정책은 있으나, 'deny' 정책은 없다.
    일반적인 방화벽에서는 네트워크 흐름을 제어하기 위한 정책으로 허용정책과 차단정책이 모두 있다.
    하지만 보안 그룹은 allow 정책은 있으나, deny 정책은 없다.
    만일 deny 정책을 적용하기 위해서는 VPC의 기능인 네트워크 ACL(Network ACL) 기능을 이용해야 한다.

  3. 인바운드(Inbound) 트래픽과 아웃바운드(Outbound) 트래픽을 별도로 제어할 수 있다.

  4. 초기 보안 그룹 설정에는 인바운드 보안 규칙이 없다. 그래서 처음 EC2를 생성하고 다른 EC2와 통신하기 원한다면, 해당 EC2와의 통신을 위한 인바운드 규칙을 추가하여야만 EC2 간 통신이 가능하다.









📝Lab1 : EC2와 EBS를 이용해서 나만의 서버 만들기

Lab1 개괄적인 내용 : EC2(Elastic Compute Cloud)를 사용하여, Windows 인스턴스와 Linux 인스턴스를 생성하고 접속하는 방법을 배운다. 생성된 Windows/Linux 서버 시작, 종료 방법과 EC2 Instance에 대한 삭제 방법을 배운다. 본 실습 당연이 AWS 프리티어를 활용해서, 진행한다.

<Windows 서버>
순서 1. 기본 인스턴스 생성하기
free tier에서 사용가능한 t2.micro로 생성했다.

순서 2. Windows 인스턴스 접속하기

생성된 Windows 서버에 접속한다.

참고로 나는 밑에 단계에서 빅 뻘짓을 했는데, Administrator 계정에 접속할 때의 암호는 진짜 내 desktop 의 administrator의 암호가 아니다.
당연히, 생성된 ec2 인스턴스의 admin 계정의 비밀번호가 들어가야 하고, 이는 pem 키를 통해서 해독한 암호키이다.

암호를 복사하는 아이콘을 눌러서 복사한 다음에 붙여넣기 해서 인스턴스 서버에 접속하면 된다!

아래와 같이 ec2 인스턴스- window server에 접속한 모습을 확인할 수 있다.

이제, 이 서버를 시작하고, 정지하고 또 종료해보는 일을 해볼 것이다.

순서 3. 서버 시작 및 정지/ 종료하기

shut down을 눌러서 서버를 정지한다.

아마존 콘솔 페이지에서 "인스턴스" 항목을 확인해보면, 중지된 인스턴스 상태를 확인할 수 있다.

다시 시작하고 연결해보면 또 정상적으로 됨을 확인이 가능하다. (이 과정은 위와 계속 동일하니 생략하겠다. 확인만 해보면 된다)

<Linux 서버>
순서 1. 기본 인스턴스 생성하기

순서 2. 기존 키 페어 선택을 해서 연결할 수 있도록 설정하여 인스턴스 생성을 완료한다.

순서 3. 리눅스 서버가 런칭된 것을 확인할 수 있다.

순서 4. linux instance 접속을 위해서는 일반적인 ssh 접속용 프로그램이 필요한데, putty 라는 프로그램이다. (http://putty.org 로 들어가서 다운로드 한다.)

순서 5. 키 페어 파일을 putty 프로그램과 연결하기 위해서는 putty 프로그램이 설치된 경로 (c\program files\putty)로 이동하여 "puttygen.exe"를 실행시킨다.

순서 6. conversions > import key 를 눌러서 pem 키를 import 한다.


순서 7.
PuTTY로 Import할 Private Key (ppk)의 생성을 위 [save private key]를 클릭한 후에, 다음 항목에서 [without passphrase to protect]에서 [예] 버튼을 클릭한다. 그리고, "AWS_Study_Key.ppk"파일을 로컬 pc에 저장한다.

순서 8. 로컬 PC에 설치된 PuTTY 프로그램을 실행 후 [Connection] -> [SSH] -> [Auth] 메뉴의 [Private key file for authentication] 항목에서 바로 전에 생성한 "ppk 파일"을 선택한다.

순서 9. 접속할 인스턴스 정보를 확인하기 위해 aws console 페이지 접속하여, 인스턴스의 ipv4 퍼블릭 ip 주소를 확인한다.

순서 10. [session] 항목에서 [hostname]에 인스턴스의 "ipv4 퍼블릭 ip" 를 입력하고 [connection type]을 "ssh"로 선택하고, [saved session]에는 "Linux Server"라고 입력한 후, [save] 버튼 클릭 후 하단의 [open] 버튼을 클릭한다.

순서 11. yes 를 누르고, login as : 항목에 ec2-user을 입력하여 인스턴스에 접속됨을 확인한다.

📝Lab2 :보안그룹(Security Group)을 활용하여 보안 강화하기

보안 그룹을 사용하여 앞에서 생성한 linux 인스턴스에 대한 보안그룹을 설정하고, 보안 정책을 적용하는 방법을 배우겠다. 보안그룹은 추가적으로 비용이 발생하지 않고, 프리티어 계정을 활용하여 실습이 가능하다.

순서 1. 본인 PC의 IP주소 확인하기
(url : http://whatismyip.com)

순서 2. 기존 보안그룹 (security group) 삭제하기
인스턴스 페이지에 들어가서, 보안 탭 접속 > 보안 그룹 클릭

인바운드 규칙 편집 (edit inbound rules) 클릭

삭제 클릭 후 규칙 저장

삭제 적용된 보안그룹 규칙이 수정되었다는 메세지 확인

puTTy에 들어보면,보안 그룹을 삭제했기 때문에 아래와 같이 접속 오류가 발생한다.

순서 3. 신규 보안그룹 (security group) 생성하기

유형 ssh, 소스 내 ip로 설정해서 인바운드 규칙 추가 후 저장하기

추가 적용된 보안그룹 규칙이 수정되었다는 메세지 확인

보안 그룹 설정 후 linux instance 접속 시, 정상적으로 접속 가능!

이전에 했던 과정들인데, 다시 차근차근 해보니까 익히는 느낌이 나서 좋고, 훨씬 쉽게 느껴진다!
역시 반복하면 쉬워지는 매직 :)









💵 additionally, 과금에 대해

참고로, instance 를 생성하고 나서는, 인바운드 규칙에서 나의 IP로만 허용을 해놓고, 포트 허용을 전체로 open 해놓으면 안되는데, 아래의 블로그 글을 보면 바로 이해가 된다.

aws 요금으로 1000만원 청구된 사례

외부에서 공격하는 것은 물론, 프리티어를 활용해서 실습해보고 나서, 인스턴스를 삭제하지 않고 그냥 내비두게 되면, 생각보다 많은 요금이 청구된다.

실제로 청구되어도, 너무 염려할 필요는 없는데, 나도 아래와 같이 메일을 써서, 실제로 프리티어 기간외에 사용한 인스턴스에 대해서도 환불이 가능하다는 답변을 받았기 때문이다.

실습 후에는 더 이상 사용하지 않는 aws 서비스에 대해서는 바로 삭제하는 것이 좋지만, 혹여나 삭제하지 못해 과금되는 경우가 발생해도, 당황하지 않고, aws suuport center에서 case를 생성하여 환불 절차를 받을 수 있도록 하자!

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

0개의 댓글