AWS 공식문서
1. 사용자의 AWS 계정 전용 가상 네트워크입니다.
2. VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다.
3. EC2 인스턴스 같은 AWS 리소스를 VPC에서 실행할 수 있다.
공식 문서를 요약하자면, VPC는 가상 네트워크다. 라고 요약할 수 있다. 가상 네트워크를 많이 들어봤는데.. 정확히 그게 뭔데?! 라고 말하면 잘 생각이 나지 않는다.
그러다 ( 출처 ) Harry 님의 미디엄에서 아주 Git똥찬 예시를 발견하였는데..
회사에 인터넷이 이렇게 깔려있다고 치자. 층은 A , B로 나뉘어져 있지만, 주황회사와 파란회사는 사실상 다른 회사라고 가정하자.
그렇다면 아래와 같이 네트워크를 분리 시켜야한다.
그럼 어떻게 분리할 수 있을까? 기존의 인터넷선을 다 뜯어내고, 각각의 회사마다 전용선을 다시 깔아야할까?
이를 해결하기 위해 나온게 VPN(가상사설망) 이다. 사실상 같은 네트워크상에 있지만, 논리적으로 서로를 분리시킨 상태를 의미한다.
🙋 근데 그게 VPC는 아니잖아요
🤖 VPN을 클라우드에 적용하면 VPC겠지
🙋 뭔가 더 쉽게 설명해줘
🤖 공홈 설명 3을 보면 이해가 쉽다.
설명 3을 보면 EC2 인스턴스 같은 AWS 리소스를 VPC에서 실행할 수 있다. 라고 정의했다. 왜 이런 기능을 VPC의 정의에 넣었을까? 반대로 생각해보자.
만약 vpc없이 aws리소스를 사용하면 어떤 문제가 생길까?
위와 같이 한 계정에서 만든 모든 aws 리소스들이 한 클라우드 위에 떠있을 것 이다.
그렇게 된다면, 파란색 회사가 새로운 직원을 뽑아서 컴퓨터를 추가할때, 주황색 회사에게도 알려줘야하는 엄청난 복잡도를 높이게 될것이다.
그래서 아래와 같이 VPC를 서로 나눠, 각자 필요한 자원들만 그 안에 위치시켜 사용하도록 하는 것이다.
요약하자면, VPC는 클라우드에서 사설 네트워크를 만들어줌으로써 보안성을 향상시키고, 네트워크 관리를 쉽게 할 수 있도록 도와준다.
VPC는 한마디로 "마을" 을 구축하는 과정과 유사하다.
먼저 어디까지 "마을"로 지정할건지 설정해야한다.
🙋 이걸 왜 하는데?
🤖 놀이터 가자고 친구가 그러면 당연히 "동네" 놀이터를 의미하지, 3시간 걸리는 곳의 놀이터를 가지는 않을꺼잖아?
🙋 당연하지..?
🤖 그러니까 내부적으로 놀이터의 위치(사설IP)를 사설 IP 대역에서 할당 받는거지
🙋 그럼 다른 VPC에서는 내 VPC를 접근 못하는거야? 촌장이 쇄국정책 펼치냐?
🤖 그럴땐 마을 주소 (공용IP) 를 알려주면 우리 동네 놀이터로 올 수 있겠지
서브넷은 VPC를 잘게 쪼개는 과정이다. 거대한 "VPC 마을" 에서 존재하는 "우리집", "놀이터" 라는 서브넷을 의미한다. VPC 보다 작은 단위기 때문에 IP의 범위도 더 작은 값을 가지게 된다.
🙋 왜 이렇게 잘게 나눔..?
🤖 마을 내에서 더 많은 네트워크망을 만들기 위해서야
네트워크 요청이 발생되면 어디로 가야할지 우선 라우터로 향하게 됩니다. 이 라우터는 목적지를 알려주는 "VPC 마을"의 가이드입니다. 이 가이드는 각각 정의된 라우팅 테이블을 보고 목적지를 알려줍니다.
만약 서브넷A에 대한 요청이 있다면, 이 서브넷A의 라우팅 테이블을 보고 VPC 네트워크 범위를 갖는 요청은 로컬에서 찾도록 되어있다. 하지만 외부로 통하는 다른 트래픽은 인터넷 게이트 웨이를 통해 처리하게 된다.
VPC와 인터넷을 연결해주는 하나의 관문이다. 서브넷B의 라우팅테이블을 잘보면 0.0.0.0/0으로 정의되어있습니다. 이뜻은 모든 트래픽에 대하여 IGA(인터넷 게이트웨이) A로 향하라는뜻이다.
인터넷과 연결되어있는 서브넷을 퍼블릭서브넷, 인터넷과연결되어있지않는 서브넷을 프라이빗서브넷이라고한다.
보안그룹 : 모든 허용을 차단하도로록 기본 설정 되고 필요한 설정은 따로 허용해줘야한다. 각각의 보안 그룹별로, 서브넷, 인스턴스에도 따로 설정할 수 있다
네트워크 ACL : 모든 허용을 허용하고 불필요한 트래픽을 막는 용도이다. 서브넷 단위로 적용되고 보안 그룹과 충돌이 있을시 보안 그룹을 우선 순위로 한다.
프라이빗서브넷이 인터넷과 통신하기위한 아웃바운드 인스턴스이다.