sol 개발 블로그 로고
Published on

AWS VPC 알아보기

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

개요

VPC(Virtual Private Cloud)는 AWS 클라우드에 있는 가상 사설 네트워크를 의미한다. 사설 네트워크는 외부와 단절된 것으로 이해할 수 있지만, 가상은 어떤 뜻인지 궁금해진다. 가상이란 뜻은 논리적으로 분리된 것을 의미한다. 물리적으론 동일한 컴퓨터 위에서 실행되지만 논리적으로 분리되어 다른 네트뤄크를 구성한다.

Subnets는 가용 영역(Availability Zone) 수준에서 정의되며 VPC 내부의 네트워크를 분할하여 VPC의 CIDR 범위를 가진다. 또한 공용 서브넷 (Public)은 VPC 외부 인터넷과 연결이 가능하며 사설 서브넷(Private)은 인터넷과 연결될 수 없다. 하지만 공용 서브넷과 사설 서브넷의 연결을 위해 라우팅 테이블을 정의할 수 있다.

VPC 다이어그램

vpc의 구조와 연결 방법

위 그림을 참고하면 Region 안에 VPC가 존재하고 VPC 안에 다시 여러 Subnet이 존재한다. VPC는 CIDR 범위를 가지며 VPC 내부 인스턴스들이 가질 수 있는 허용 IP 범위를 설정한다. 재미있는 점은 한 VPC 내부에 여러 AZ가 존재하는 것이다. 이는 VPC가 물리적 네트워크가 아닌 논리적 네트워크이기에 가능한 것이라고 생각한다.

CIDR

기본적으로 IP 주소는 32bit로 표현될 수 있다. 예를 들어 0.0.0.0이나 172.0.0.1과 같이 표현된다. 각 자리는 0~255까지의 범위를 가질 수 있기 때문에 8bit를 가지고 4자리이므로 4x8bit = 32bit이다.

서브넷 마스크는 IP 주소 앞 bit부터 고정시키는 마스킹이다. 이런 서브넷 마스크로 고정된 네트워크 부분과 그 크기를 나타낸 것이 CIDR이다. 네트워크 부분은 1로 호스트 부분은 0으로 표현되며 십진법으로 표현된다. 예를 들어 172.0.0.1/24일 때 /16는 앞부터 16bit 즉 172.0까지 서브넷 마스크로 고정시킨 것이고, 나머지 16bit만 서브넷이 얻을 수 있는 IP 범위이다.

인터넷 게이트웨이

VPC의 공용 서브넷 내부에 있는 EC2 인스턴스가 외부와 연결될 수 있는 방법은 인터넷 게이트웨이(Internet Gateway)와 연결하는 것이다. 라우팅 테이블은 공용 서브넷을 인터넷 게이트웨이로 직접 라우팅하며 EC2 인스턴스는 인터넷과 연결된다.

NAT 게이트웨이(NAT Gateway)는 사설 서브넷에 인스턴스가 아웃 바운드 연결을 할 수 있도록하지만 외부에서 인바운드 연결은 막는다. 사용법은 NAT 인스턴스를 공용 서브넷에 띄우고 사설 서브넷이 NAT 게이트웨이로 라우팅한다. 따라서 NAT를 통해 사설 서브넷 인스턴스가 인터넷을 접근할 수 있다.

네트워크 보안

  1. NACL(Network ACL) : 서브넷의 인, 아웃 바운드 연결을 제어하는 방화벽. 특정 IP에서 오는 트래픽을 허용하거나 거부할 수 있다. 모든 공용 서브넷으로 들어오는 트래픽은 먼저 NACL을 통하기 때문에 공용 서브넷의 첫번째 방화벽이다. 기본 설정으로 모두 허용상태이다.
  2. Security Groups : EC2나 ENI 같은 인스턴스로의 인, 아웃 바운드 연결을 제어하는 방화벽. 오직 허용 규칙 밖에 없으므로 연결이 필요한 IP나 SG에 대해서 정의해줘야한다.

VPC Flow Logs

VPC로 흐르는 IP 트래픽의 정보를 캡처한 것. VPC 뿐만 아니라 Subnet, ENI도 Flow Logs를 가지고 있다. VPC를 지나는 모든 로그를 저장하기 때문에 네트워크와 관련된 대부분의 문제를 확인할 수 있다. 또한 AWS가 관리하는 대부분의 서비스( ELB, ElasiCahe, RDS,... )의 문제가 VPC Flow Logs에 나타난다. 또한 로그는 S3sk CloudWatch Log에 저장할 수 있다.

VPC Peering

각각 다른 계정이나 다른 Region에 있는 두 VPC가 있을 때 이를 동일한 AWS 네트워크로 서로 통신할 수 있게한다. 두 VPC가 연결되려면 각 VPCIP 범위가 겹치지 않게해야한다.

VPC Peering은 전이적이 아니기 때문에 두 VPC 전부 Peering과 연결돼야한다. 또한 A,B, 그리고 C가 있을 때 A와 B가 연결되고 B와 C가 연결돼도, A와 C가 연결되진 않는다.

VPC Endpoint - 중요!!

AWS 서비스에 연결할 때 공개 네트워큭 대신 사설 네트워크(Private network)를 이용할 수 있다. 이 말 뜻은 모든 AWS 서비스는 공개되어 있고, EC2 인스턴스가 AWS 서비스를 이용할 때 공개 인터넷을 사용한다. 그러나 사설 서브넷에 있는 EC2 인스턴스는 AWS 서비스를 프라이빗하게 액세스할 필요가 았다. 이때 VPC 엔드포인트를 사용한다. AWS 서비스에 접근하는데 보안이 강화되고 지연도 감소한다.

VPC Endpoint Gateway를 통해서 VPC 외부 AWS 서비스(S3, DynamoDB)와만 연결 할 수 있다. **오직 인터넷이 아닌 서비스프라이빗하게 **연결**하기 위함이다.

VPC Endpoint Interface는 VPC 내부의 다른 인스턴스와 연결할 때 사용한다. 예를 들어 VPC Endpoint Interface로 ENI와 연결하고, 이는 CloudWatch와 연결되면 결국 CloudWatch가 사설 서브넷의 EC2 상태를 체클할 수 있게된다.

결국 AWS 서비스에 프라이빗하게 접근하려면 VPC Endpoint가 그 방법이다.

On-premises와 연결

실제 데이터 센터를 운영하는 서버와 VPC를 연결하는 방법은 두가지가 있다.

  1. Site to Site VPN
    • on-premises VPN과 AWS를 연결
    • 연결은 자동으로 암호화, 공개 인터넷 상에서 연결
    • 쉬운 사용법
  2. Direct Connect
    • on-premises VPN과 AWS를 연결
    • 물리적으로 연결되기 때문에 프라이빗하게 연결
    • 빠르고 안전하다.
    • VPC로 실제 물리적 네트워크를 구축하는데 몇 개월이 걸리기도한다.