오늘은 AWS에서 직접 VPC를 구성하고 Public Subnet에 EC2를 생성한 뒤 SSH로 접속해보았다.
처음에는 VPC, Subnet, EC2가 전부 따로 노는 개념처럼 보였는데 직접 구성해보니 다음과 같은 관계였다.
AWS
│
└── VPC
│
├── Public Subnet
│ │
│ └── EC2 ← 오늘 생성한 서버
│
└── Private Subnet
1. VPC란?
VPC(Virtual Private Cloud)는 AWS 클라우드 안에 만드는 사용자 전용 가상 네트워크다.
AWS를 아주 거대한 땅이라고 한다면 그중에서 내가 사용할 공간을 하나 떼어서 울타리를 치고,
"여기부터 여기까지는 내가 사용할 네트워크야" 라고 만든 공간이 VPC다.
2. Subnet이란?
VPC라는 큰 네트워크 공간을 다시 작은 네트워크 영역으로 나눈 것이 Subnet이다.
VPC = 회사 건물 전체
Subnet = 건물 내부의 구역
두 종류의 Subnet을 만들었다.
VPC
│
├── Public Subnet
│
└── Private Subnet
Public Subnet
인터넷과 직접 통신할 수 있도록 Internet Gateway로 가는 라우팅 경로가 설정된 Subnet이다.
오늘 생성한 EC2는 외부에서 직접 접속해야 했기 때문에 Public Subnet에 배치했다.
Private Subnet
인터넷에서 직접 접근하지 못하도록 구성하는 Subnet이다.
나중에는 DB나 외부에 직접 노출할 필요가 없는 서버 등을 이런 영역에 배치할 수 있다.
3. 왜 Subnet을 2개씩 만들었을까?
이번에는 2개의 Availability Zone(AZ)을 사용했다.
VPC
│
┌────────┴────────┐
│ │
AZ 2a AZ 2b
│ │
┌────┴────┐ ┌────┴────┐
Public Private Public Private
여러 AZ를 사용하는 가장 큰 이유는 고가용성(High Availability) 때문이다.
한 AZ에 장애가 발생하더라도 다른 AZ의 리소스를 이용해 서비스를 계속 운영할 수 있도록 구성할 수 있다.
4. EC2란?
EC2를 쉽게 생각하면
AWS에서 컴퓨터 한 대를 빌리는 서비스라고 생각하면 된다.
내 책상 위에 있는 컴퓨터가 아니라 AWS 데이터센터에 있는 가상 서버를 인터넷을 통해 사용하는 것이다.
EC2(Elastic Compute Cloud)는 AWS에서 가상 서버를 생성하고 사용할 수 있도록 제공하는 컴퓨팅 서비스다.
5. SSH란?
EC2를 만들었지만 AWS 데이터센터에 직접 가서 키보드를 연결할 수는 없다.
그래서 사용하는 것이 SSH다.
SSH(Secure Shell)는 원격 컴퓨터에 안전하게 접속하여 명령어를 실행할 수 있도록 해주는 프로토콜이다.
구조는 다음과 같다.
내 Windows PC
│
│ SSH
│ TCP 22
▼
EC2
Amazon Linux
6. Key Pair와 .pem
EC2 생성 과정에서 Key Pair도 생성했다.
aws-cloud-key.pem
SSH 접속 시 비밀번호 대신 이 Private Key를 사용했다.
chmod 400 aws-cloud-key.pem
그리고 접속 전에 위 명령어를 실행했다.
이는 Private Key 파일에 대한 권한을 제한하기 위한 것이다.
.pem 파일은 절대로 GitHub 등에 업로드하면 안 된다.
❌ AWS Access Key
❌ Secret Access Key
❌ .pem Private Key
❌ DB Password
❌ API Token
이런 값들은 Git으로 관리하지 않는 습관이 중요하다.