Data Scientist/AWS

VPC는 Sims같아요. (AWS 강의실 - VPC 개념)

rileyko 2022. 10. 30. 09:13
Sims 해보셨나요?

Sims

심즈는 땅과 건물을 사서 그 안에 개인 캐릭터를 키우는 게임입니다. 건물 내에 벽을 설치해서 공간을 나눌 수도 있습니다. 또한, 가구 등을 주문해서 인테리어를 할 수도 있습니다. 저는 이러한 부분에서 VPC를 접하면서 심즈와 비슷한 부분이 많다고 생각했습니다. 일단 가상 네트워크 환경을 구현하기 위해 AWS로부터 VPC, 즉 특정 IP를 빌려 그 내부의 공간을 나누기 위해 Subnet을 빌리게 됩니다. 또한, 그 내부에서 각각의 기능을 수행하기 위해 여러 가지 IT 리소스를 빌리게 됩니다. 반면, 심즈와 다른 점은 일단 심즈는 특정 아이템을 구매하면 제가 그 아이템의 소유자가 됩니다. 그러나 VPC 구성요소들은 사용한 만큼 돈을 지불하며 빌리는 형태로 과금됩니다. 이제 VPC에 관해 자세히 살펴보도록 하겠습니다.


 

VPC(Virtual Private Cloud)란?

AWS 계정 전용 가상 네트워크 서비스입니다.

Amazon Virtual Private Cloud(VPC)를 사용하면 AWS 클라우드에서 논리적으로 격리된 공간을 프로비저닝 하여 고객이 정의하는 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경을 완벽하게 제어할 수 있습니다. VPC에서 IPv4와 IPv6를 모두 사용하여 리소스와 애플리케이션에 안전하고 쉽게 액세스 할 수 있습니다. ( + AWS VPC )

즉, 다시 말하면 퍼블릭 클라우드 환경에서 사용할 수 있는 AWS 계정 전용 가상 네트워크를 의미합니다. 본래 VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. 따라서 이러한 점에서 IT 인프라를 안전하게 구축하고 간편하게 관리할 수 있다는 장점을 보유하고 있습니다.

VPC를 이용하기 위해서는 IP 주소 범위를 지정하고 Subnet과 Gateway를 추가하고 Security Group을 연결해주어야 합니다.

  • Subnet은 VPC의 IP 주소 범위로서, VPC의 영역 안에서 망이 더 쪼개진 형태입니다. Subnet은 외부에서 접근이 가능한 네트워크 영역인 Public Subnet과 외부에서 다이렉트로 접근이 불가능한 네트워크 영역인 Private Subnet으로 분류할 수 있습니다.
  • Gateway는 다른 네트워크로 들어가는 입구 역할을 하는 네트워크 포인트입니다.

VPC를 통해 Public Subnet에 웹 서버를 배치하고, Private Subnet에 DB나 Application Server 같은 백엔드 시스템을 배치한 뒤, Security Group 및 Network ACL(Access Control List)을 포함한 다중 보안 계층을 사용하여 각 서브넷에서 Amazon EC2 인스턴스의 액세스를 제어할 수 있습니다.

참고로, 하나의 Region 당 단일 VPC를 보유해야 하기 때문에, 다른 Region으로 확장할 수 없습니다.

 

 

VPC(Virtual Private Cloud)의 2가지 종류 (Default VPC & Custom VPC)

Dafault VPC란,

AWS 계정 생성 시 모든 리전에 걸쳐 자동으로 셋업 되어 있는 VPC입니다.

모든 서브넷의 인터넷 접근이 가능하고, Public IP와 Private IP의 보유 등 많은 기능들이 기본으로 갖추어져 있습니다.

우리가 EC2Auto Scaling 포스팅에서 실습을 할 때 사용했던 VPC가 바로 이 Default VPC입니다!

VPC Dashboard에서 확인하실 수 있으며, _라는 이름을 보유하고 있습니다.

Default VPC를 삭제했을 경우에는 AWS에 직접 연락하지 않는 이상 복구하지 못하기 때문에 웬만하면 삭제하지 않는 것을 추천드립니다.

참고로, _라는 이름의 서브넷 등 Default VPC 관련 리소스들이 있을 것입니다. 이 역시도 삭제하지 않으셔야 합니다.

Custom VPC란,

새로 직접 만들어야 하는 VPC입니다.

따라서, 당연하게도 Default VPC의 특징을 보유하지 않고 있습니다.

참고로, 해당 포스팅에서 Custom VPC를 직접 만들어보는 실습을 진행할 것입니다.

 

VPC(Virtual Private Cloud)를 통해 무엇을 할 수 있을까요?

EC2 등 인스턴스를 실행하고, 서브넷을 구성해서 망을 나누고, IP block 등의 보안 설정을 함으로써 인스턴스를 위한 가상 네트워크 환경을 구축할 수 있습니다.

두 VPC 사이의 네트워킹 연결(VPC Peering)이 가능합니다. 따라서 동일한 네트워크에 속하는 경우와 같이 VPC의 인스턴스가 서로 통신할 수 있습니다. 또한, 사용자의 자체 VPC 또는 다른 AWS 계정의 VPC와 VPC 피어링 연결을 만들 수도 있으며, VPC는 서로 다른 리전에 있을 수도 있습니다.

참고로, Transitive Peering은 불가능합니다. 즉, A VPC와 B VPC가 피어링 되어 있고, B VPC와 C VPC가 피어링되어 있다고 해서, A VPC와 C VPC가 Peering 되지는 않습니다.

VPC Flow Log를 통해 VPC에 오고 가는 모든 로그를 CloudWatch에 저장함으로써 모니터링이 가능합니다.

CIDR 블록, 즉 IP 주소의 그룹을 관리할 수 있습니다.

 

 

VPC(Virtual Private Cloud) 구성요소

AZ(Availability Zone, 가용 영역)

물리적으로 분리되어 있는 인프라가 모여있는 데이터 센터라고 이해하시면 됩니다.

하나의 Region(지리적 단위를 의미)은 2개 이상의 AZ으로 이루어져 있습니다.

화재 등의 물리적 재해에 의한 데이터 손실 등을 방지하기 위해(고가용성) 항상 일정 거리 이상 떨어져 있다는 특징을 보유하고 있습니다.

또한, AWS는 하나의 가용 영역에 트래픽이 몰리는 것을 방지하기 위해서, 계정 별로 동일한 AZ 아이디를 부여하지 않는다는 특징을 보유하고 있습니다.

(+ 가용 영역 관련 포스팅 보러 가기)

Subnet (서브넷)

VPC의 하위 단위로서, VPC의 영역 안에서 망이 더 쪼개진 형태입니다.

서브넷은 하나의 AZ에만 생성할 수 있기 때문에 다른 AZ로 확장할 수 없습니다.

즉, 여러 개의 AZ에 동일한 서브넷을 위치시킬 수 없습니다. 참고로, 하나의 AZ에는 여러개의 Subnet을 생성할 수 있습니다.

인터넷에 접근할 수 있는 Public Subnet인터넷에 다이렉트 하게 접근할 수 없는 Private Subnet로 구별됩니다.

CIDR block 범위를 설정할 수 있습니다.

(+ Subnet 관련 포스팅 보러 가기)

+ CIDR block (싸이더 블록)

기존의 IP 주소 할당 방식이었던 네트워크 클래스를 방법을 대체한 방식입니다.

CIDR을 통해 IP Address의 영역을 나눌 때 기존 방식보다 유연하게 자신이 원하는 Network Address와 Host Address를 나눌 수 있습니다. 

CIDR은 네트워크와 서브넷의 범위를 나누는 데 사용됩니다.

CIDR을 통한 네트워크 범위 표기

CIDR block을 기반으로 IP 주소의 범위를 지정하게 되는데, 이때 IP 범위는 Private IP와  Public IP 범위로 구별됩니다.

  • Private IP
    • 내부 네트워크(Ex: 공유기 내부 네트워크) 상에서만 사용되는 주소로 인터넷상에서는 사용할 수 없고, 내부망에서만 사용할 수 있는 IP 주소입니다.
    • 일반 가정이나 회사 내 등에 할당된 네트워크의 IP 주소이며, 로컬 IP, 가상 IP라고도 불립니다. 
      • A Class : 10.0.0.0 ~ 10.255.255.255 (CIDR : /8 ~ /15)
      • B Class : 172.16.0.0 ~ 172.31.255.255 (CIDR : /16 ~ /23)
      • C Class : 192.168.0.0 ~ 192.168.255.255 (CIDR : /24 ~ /32)
  • Public IP
    • 인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소로서 인터넷상에서 사용할 수 있는 IP 주소이다. 공용 IP 주소라고도 불리며 외부에 공개되어 있는 IP 주소입니다.
    • 공인 IP는 전 세계에서 유일한 IP 주소를 보유합니다.
    • 공인 IP 주소가 외부에 공개되어 있기에 인터넷에 연결된 다른 PC로부터의 접근이 가능하기 때문에 보안에 유의해야 합니다.

(+ CIDR 관련 포스팅 보러 가기)

IGW (Internet Gateway)

Gateway란 다른 네트워크로 가기 위한 문으로, Internet Gateway는 VPC와 인터넷 간의 문입니다.

VPC에서 호스팅 하는 리소스와 인터넷 간의 통신을 가능하게 해주는 AWS 컴포넌트로서, 서브넷 내 EC2와 같은 리소스가 Internet과 연결하기 위해 반드시 필요합니다.

IGW로 연결되어 있는 서브넷이 Public Subnet이고, 연결되어있지 않은 서브넷이 Private Subnet입니다.

서브넷이 IGW를 통해 인터넷에 액세스 할 수 있도록 하려면 서브넷 Route Table에 특정 라우팅을 추가해주어야 합니다.

(+ IGW 관련 포스팅 보러 가기)

NACL (Network Access Control List, 나클) & Security Group (보안 그룹)

외부 간 통신을 담당하는 방화벽 역할을 합니다.

기본적으로 VPC 생성 시 NACL도 생성이 됩니다. 

Deny, 즉 특정 IP를 블락시키는 등의 행위는 NACL에서만 가능합니다. (Security Group ❌)

NACL 서브넷 단위의 방화벽 역할이고, Security Group 서버, 인스턴스 단위의 방화벽 역할을 합니다.

즉, 외부 통신의 경우 NACL과 Security Group을 모두 거쳐야 하고, 내부 통신의 경우 Security Group만 거치게 됩니다.

  • NACL의 인/아웃바운드 : 다른 서브넷(or 외부)에서의 요청/응답
  • Security Group의 인/아웃바운드 : 같은 서브넷 및 다른 서브넷(or 외부)에서의 수신/발신

NACL은 Stateless, Security Group은 Stateful 합니다.

  • Stateless : 요청 정보를 따로 저장하지 않아 응답하는 트래픽도 제어를 해줘야 합니다.
  • Stateful : 요청 정보를 저장하여 응답하는 트래픽 제어를 하지 않습니다.

(+ NACL & Security Group 관련 포스팅 보러 가기)

Route Table (라우팅 테이블)

트래픽이 어디로 가야 할지 알려주는 이정표 역할을 합니다.

다시 말해, 트래픽이 어떤 IP 대역으로 들어왔을 경우 어느 대상으로 보내줄 지에 관해 기록하는 표입니다. 

VPC는 암시적인 Router를 보유하고 있으며, Route Table을 사용하여 네트워크 트래픽이 전달되는 위치를 제어합니다.

VPC 내 각 서브넷은 Route Table과 반드시 연결되어 있어야 하기 때문에 Route Table 또한 기본적으로 VPC 생성 시 생성해줍니다.

1개의 Subnet은 1개의 Route Table과 연결되고, 1개의 Routing Table은 여러 개의 Subnet을 연결할 수 있습니다.

서브넷은 내부(VPC 내 다른 서브넷과의 통신), 외부(인터넷과의 통신) 통신을 위하여 반드시 라우팅 테이블과 연결되어야 하는데, 이로 인해 주로 public 서브넷은 IGW가 연결된 라우팅 테이블과, private 서브넷은 내부 통신만 가능한 라우팅 테이블과 연결됩니다.

(+ Route Table 관련 포스팅 보러 가기)

NAT Gateway (Network Address Translation Gateway)

Private Instance가 외부의 인터넷과 통신하기 위한 통로 역할을 합니다.

NAT(네트워크 주소 변환) 서비스입니다. Private Subnet의 Instance는 VPC 외부의 서비스에 연결할 수 있지만, 외부 서비스에서는 이러한 Instance와의 연결할 수 없도록 NAT 게이트웨이를 사용할 수 있습니다.

Private Subnet 내부의 인스턴스가 인터넷에게 통신하고자 Public Sebnet에 있는 서버에게 요청을 전달하고, Public Subnet에 위치한 서버는 인터넷에 해당 요청을 수행한 뒤, 응답을 Private Subnet 내부에 있는 인스턴스에게 돌려주는 형태입니다.

참고로, NAT Instance는 단일 Instance이고, NAT Gateway는 AWS에서 제공하는 서비스입니다.

  • NAT Instance를 사용할 때는 Source/Destination Check을 해제해야 합니다.
  • NAT Instance는 인터넷으로 향하는 통로이기 때문에 Public Subnet에 위치해야 합니다.
  • NAT Instance는 Bastion Host를 겸할 수 있지만, NAT Gateway는 Bastion Host를 겸할 수 없습니다.

(+ NAT Gateway 관련 포스팅 보러 가기)

Bastion Host(Jump Server, 베스천 호스트)

외부, 즉 인터넷에서 Private Subnet에 접근하기 위한 Instance입니다.

NAT Gateway와 마찬가지로 Internet과 Private Subnet 내의 인스턴스와의 매개체 역할을 합니다.

  • NAT Instance : Private Subnet에서 외부와 통신하는 수단
  • Bastion Host : 외부에서 Private Subnet과 통신하는 수단

따라서 Bastion Host 역시 외부와 통신해야 하므로 Public Subnet 내에 위치해야 합니다.

(+ Bastion Host 관련 포스팅 보러 가기)

VPC Endpoint

AWS 바깥으로 트래픽이 나가지 않고, AWS 내부에서 여러 서비스를 사용할 수 있도록 도움을 주는 서비스입니다.

AWS 외부로 트래픽을 내보내지 않고 내부에서 수행할 수 있기 때문에 보안성 속도 면에서를 장점을 갖추고 있습니다.

VPC 엔드포인트를 통해 IGW, NAT 디바이스, VPN 연결 또는 AWS Direct Connect 연결이 필요 없이 Virtual Private Cloud(VPC)와 지원 서비스 간에 연결을 설정할 수 있습니다.

따라서 VPC에서 연결할 수 있는 특정 API 엔드포인트, 사이트 및 서비스를 제어합니다.

VPC 엔드포인트는 가상 디바이스로서, 수평으로 확장된 고가용성 중복 VPC 구성 요소입니다. 

  • 수평 확장성 : 같은 타입의 인스턴스를 여러 개  시작해 시스템을 수평적으로 확장하는 방법입니다.
  • 고가용성(HA) : 서버와 네트워크, 프로그램 등의 정보 시스템이 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 의미합니다.

Private Subnet은 인터넷과의 접점이 없지만, VPC Endpoint를 이용하면 AWS 내 다른 서비스들과 연결할 수 있습니다.

VPC Endpoint의 종류

1. Interface Endpoint

  • ENI(Elastic Network Interface) 기반, 즉 Private IP를 만들어 서비스로 연결시켜주는 방식입니다.
  • Interface Endpoint는 VPC 내부에 위치하고 있습니다.
  • SQS, SNS, Kinesis, Sagemaker 등 많은 서비스들을 지원해줍니다.

2. Gateway Endpoint

  • 라우팅 테이블에서 경로의 대상으로 지정해서 사용하는 방식입니다.
  • Gateway Endpoint는 Private Subnet 내부에 위치하고 있습니다.
  • S3 및 DynamoDB 서비스를 지원하고 있습니다.

(+VPC Endpoint 관련 포스팅 보러 가기)

VPC 구성요소 및 아키텍쳐

 


 

VPC 기초 실습 ✍🏻

이번 포스팅은 실습 과정까지 쓰다 보니 글이 너무 길어져 포스팅을 나누어서 올려보았습니다. 해당 실습 과정은 서로 이어지기 때문에 순차적으로 진행해주셔야 합니다.

또한, 실습 3까지 다 마치셨다면 반드시 즉시 리소스를 종료 및 삭제시켜서 과금을 방지하시길 바랍니다. 🥳

>> 이제 직접 Amazon VPC를 사용해 보러 가 볼까요?

 

VPC를 이용해서 나의 가상 환경 만들기 (AWS 강의실 - VPC 실습)

[실습1] VPC를 통한 가상 네트워크 환경 구현 with VPC, Subnet, IGW, Route Table, NACL 1. Custom VPC 만들기 우리들만의 가상 네트워크 환경을 구현해보아요 ☁️ AWS 페이지에 로그인한 후, 좌측 상단의 Ser..

rileyko.tistory.com

 

 

 


이 글은 유튜브 채널 AWS 강의실의 'AWS2 VPC(1)' 강의를 듣고, 요약하고, 공부하며 기록한 포스팅입니다. 잘못된 내용이 있거나 추가 의견이 있으시다면 언제든지 코멘트를 통해 소통 부탁드립니다. 🤗

 

AWS VPC(1)

참고