vpc - 구성할 vpc 모델 소개 및 vpc 기본 세팅(1)
서버를 클라우드 환경에 구성을 하게 되면 초기 비용이 들지 않기 때문에 많이 사용을 하고 있는 중입니다.
하지만 두가지를 꼭 고려해야합니다. 1. 초기 비용이 들지 않지만 사용한 만큼 비용이 과금되기 때문에
비용계산을 합리적으로 할 수 있어야 합니다. 2. 서버가 외부에 있기 때문에 보안에 신경써야합니다.
오늘은 두번째 보안을 위해 클라우드 환경 내에서 독립적인 서버 환경을 구성해보고자 합니다.
vpc는 아마존의 소개페이지를 보면 다음과 같이 설명합니다.
vpc는 aws 데이터센터 안에서 논리적으로 네트워크를 분리하여 외부의 접근을 제어할 수 있습니다.
인터넷 게이트웨이를 통하지 않으면 외부와 통신이 되지 않으므로 vpc 안에서 외부와 통신이 필요한 서버와
내부에서만 통신이 되어야 하는 서버를 분리구성할 수 있습니다.
이번 포스팅에서 구성해볼 간단한 vpc 모델은 다음과 같습니다.
1. api server1(private)
2. api server2(public)
3. NAT(outbound)
4. bastion server(public)
5. database(private)
6. internet gateway
7. public routing table
8. private routing table
저도 vpc를 구성하면서 어것저것 참고를 했지만 참 잘 설명이 되어있는 공식문서나 블로그 글들이 많았지만 고생을 한 기억이 있습니다. 그렇기 때문에 저의 포스팅은 일단 기본적인 서버 구성에 대한 설명을 하고 세팅 값을 그대로 하면 같은 모델이 나올 수 있게 디테일한 부분까지 이미지를 통해 설명을 할 계획입니다. 네트워크적인 개념 설명이나 aws의 개념에 대한 설명은 건너뛰도록 하겠습니다.
과정에 대한 생략하는 부분 없이 진행할 예정이니 모든 세팅을 똑같이 해주시기 바랍니다.
순서는 다음과 같습니다. 이번 포스팅에서는 1~6번까지 진행하겠습니다.
1. vpc 생성
2. private subnet 생성
3. public subnet 생성
4. private routing table 생성
5. pulic routing table 생성
6. internet gateway 생성
7. private ec2 생성(private subnet과 연결)
8. public ec2 생성(public subnet과 연결)
9. private database 생성
10. bastion server 생성
11. NAT 생성
12. bastion server를 사용한 터널링
1. VPC 생성
aws console 화면에 로그인을 합니다.
console 검색창에 "vpc"를 입력하면 하단에 나오는 "VPC 격리형 클라우드 리소스"를 클릭하여 페이지로 이동합니다.
이동한 vpc 대시보드에서 왼쪽 위에 "VPC" 버튼을 클릭하고 오른쪽에 나오는 "VPC 생성" 버튼을 클릭합니다.
vpc 생성 페이지에서 "이름 태그"와 "IPv4 CIDR 블록"을 위와같이 적어주고 오른쪽 하단에 "생성"버튼을 클릭합니다.
생성을 정상적으로 완료했다면 다음과 같은 페이지가 나오는데 "닫기"를 클릭하시면 됩니다.
여기서 나오는 "VPC ID"는 지정하는 값이 아니기 때문에 생성하는 사람마다 다를 수 있습니다.
그러면 다시 vpc 대시보드로 이동하게 됩니다.
2. private subnet 생성
외부에서 접근할 수 없는 subnet을 생성해보겠습니다.
subnet의 private과 public의 구분은 internet gateway와 연결여부로 할 수 있습니다.
subnet 생성할때에는 차이점이 없고 일단 이름만으로 구분해놓고 internet gateway와의 연결은 마지막에 하겠습니다.
vpc 데시보드에서 왼쪽 메뉴바에 있는 "서브넷"을 클릭하고 우측에 나오는 화면에서 상단에 "서브넷 생성" 버튼을 클릭합니다.
서브넷을 생성하기 위해서는 위의 네가지 항목을 완성해야합니다.
1. 이름태그는 public과 private을 구분하기 위해 이름 안에 명시해놓습니다.
"test-private-subnet"
2. VPC는 위에서 생성해 놓은 VPC를 셀렉트 박스로 선택합니다.
3. 가용 영역은 실제 물리적인 분리된 환경이라고 생각하시면 됩니다.
저는 위의 모델 다이어그램에서 적어놓은 'a' 영역으로 설정하겠습니다.
4. IPv4 CIDR 블록은 VPC 의 블록보다 작은 영역이면서 포함되는 영역으로 지정하면 됩니다.
저는 "10.0.1.0/24" 블록으로 지정하였습니다.
마지막으로 우측 하단에 "생성" 버튼을 클릭합니다.
생성이 정상적으로 완료 되었다면 위와같은 화면이 나옵니다.
"닫기" 버튼을 클릭하여 다음 페이지로 이동합니다.
"닫기" 버튼을 눌러 VPC 대시보드 페이지로 이동했다면 지금 생성한 subnet을 확인할 수 있습니다.
이번엔 public subnet을 생성하기 위해 "서브넷 생성" 버튼을 클릭합니다.
3. public subnet 생성
위에서 언급한 바와 같이 private 서브넷 생성과 public 서브넷 생성에 있어서 차이점은 없습니다.
다만 CIDR 블록과 임의로 지정한 가용영역을 다르게 지정해줍니다.
1. 이름태그는 private subnet과 구분을 하기 위해 private을 넣어줍니다.
2. vpc는 private subnet을 생성할 때와 같이 위에서 생성한 vpc를 셀렉트 박스로 지정해줍니다.
3. 가용 영역은 실제 물리적인 분리된 환경이라고 생각하시면 됩니다.
저는 위의 모델 다이어그램에서 적어놓은 'd' 영역으로 설정하겠습니다.
4. IPv4 CIDR 블록은 기존에 사용하는 영역과 겹치면 안되기 때문에
private subnet이 "10.0.1.0/24"였다면 "10.0.2.0/24"로 지정합니다.
완료하였다면 우측 하단에 "생성" 버튼을 클릭하여 넘어갑니다.
위와같이 정상적으로 서브넷 ID가 생성된 것을 확인했다면 "닫기" 버튼을 눌러 다음으로 넘어갑니다.
위와같이 잘 생성된 것을 확인할 수 있습니다.
4. private routing table 생성
이번 순서는 subnet간의 통신을 하기 위해 routing table을 생성하는 작업입니다.
먼저 subnet들이 내부적으로 통신할 수 있도록 필요한 private routing table을 생성해보겠습니다.
일단 VPC 대시보드에 진입합니다.
vpc 대시보드 왼쪽 메뉴바에서 "라우팅 테이블"을 클릭하면 나오는 오른쪽 화면에서 상단에 "라우팅 테이블 생성" 버튼을 클릭합니다.
routing table은 단순합니다.
1. 이름태그는 지금까지 하던 대로 private과 public을 구분할 수 있도록 명시해줍니다.
2. VPC는 위에서 생성한 VPC를 지정해줍니다.
완료하였다면 "생성"버튼을 클릭하여 다음으로 넘어갑니다.
정상적으로 생성되었다면 위와같이 라우팅 테이블 ID가 생성됩니다.
"닫기" 버튼을 클릭하여 다음으로 넘어갑니다.
위와같이 생성된 routing table을 확인합니다.
5. public routing table 생성
이번엔 public routing table을 생성해봅니다.
subnet과 마찬가지로 세팅하는 부분을 보면 아시겠지만 생성할때는 public과 private의 차이점은 존재하지 않습니다.
나중에 internet gateway와 연결 여부로 구분이 됩니다.
이어서 상단에 "라우팅 테이블" 버튼을 클릭하여 페이지를 이동합니다.
public routing table을 생성하는 방법은 private routing table을 생성했던 것과 비슷합니다.
1. 이름 태그는 private과 구분할 수 있게 "public"으로 명시합니다.
2. VPC는 위에서 생성한 VPC를 선택합니다.
완료하였다면 "생성" 버튼을 클릭하여 다음으로 넘어갑니다.
정상적으로 생성되었다면 위와같이 라우팅 테이블 ID를 확인할 수 있습니다.
"닫기" 버튼을 클릭하여 다음으로 넘어갑니다.
정상적으로 생성되었다면 대시보드에서 위와같이 확인할 수 있습니다.
6. internet gateway 생성
이번 포스팅에서 마지막으로 할 작업은 외부와 통신할 수 있는 internet gateway를 생성하는 것입니다.
internet gateway를 생성한 후에는 public subnet이 외부와 통신할 수 있도록 연결하는 작업을 할 것입니다.
VPC 대시보드의 메뉴바에서 "인터넷 게이트웨이"를 클릭하고 우측 상단에 "인터넷 게이트웨이 생성" 버튼을 클릭합니다.
인터넷 게이트웨이는 위와같이 이름만 지정해주면 쉽게 생성할 수 있습니다.
인터넷 게이트웨이를 생성하면 별도로 vpc를 연결해주어야 합니다. 연결해주지 않으면 위와같이 "detached"상태로
사용할 수 없습니다.
생성한 internet gateway 로우를 우클릭하면 위의 그림과 같이 선택창이 나오는데 "VPC에 연결"을 클릭합니다.
VPC 연결 페이지에서 위와같이 셀렉트 박스에서 생성한 vpc를 선택하고 "연결" 버튼을 클릭하면 연결이 됩니다.
internet gateway의 상태가 "attached"로 변경되었다면 성공입니다.
이제부터 정말 중요한 작업이 필요합니다.
사실 지금까지의 작업만으로는 subnet이나 internet gateway등을 생성한 의미가 없습니다.
subnet들을 routing table에 연결해주고 routing table을 internet gateway에 연결을 해주어야
public subnet들은 외부와 통신할 수 있고 내부적으로 private subnet들이 통신을 할 수 있습니다.
6-1. public routing table 설정
첫번째로 해야하는 작업은 public routing table을 외부에서 사용할 수 있도록 ip를 허용하고 internet gateway와 연결하는 작업입니다.
위에서 생성한 라우팅 테이블 로우를 클릭하면 하단에 라우팅을 편집할 수 있는 영역이 생성됩니다.
지금은 대상이 routing table을 생성할 때 지정해주었던 블록만 있습니다.
여기에 internet gateway를 연결하는 작업을 해보겠습니다.
"라우팅 편집" 버튼을 클릭하여 페이지를 이동합니다.
"라우팅 추가" 버튼을 클릭합니다.
좌측 대상에서 "0.0.0.0"를 적어주고 하단에 나오는 "0.0.0.0/0"을 선택하여 모든 ip에 대한 접근을 열어줍니다.
우측 "대상"에서 internet gateway"를 선택합니다.
클릭하면 위와같이 창이 바뀌는데 위에서 생성한 internet gateway인지를 확인하고 선택해줍니다.
선택한 후에는 우측 하단에 "라우팅 저장"을 클릭하여 완료합니다.
다음으로는 public subnet을 연결해줍니다.
대시보드에서 생성한 public routing table을 클릭하면 하단에 편집영역이 나옵니다.
편집 영역에서 "서브넷 연결" 탭을 클릭한 후 "서브넷 연결 편집"을 클릭합니다.
편집 페이지에서 위에서 생성한 public subnet을 선택하고 "저장" 버튼을 클릭하여 완료합니다.
이 작업까지 완료했다면 public subnet에 대한 세팅은 완료했습니다.
6-2. private routing table 설정
마지막으로 private routing table과 private subnet을 연결해주겠습니다.
대시보드에서 이번엔 private routing table을 선택하여 하단에 편집 영역을 활성화합니다.
"서브넷 연결 편집" 버튼을 클릭하여 이동합니다.
public subnet을 연결할 떄와 마찬가지로 이번에는 현재 private routing table에 private subnet을 선택하여 연결합니다.
"저장" 버튼을 누르고 완료합니다.
이번 포스팅에서 실제 vpc 구성에 필요한 기본 세팅을 완료하였습니다. 실제로 api 서버를 만들어 배포하고 개발, 운영 환경을 위한 세팅은 다음 포스팅에서 이어가도록 하겠습니다.