AWS VPC basic

최근 그림으로 배우는 클라우드 인프라와 API의 구조라는 책을 읽게 되면서, 클라우드 인프라에 대해 새롭게 알게 된(그동안 모르고 써왔던) 사실이 많이 있었다.

그중에서도 특히 그동안 어? 이렇게 하니까 되네! 하고 감으로 써왔던 AWS VPC(Virtual Private Cloud)에 대해 조금은 더 이해할 수 있게 된 것 같아 새롭게 알게된 내용들을 정리해 본다.

VPC 설명 전에 알고 있으면 좋은 키워드

  • 테넌트 (Tenent)
    클라우드 서비스 이용자가 갖게 되는 자신만의 격리된 환경 을 테넌트라고 한다.
    혹 다른 이용자와, 물리적으로는 하나의 서버를 공유하게 되더라도
    논리적으로 분리된 멀티 테넌트 환경에 의해서 클라우드 리소스를 보호 받을 수 있다.
    AWS에서는 하나의 관리자 계정(AWS 콘솔 루트 사용자)에 의해 관리되는 환경을 테넌트라 할 수 있다.

  • 리전 (Region)
    클라우드 인프라가 위치한 국가나 지역을 식별할 수 있도록 분리한 것을 리전이라고 한다.
    AWS에서는 미국 동/서부, 캐나다, 유럽, 아시아, 남미 중에서 리전을 선택해서 사용할 수 있다.
    (중국, 프랑스, 홍콩, 스웨덴 등이 준비 중이다.)
    2017년 9월 현재 Asia Pacific에는 싱가포르, 시드니, 서울, 도쿄, 뭄바이 리전이 존재한다.
    참고: AWS Region Table

  • AZ (Availability Zone)
    동일 리전안에서 리소스가 운용되는 데이터 센터를 Availability Zone(줄여서 AZ)으로 나눠서 관리한다.
    여러개의 AZ에 동일 리소스/서비스를 분산/배포해서, 특정 데이터 센터(zone)에서 발생하는 장애에 대비할 수 있다.
    동일 region안에서의 AZ간 발생하는 latency 문제는 low-latency links를 통해서 보장해준다고 한다.
    AWS의 컨디션이나 계정에 따라 특정 AZ의 사용이 제한될 수 있다.

    국내 대상 서비스에는 물리적으로 가까운 도쿄, 서울 리전이 주로 사용된다.
    AZ는 리전 코드식별 문자의 조합으로 표시된다.

    • 도쿄 리전은 다음의 3개의 AZ로 구분된다.
      • ap-northeast-1a
      • ap-northeast-1b
      • ap-northeast-1c
    • 서울 리전은 다음의 2개의 AZ로 구분된다.
      • ap-northeast-2a
      • ap-northeast-2c
  • CIDR (Classless Inter-Domain Routing)
    VPC resource는 CIDR로 IP대역을 정의한다.
    일반적으로 VPC는 private IP 대역인 다음 대역 내에서 CIDR을 정의한다.

    * 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)
    

    여기서 / 뒤에 붙는 숫자 8, 12, 16은 IP의 앞에서부터 각각 8비트, 12비트, 16비트가 네트워크 주소로 사용 됨을 의미한다. 32비트로 이뤄진 ipv4 주소에서 네트워크 주소를 제외한 24, 20, 16비트가 호스트를 나타내는 주소로 사용된다.
    예를들면 10.1.1.0/24 의 경우
    2진수로 00001010.00000001.00000001.00000000/24 로 나타낼 수 있고
    여기서 24는 앞에서 24비트인 00001010.00000001.00000001를 고정하고 마지막 8비트를 변경가능한 IP 대역 (10.1.1.0 ~ 10.1.1.255)으로 사용하게된다.

VPC (Virtual Private Cloud)

  • Amazon Virtual Private Cloud 사용 설명서에 따르면, VPC사용자의 AWS 계정 전용 가상 네트워크를 의미한다.
  • VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있고, Amazon EC2 인스턴스와 같은 AWS 리소스를 VPC에서 실행할 수 있다.
  • VPC는 반드시 하나의 Region에 종속되어 운영되며, 다수의 AZ를 이용하여 설계할 수 있다.
  • VPC에 단일 CIDR(Classless Inter-Domain Routing) 블록을 지정할 수 있다. 허용된 블록 크기는 /16 넷마스크 ~ /28 넷마스크이고, 따라서 VPC는 16 ~ 65,536개의 IP 주소를 포함할 수 있다.

물리 네트워크와 비교해보면…

VPC 메뉴의 각 항목을 설명하기 전에 물리 네트워크 예제를 간단히 이해하고 넘어가면, VPC의 각 항목이 각각 물리 네트워크의 어떤 부분에 매칭이 되는지 그려보면서 이해할 수 있어 도움이 된다.

아래는 Internet ISP에 연결된 공인 IP(210.1.22.33)를 가정용 공유기(Router)스위치를 이용해 사설(가상) 네트워크(192.168.0.0/24)로 공유해서 인터넷을 사용하는 간단한 홈랜 네트워크 구조이다.

homelan

[ 그림1 – 공유기를 사용하는 네트워크 ]

그림1 에서 파란색 점선은 private ip(virtual ip)로 통신하는 부분, 붉은색 점선은 public ip(real ip)로 통신하는 부분을 나타낸다.

가정에서 흔히 사용하는 공유기는 여러가지 기능을 제공하는데 이 중 VPC의 이해를 도와줄 공유기의 주요 기능을 살펴보면 다음과 같다.

  • 라우터 (Router)
    라우터는 서로 다른 네트워크간의 통신을 중계한다.
    여기서 다른 네트워크란 subnet mask가 다른 네트워크로 이해하면 쉽다.

  • 스위치 (Switch), DHCP
    전송 시에 사용하는 OSI 7 Layer에 따라 L2, L3, L4, L7으로 구분한다.
    공유기 내부에서 사용하는 스위치나, 저가에 판매되는 대부분의 스위치는 L2 스위치를 칭한다.
    각 포트에 연결된 MAC address를 기억하고 있다가 스위치로 들어온 요청에서 destination MAC address를 읽어, 해당 MAC address로 연결된 port로 데이터를 전송하는 역할을 한다.

  • NAT (Network Address Translation)
    외부 네트워크와 통신할 때는 반드시 public IP를 통해야 한다.
    그런데, 공유기 내부의 장비(PC)들은 private IP만 할당받았기 때문에, private IP만으로는 외부 네트워크와의 통신이 불가능하다.
    이때 공유기의 NAT기능을 통해서 외부로 나가는 요청은 public IP로 변환(IP Masquerading)되어 전송되고, 요청에 대한 응답이 오면 요청했던 내부 IP로 전달해주는 역할을 한다.

  • DHCP (Dynamic Host Configuration Protocol)
    공유기에 연결된 새로운 장비에 동적으로 IP 주소를 할당한다.

  • 방화벽 (Firewall)
    내부로 들어오는/외부로 나가는 IP/PORT를 특정 규칙으로 통제할(열거나 닫을) 수 있다.

그림1의 공유기를 사용하는 네트워크를 AWS VPC에 매칭해서 그려보면 다음과 같다.

AWS VPC

[ 그림2 – 공유기에 대응하는 AWS VPC 네트워크 ]

앞에서 설명했던 공유기의 주요기능을 다음과 같은 AWS resource가 대신한다고 볼 수 있다.

  • 라우터 (Router)
    Internet Gateway + Route Table이 라우터를 대신한다.
    Internet Gateway는 VPC마다 최대 하나씩 할당하며, VPC의 Internet연결을 위해 사용한다.
    Route Table은 (서브넷의) 네트워크 트래픽을 전달할 위치를 결정하는데 사용한다.

  • 스위치 (Switch), DHCP(Dynamic Host Configuration Protocol)
    AWS는 스위치를 별도로 구분하지 않고, Subnet이 (가상)스위치의 기능을 포함한다.
    가상 스위치는 가상 라우터와 가상 머신 인스턴스의 가상 NIC(Network Interface Card)이 연결되는 접점이된다.
    하나의 가상 스위치에 하나의 서브넷이 할당되는데, 여기서 서브넷은 가상 머신 인스턴스가 사용할 수 있는 사설 IP주소의 범위를 의미한다.
    서브넷에 연결된 인스턴스는 기동 시 DHCP를 통해 IP 주소를 할당받게 된다.

  • NAT (Network Address Translation)
    NAT instance나, NAT Gateway가 NAT를 대신한다.

  • 방화벽 (Firewall)
    NACL(Network ACL)Security Group이 방화벽을 대신한다.

이제 VPC의 세부 메뉴들을 살펴보자.

Virtual Private Cloud

  • Your VPCs
    VPC 목록을 조회할 수 있고, 각 VPC에 설정된 CIDR, DHCP 설정등을 변경할 수 있다.

  • Subnet
    가상 인스턴스가 사용할 수 있는 사설 IP 주소의 범위
    서브넷이 라우팅 테이블을 통해 인터넷 게이트웨이에 연결된 경우, 이를 퍼블릭 서브넷이라고 한다.
    VPC외부에서 바로 접근할 수 없는 서브넷을 프라이빗 서브넷이라 한다. 프라이빗 서브넷의 리소스가 외부에 접촉하기 위해서는 반드시 퍼블릭 서브넷(NAT, bastion, ELB 등)을 통과해야 한다.

  • Route Tables
    subnet에서 outbound로 나가는 트래픽의 destination(ip대역), target(local, IGW, NAT등)을 정의한다.
    VPC를 생성하면 자동으로 기본 라우팅 테이블을 생성한다.

  • Internet Gateways
    VPC가 인터넷에 연결되기 위해서는 Internet Gateway가 반드시 필요하다. 줄여서 IGW로 표현하기도 한다.
    NAT 와 IGW의 차이점에 대한 질문에서
    IGW는 벽에 나있는 랜포트로 생각하고 NAT는 가정용 공유기를 생각하면 된다는 답변이 인상깊었다.

  • Egress Only Internet Gateways
    outbound만 허용하는 IGW

  • DHCP Options Sets
    VPC를 생성하면 자동으로 DHCP 옵션 세트가 생성되어 VPC에 연결된다.
    추가로 설정하는 경우는 아직 경험해 보지 못했다.

  • Elastic IPs
    Elastic IP (public 고정 아이피), 줄여서 EIP로 표현하기도 한다.
    모든 인스턴스 또는 네트워크 인터페이스에 EIP를 부여할 수 있다.
    실행 중인 인스턴스의 경우 1개의 EIP를 무료로 사용할 수 있다.
    실행 중이 아닌 상태로 EIP가 연결된 경우, 혹은 1개의 인스턴스에 2개이상의 EIP를 부여한 경우 1개를 초과하는 추가 EIP에 대해 요금이 부과된다.

  • Endpoints
    VPC endpoint를 사용하면 NAT 디바이스나 VPN 연결 또는 AWS Direct Connect를 통해 인터넷에 액세스하지 않고도 VPC와 다른 AWS 서비스 간에 프라이빗 연결을 생성할 수 있다.
    현재로서는 엔드포인트와 Amazon S3 및 DynamoDB의 연결만 지원된다.

  • NAT Gateways
    기존에는 NAT용 AMI를 사용한 NAT instance를 주로 사용했으나 NAT Gateway가 출시되고
    VPC에서 NAT연결은 NAT Gateway사용을 권장한다.
    프라이빗 서브넷에서 외부(인터넷)에 접근하기 위해서 사용한다.
    NAT인스턴스는 인스턴스의 스펙에 의해 트래픽을 제한 받지만, NAT 게이트웨이를 사용할 경우 10Gbps까지 트래픽을 처리할 수 있다고 한다.

  • Peering Connections
    VPC to VPC의 연결을 관리한다.
    내 계정 또는, 다른 계정이 소유하고 있는 VPC에 연결할 수 있다.

Security

  • Network ACLs
    subnet의 IN/OUT bound를 정의한다.
    허용 규칙만 지원
    instance간 서브넷이 다른 경우 NACL이 적용 됨
    Stateless필터링: 요청 정보를 저장하지 않기 때문에 in/out모두 정의 해야 함

  • Security Groups
    instance의 IN/OUT bound를 정의한다.
    허용, 금지 규칙을 지원
    instance간 서브넷이 같은 경우 Security Group만 적용 됨
    Stateful필터링: 요청 정보를 저장하기 때문에 out을 별도로 정의하지 않아도 됨

VPN Connections

  • Customer Gateways
    VPN 연결을 위해 고객 측에 설치된 물리적 디바이스 또는 소프트웨어 애플리케이션.

  • Virtual Private Gateways
    AWS 내부에서 외부 VPN에 연결하기 위해 사용하는 게이트웨이

  • VPN Connections
    Customer Gateway와 Virtual Private Gateway를 연결하면 하나의 VPN Connection이 생성된다.

VPC 메뉴에서 배웠던 개념을 활용해서 VPC 네트워크를 설계해보자.

AWS VPC2

  • 두개의 AZ위에 public / private subnet으로 구분한 서브넷을 올리고 public subnet에는 외부로 나가는 트래픽을 위해 NAT – IGW를 연결했다. 그림에는 보이지 않지만 각각의 연결단계에서 라우팅테이블로 아웃바운드 룰을 정의한다.

  • 바스티온은 private subnet에 위치한 인스턴스에 SSH등으로 접근하기 위해 사용하는 서버를 칭한다.

  • public subnet에 ELB 혹은 ALB를 셋업해 외부에서 private subnet에 운영 중인 서비스에 접근할 수 있도록 할 수 있다.

다음 편 예고

  • 위에서 배운 개념을 토대로 terraform을 사용해서 코드로 VPC network를 구성해 본다.

참고자료

공식: Amazon VPC란 무엇인가?
그림으로 배우는 클라우드 인프라와 API의 구조
AWS VPC를 디자인해보자 – ㅍㅍㅋㄷ 블로그
Terraform으로 VPC 설정하기 – 송은우의 언어들
Tefraform으로 AWS VPC 생성하기 – outsider님 블로그
Difference between Internet gateway and NAT gateway in VPC?

Comments

comments