AWS Cloud School 8기/AWS

34일차) 2025-02-17(AWS-EC2, VPC, RDS)

eitherwho 2025. 2. 17. 09:45

클라우드

온디맨드(On-demand, 수요가 발생하는 즉시) 리소스를 대여하거나 받은 후 사용한 만큼 금액을 지불하는 서비스

공용 클라우드

AWS, GCP, Azure

사설 클라우드

Openstack(KVM, OpenVswitch)같은 툴로 직접 구성


클라우드 컴퓨팅

어디서부터 구성할 것인지에 따라 달라짐

IaaS(Infrastucture as a Service)

서비스로써의 인프라, asS = 제공(서비스모델)

운영체제가 설치되어 있지 않은 서버(Bare-metal) = 직접 OS 단계부터 설치

PaaS(Platform as a Service)

운영체제 이상이 설치된 경우

ex. 내가 제공받은 서버에 Ubuntu 운영체제가 이미 설치되어 있음

ex. 개발환경이 구성되어 있음(Linux+Python)

ex. lambda를 통한 어플리케이션 배포

SaaS(Service as a Service)

서비스 그자체

ex. 구글 문서, 이메일 서비스


AWS

비용 알림 신청

# 100% 200%.... 이런식으로 알람설정


  • 서울 리전 확인


  • 과금 요소 확인


EC2

인스턴스 생성

  • 키 페어 생성

  • 나: private 키, aws: public 키

# aws가 퍼블릭키를 서버에 심어줌

= 나는 해당 퍼블릭키에 해당하는 프라이빗키(pem)로 ssh 접근이 가능

 


  • 인스턴스 세부정보

  • 보안 탭

# 보안 - 보안그룹 확인하러 주로 많이 봐야 함

인바운드와 아웃바운드 중 아웃바운드는 손대지 말자!


EC2 서버 접속

  • 접속하고자 하는 서버의 사용자이름을 모르는 경우 

# 여기서 ‘연결’을 눌러보면 나옴

 


  • root 로그인

  • nginx 설치
root@ip-172-31-43-181:~# apt install -y nginx

# web-allow라는 보안그룹을 만들때 모든 출발지에 대해 http를 허용해서
# 보안그룹을 열어주지 않으면 ping이 안감
# 내가 허용하길 원하는 인스턴스에 가면 그 인스턴스에 얽혀있는 보안그룹을 확인 가능하다.

  • icmp를 열고,  위치무관 = Anywhere-IPv4

# 즉시 반영


인스턴스 종료


VPC(Virtual Private Cloud)

오버레이 네트워크가 구성되어야 가용영역간의 migration고가용성(높은 확률로 사용할 수 있도록)이 가능

# VPC : 리전 밖 혹은 리전내에서 서로 독립적인 사설 네트워크, 일반적으로 다른 VPC끼리는 서로 통신이 안된다.

(VPN이나 VPC peering, Transit GW 같은 특수한 방법 제외)

 

# 우리는 앞으로 AZ A와 C를 쓸것이다. 인스턴스유형중에 B, D에서 못만드는 인스턴스 유형이 있음.

 

# Availability Zone : 가용영역, 서로 물리적으로 떨어져있는 데이터센터, 리전은 최소 3개 이상의 AZ로 구성되어있다.


    • VPC 생성


  • VPC에서 필터링 확인

  • 인터넷 게이트웨이(IGW/대문) 생성

  • 인터넷 게이트웨이 연결


  • 서브넷 설정

VPC 서브넷

  1. 퍼블릭 서브넷: 외부와 통신이 되는 서브넷(인바운드-아웃바운드 둘다)
  2. 프라이빗 서브넷: 내부에서만 통신 가능한 서브넷(때에 따라서는 아웃바운드 가능)


  • 라우팅 테이블 확인

# 일반적으로 서브넷을 만들면  위 정책에 의해 vpc내에 존재하는 서브넷끼리는 서로 통신되도록 구성되어 있음

라우팅 테이블

  • 비명시적 서브넷 연결

# 누군가 서브넷을 만들면서 따로 라우팅테이블을 지정하지 않으면 이 라우팅테이블이 기본선택됨

    • 라우팅 테이블 생성

# 서브넷을 생성할때 이 라우팅테이블을 선택(명시)하면 퍼블릭한 서브넷이 될 것임

  • 라우팅 테이블 편집

  • 명시적 서브넷 연결


  • 서브넷 추가

  • vpc를 만들면 자동으로 생성됐던 라우팅 테이블을 이용

# 서브넷을 만들면 이 라우팅테이블이 자동으로 선택되니까(비명시적  = 따로 라우팅테이블을 지정안하면)
이 기본라우팅테이블을 프라이빗서브넷을 위한 라우팅테이블로 이름을 붙여주자!

igw와 연결되어있다 = 퍼블릭 서브넷
 igw와 연결되어있지않다 = 프라이빗 서브넷


pub-sub2 와 pri-sub2를 만들어보세요.
pub-sub2 - 10.10.11.0 /24 az - c
pri-sub2 - 10.10.12.0 /24 az - c

 

# 인스턴스를 만들어서 해당 퍼블릭을 선택해보면 퍼블릭 IP자동할당이 비활성화로 되어있다.

    = 퍼블릭 IP를 못받음

# 처음에 퍼블릭서브넷을 만들때, 위 두개의 설정을 활성화하여 퍼블릭 IP와 퍼블릭 영문주소를 할당받도록 해야 한다.

# pub-sub2도 설정해준다

 

VPC를 처음 생성할때도 위의 옵션을 꼭 활성화해준다.


실습)

프라이빗 서브넷(pri-sub1)에 인스턴스를 생성하고(서브넷설정편집은 하지말고)

생성시 퍼블릭IP를 부여받도록 해보세요(억지로)

보안그룹은 새로 만드세요! 기존 web-allow(ssh,icmp,http 허용)랑 동일하게

노트북에서 해당 인스턴스로 통신(ping)이 되는지 확인해보세요.

어디까지되고, 어디까지 안되는지(inbound,outbound) 검증

 

퍼블릭IP? = 글로벌하게 유효한 IP

비록 프라이빗 서브넷에 존재하는 인스턴스지만 공인아이피를 할당받았기 때문에 찾아오는건 가능할 것이다. 하지만 라우팅테이블의 정책상 pri인스턴스 입장에서 아웃바운드가 허용되어있지 않기때문에 icmp reply는 안될것이라는게 우리의 가정이다. 따라서 이 가설을 검증을 해보라는 뜻

 

1. 노트북 → pri인스턴스 (o)
2. pri인스턴스 → 노트북 (x) : 라우팅테이블 정책상, 외부로 통신하기 위한 정책 없음
→ 인바운드는 되는데, 아웃바운드가 안된다.

→ 검증하려면 어떻게 하면 좋을까?

pri-sub1에 공인IP를 갖고있는 인스턴스를 만들어보자!

# 정책 두개(http,icmp) 추가해서 총 3개(ssh까지) 구성

# 프라이빗 서브넷에 있는 인스턴스는 공인IP를 부여받았어도 ssh 접속이 불가능(노트북이든, aws웹콘솔이든 불가능)

# ssh 접속이 안된다.


이 프라이빗서브넷에 존재하는 서버에 접속하기 위해 bastion 서버를 하나 만들어보자!
이름 : bastion
AMI : ubuntu 24.04 프리티어 사용가능.
유형 : t2.micro
키페어 : aws8

1. bastion을 만들었다면 bastion으로 ssh 접속

bastion에 접속할때의 ssh client = 노트북, ssh server = bastion

 

2. bastion에서 pri-srv로 ssh접속

ssh client = bastion , ssh server = pri-srv

bastion이 ssh 프라이빗 키(aws8.pem)를 갖고 있으면 됨

 

scp(ssh 파일전송하는 프로토콜) - 이건 필요없고, pem을 메모장으로 열어서 bastion 서버에서 vi로 파일을 만들자!

  • aws8.pem 파일을 생성하면서 vi편집기로 진입
root@ip-10-10-1-118:~# vi aws8.pem

# pem파일의 권한이 너무 느슨하므로 644를 600 정도로 수정

# pem파일의 권한을 변경후에 접속하면 접속이 잘 된다.

 

# tcpdump를 통해 인바운드(노트북->pri-srv)는 가능하지만 아웃바운드(pri-srv->노트북)는 불가능했다. 프라이빗 서브넷은 외부로 나가기 위한 정책이 없기 때문


  • DB(RDS)를 위한 서브넷 생성


RDS(관계형 데이터베이스 서비스)

  • RDS(관계형 데이터베이스 서비스) 생성

 

# RDS는 반드시 서브넷그룹에 DB를 만들어야함

# 서브넷그룹 : 두개이상의 서브넷 묶음 = “DB를 만들땐 꼭 두개이상의 가용영역에 걸쳐서 만들어” 강제된 느낌

 


실습)

생성한 데이터베이스에 접속해보세요!
이름 : bastion
AMI : ubuntu 24.04 프리티어 사용가능.
유형 : t2.micro
키페어 : aws8
서브넷 : rapa-vpc-pub-sub1

 

서버 생성 후 ssh로 접속

  • mysql 명령어 설치
ubuntu@ip-10-10-1-185:~$ sudo -i
root@ip-10-10-1-185:~# apt install -y mysql-client
# sudo apt-get update
# sudo apt-get install -y mysql-client
  • DB주소

  • DB사용자
admin
  • DB사용자암호
test1234
  • DB이름
testdb
  • 접속 시도

# 아직 보안그룹을 안 열었기 때문에 접속이 안된다.
# 접속 시 db까지 잘 보인다.


  • RDS db 삭제