일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Intellij
- Infra
- gitops
- 오블완
- Logrus
- 윈도우키보드
- 대규모 시스템 설계
- body size
- go
- 디자인패턴
- 코사인 유사성 메트릭스
- m4 pro
- kube-prometheus-stack
- Buffered channel
- golang
- intellij ide
- elasticsearch
- GoF
- 배포 프로세스
- AWS
- http 413
- Kubernetes
- UnBuffered channel
- cosine similarity metric
- 사설 ip
- 배포 파이프라인
- 티스토리챌린지
- apollo router
- goland
- notification system
- Today
- Total
Fall in IT.
AWS 인프라 구성 간단하게 맛보기(VPC, Subnet, IGW, NAT, SSH Tunneling) 본문
안녕하세요.
오늘은 아주 간단하게 AWS 인프라를 구성해보고 로컬 컴퓨터에서 SSH tenneling을 사용해서 Private Subnet 영역에 위치한 서버 컴퓨터(EC2 인스턴스)에 접속하는 것까지 실습해보도록 하겠습니다.
대상
- AWS 인프라 구성에 어려움을 겪고 계신 분
- VPC, Subnet은 default로만 사용해보신분
- 기본적인 네트워크 구성을 알고 싶으신 분
목표
- 조금은(?) 보안을 신경쓰면서 아래와 같은 아주 간단한 인프라를 구성해보자
목차
- 사용한 AWS 리소스와 간단 개념
- 인프라 구성에 대한 설명
- 실습
사용한 AWS 리스소와 간단 개념
사용한 리소스
- VPC (Virtual Pricate Cloud)
- Subnet
- IGW (Internet Gateway)
- NAT
- EC2
AZ (Availability Zone)
AZ는 가용영역을 뜻한다. 가용영역이란 사용 가능한 영역으로 쉽게 말해서 한쪽에 문제가 생겼을 경우 다른 한쪽을 대체해서 사용할 수 있는것을 말한다.
따라서, 최소 2개 이상의 가용영역을 사용하는것이 좋다. 서울리전의 경우에는 ap-northeast-2a, ap-northeast-2b, ap-northeast-2c 총 3개의 가용역영을 제공하고 있다.
더 높은 수준의 격리를 제공하기 위해서 멀티리전을 사용하기도 한다.
VPC (Virtual Private Cloud)
VPC란 가상사설망이란 뜻으로 클라우드 환경에서 사용할 격리된 가상 네트워크 영역을 만드는것이다.
가상으로 격리된 네트워크 공간 안에서 내가 원하는 서비스들에게 IP를 할당해서 사용할 수 있고, 내부 리소스는 서로 private IP를 통해 통신할 수 있다.
AWS의 대부분의 리소스는 VPC 안에 존재한다. 예외적으로 Lambda, S3와 같은 리소스처럼 독립적으로 존재하는 서비스도 있다.
VPC는 기본적으로 16비트 블록을 많이 사용한다. (ex. 192.168.0.0/16, 10.0.0.0/16)
예를들어, VPC를 192.168.0.0/16으로 설정할 경우 "/" 뒤에 나오는 숫자는 Network ID로 사용되는 영역 비트수를 의미한다. 즉, 16비트는 Network ID를 표현하고 나머지 16비트는 Host ID를 표현한다.
192.168.0.0/16으로 설정된 VPC 안에는 2의 16승(65536)개 만큼의 리소스를 할당할 수 있다는 뜻이 된다.
VPC에서 사용하는 사설 아이피 대역은 아래와 같다.
- 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8)
- 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12)
- 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16)
Subnet
Subnet은 VPC로 할당한 아이피대역을 논리적으로 한번 더 나누는것이다.
그 이유는,
- 영역분리 가능. 퍼블릭으로 공개되야할 리소스들이 존재하고 프라이빗으로 비공개되야할 리소스들이 존재
- 트래픽 혼잡을 줄일 수 있다. 과다한 호스트 컴퓨터의 수로 인해 네트워크 트래픽이 증가하는 문제를 해결할 수 있다.
- 네트워크 관리와 유지보수를 하기 용이하다.
- 브로드캐스트 사이즈를 줄일 수 있다. 조직 단위 사이즈를 줄여 브로드캐스트 내 트래픽을 줄여 성능이 향상된다.
IGW (Internet Gateway)
IGW는 VPC의 리소스와 인터넷이 통신할 수 있도록 한다.
IGW는 VPC에 연결되며, 인스턴스는 Subnet에 위치하기 때문에 Subnet에 연결된 라우팅테이블에 라우팅 정책을 추가해야한다.
Public Subnet으로 사용할 곳에만 인터넷게이트웨이 라우팅 정책을 추가한다.
NAT
NAT Gateway는 인바운드는 차단하고 아웃바운드만 허용할때 사용한다.
즉, 어떤 인스턴스에 인터넷을 통해 들어오는 것은 차단하고 인터넷으로 요청을 보낼 필요가 있을때 사용한다.
Private Subnet에 할당된 서버는 인터넷에서 인바운드(진입) 되어서는 안되지만 소스코드를 다운받거나 코드에서 사용하는 특정 패키지를 다운받을 때는 아웃바운드(요청)는 필요하다.
NAT Gateway는 인터넷과 직접 통신할 필요가 있기 때문에 Public Subnet에 위치해야한다.
라우팅 테이블은 Subnet 단위이기 때문에 Private Subnet의 라우팅 테이블을 조정해야한다.
Router
네트워크 요청이 발생하면 데이터는 우선 라우터로 향한다. 라우터에는 라우팅테이블이 존재하는데 데이터가 어디로 향하면 되는지 알려주는 이정표에 해당한다.
위의 그림인 인프라 구성도에서는 라우팅테이블이 2개 존재하고 Public, Private Subnet이 각각 어디로 향하면 되는지 설정되어 있다.
10.0.0.0/16 범위의 요청에는 로컬에서 목적지를 찾도록 되어있고, 그 이외에는 Public은 IGW를 통해 외부로 향하고 Private은 NAT를 통해 아웃바운드만 가능하도록 설정되어 있다.
인프라 구성
인프라 구성은 아래와 같다.
- 오사카 리전(ap-northeast-3)을 사용하고 가용영역은 a와 b를 사용한다. (가용영역은 원하는 두 곳을 사용하면 된다)
- VPC는 10.0.0.0/16으로 생성한다.
- Subnet은 Public 2개, Private 2개 생성한다.
- Public Subnet 대역은 10.0.0.0/24, 10.0.1.0/24로 Private Subnet 대역은 10.0.100.0/24, 10.0.200.0/24로 설정한다.
- VPC에는 인터넷게이트웨이를 연결하고 Public Subnet에 연결할 라우팅테이블을 생성하고 인터넷게이트웨이를 연결한다.
- NAT게이트웨이를 Public Subnet에 생성한다.
- Private Subnet에 연결할 라우팅테이블을 생성하고 NAT게이트웨이를 연결한다.
- Public Subnet 영역에 Bastion Server로 사용할 EC2 instance를 생성한다.
- Private Subnet 영역에 Application Server로 사용할 EC2 instance를 생성한다.
- SSH tenneling을 통해 Bastion Server를 지나 Application Server로 접속한다.
* Bastion Server (혹은 Bastion Host)는 외부 네트워크에서 내부 네트워크로 진입하는 게이트웨이 역할을 하는 서버를 의미합니다.
실습
VPC, Subnet, IGW, NAT 생성
위에서 정리한 내용을 토대로 AWS에 접속해서 생성해보자. 최근(2023.01.21 기준)에는 VPC를 생성하면서 Subnet, IGW, NAT를 모두 한번에 생성이 가능하고 미리보기를 통해 네트워크를 확인해볼 수 있다.
서브넷 CIDR 블록 사용자 지정을 선택하면 Subnet의 대역을 원하는대로 설정할 수 있다.
Bastion Server로 사용할 EC2 instance 생성
Bastion Server로 사용되는 인스턴스는 높은 사양이 필요하지 않기 때문에 작은 사양의 인스턴스를 사용한다.
VPC는 기존에 만들어둔 것을 선택하고 Bastion Server는 외부와 통신해야하기 때문에 Public Subnet을 선택합니다.
또한, Public IP를 자동할당하고 보안그룹이 없다면 생성합니다. 인바운드로 ssh 접속을 추가합니다.
Bastion Server에 접속하기
위에서 생성된 인스턴스에 Public IP를 확인하고 터미널에서 접속해본다.
# ex. ssh -i keypair.cer ec2-user@13.36.120.88
$ ssh -i [Keypair Path] [user]@[Public IP]
Application Server로 사용할 EC2 instance 생성
Application Server는 Private 영역에 두어 외부에서 접근을 차단하고 Bastion Server로만 접속(ssh)이 가능하도록 합니다.
네트워크 설정을 제외한 나머지 설정은 위에서 만든것과 동일하게 설정합니다.
Bastion Server를 통해서 Private Subnet의 Application Server에 접근해보자
# Bastion server tenneling
# ex. sudo ssh -i simple.pem -L 22:ip-10-xx-xx-xx.ap-northeast-3.compute.internal:22 ec2-user@xx.xx.xx.xx
$ sudo ssh -i [keypair path] -L [local port]:[private ip]:[target port] [user]@[bastion server ip]
# New terminal
$ ssh -i [keypair path] [user]@127.0.0.1
접속 완료!
모두 즐거운 코딩하세요~
'시스템구축' 카테고리의 다른 글
System Design을 위한 기본 기능 정리 (2) | 2023.12.31 |
---|---|
Kubernetes를 사용하는데 Helm이 필요한 이유와 간단 사용방법 (0) | 2023.02.06 |
Github 계정 엑세스 토큰 생성 방법 (0) | 2023.01.05 |
AWS S3, CloudFront, Lambda, Lambda@Edge를 활용한 이미지 리사이징 처리하기 (0) | 2023.01.01 |
Kubernetes Service 개념정리 (0) | 2022.02.03 |