ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS VPC란?
    개발 2020. 3. 24. 17:18

     

    AWS 공식 사이트에서는 아래와 같이 VPC를 설명하고 있다.

     

    "Amazon Virtual Private Cloud(Amazon VPC)에서는 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사합니다."

     

    VPC 출시 전 다른 사용자들과 함께 사용하는 "EC2-클래식 네트워크" 를 해야했고 VPC 출시 이후 사용자들에게 VPC는  강제적으로 적용되고 있다.

     

    아래와 같이 VPC 이전 EC2-클래식 네트워크는 여러 사용자의 인스턴스들이 거미줄처럼 얽혀있어 복잡도가 높았다. 

     

     

     

     

    Amazon VPC가 도입된 이후로 아래와 같이 VPC는 필수가 되었기에 사용자는 직접 VPC를 생성해서 사용할 수도 있고 계정을 생성시 리전별로 디폴트로 생성되는 VPC를 사용할 수 있다. 

     

     

     

     

    각 VPC를 상세하게 보면 일반적으로 아래와 같이 되어 있는데, VPC의 경우 사설 IP 대역으로 구축을 하게 되고 필요에 의해 IP대역을 서브넷으로 나눠서 관리하게 된다. 

     

    그럼 이런 서브넷은 VPC의 사설 IP에서 어떤식으로 나누는걸까? 

     

    VPC의 사설 IP 대역대 중 하나인 172.16.0.0/16 을 기준으로 설명하면 "/16" 은 사이더(cidr)라고 하는데 해당 값을 통해 해당 IP의 네트워크 영역과 호스트 영역을 구분할 수 있게 된다. 

     

    172.16.0.0 을 2진수로 표현하면 10101100. 00010000. 00000000. 00000000 이렇게 "."으로 구분된 총 32자리 2진수가 나오는데 이 2진수 중 어디까지가 네트워크 영역인지 알 수 있다. 

     

    위의 값을 기준으로 사이더가 16이므로 위 이진수에서는 "10101100. 00010000" 이 네트워크 영역, "00000000. 00000000" 이 호스트 영역이 된다. 

     

     

     

    이 IP는 더 작은 단위인 서브넷으로 나눌 수 있는데 이를 서브넷팅이라 한다. 

     

    만약 해당 IP로 서브넷을 4개가 필요하다고 가정하자. 이 경우 호스트 영역을 더 작게 나눠서 서브넷팅 하게 된다. 

     

    예로 각 자리는 2진수 이므로 4개 영역을 구하기 위해서 호스트 영역 "000000000.  000000000" 중 앞의 두자리 00 은 2 * 2가 되므로 4개의 서브넷을 나눌 수 있는 기준이 된다. 

     

    00으로 표현할 수 있는 가지수는 00, 01, 10, 00 총 4가지이므로 아래와 같이 4개로 나눌 수 있는 것이다. 

     

    00 000000. 00000000

    01 000000. 00000000

    10 000000. 00000000

    11 000000. 00000000

     

    다시 처음 네트워크 영역과 결합하면 아래와 같이 되고 2개의 호스트 영역을 네트워크 영역으로 사용 하였으므로 사이더는 18이 된다. 

     

    10101100. 000010000. 00000000. 00000000  /18

    10101100. 000010000. 01000000. 00000000  /18 

    10101100. 000010000. 10000000. 00000000  /18

    10101100. 000010000. 11000000. 00000000  /18

     

    이제 각 서브넷은 호스트 영역인 "2 의 14제곱 - 2" (브로드캐스트 주소, 네트워크 주소 제외)  로 IP 주소를 할당 할 수 있게된다 

     

    이런 서브넷팅을 통한 장점은 한 네트워크 안에서는 브로드캐스트를 보내게 되면 모든 호스트가 브로드캐스트 패킷을 받게 되는데 이 경우 불필요한 네트워크 부하가 발생하여 네트워크 성능이 저하된다.  또한 하나의 네트워크(IP)를 여러개로 서브넷팅 함으로 IP 낭비를 줄일 수 있고 보안에도 이점을 가질 수 있다.

     

    그럼 위와 같이 4개의 서브넷으로 나눴다고 가정하고 설명을 이어나가겠다. 

     

     

     

     

    이 각각의 서브넷은 라우터를 통하지 않는한 동일한 서브넷 내에서만 통신할 수 있다. AWS의 경우 계정 생성과 함께 생성되는 디폴트 VPC에는 기본적으로 서브넷이 생성되어있고 해당 서브넷은 기본으로 생성된 디폴트 라우팅 테이블을 바라보게 되어있다. 

     

    아래가 기본으로 생성되어져 있는 디폴트 라우팅 테이블이다. 

     

     

     

     

    현재 우리 계정에는 디폴트 VPC와 새로 생성한 VPC 두개가 있기 때문에 아래 이미지와 같이 여러개의 서브넷이 존재하며 이중 3개의 서브넷이 기본 디폴트 서브넷이다. 

     

     

     

     

    위의 정보로 미루어볼때 디폴트 VPC 의 IP 대역은 172.31.0.0/16 이고 현재 서브넷은 총 3개 생성되어져 있다. 

     

    이전에 언급 했던 것 같이 라우터를 통하지 않으면 다른 서브넷으로의 통신이나 외부로의 통신이 되지 않는데 이런 점을 이용해서 보통 VPC의 서브넷을 구성할 때 내부에서 private하게 사용하는 자원의 경우는 인터넷 게이트웨이로 나갈 수 없게 라우팅 테이블에 연결을 하지 않고 외부와 통신할 일이 있을

     

    경우에는 인터넷 게이트웨이와 연결하여 외부로 IN, OUT 할 수 있게 처리한다. 

     

    조금 더 상세하게 통신의 방법을 살펴보면 동일한 네트워크 내 (서브넷 범위)에서의 통신은 mac address 를 통해서 할 수 있는데, Client는 이런 mac address 정보를 알지 못하기에 브로드캐스트를 통해 동일한 네트워크 상의 호스트에게 통신을 시도한다. 예로 우리 네트워크 안에 "172.16.1.0 아이피를 가진 호스트 있어? 있으면 mac address 좀 알려줘" 라고 말이다. 

     

    이런 과정을 arp protocol이라 한다. 

     

    이 과정의 결과로 해당 아이피를 가진 호스트가 있다면 응답으로  mac address 값을 주고 이 값을 통해 통신은 이루어진다. 

     

    각 호스트(Client)는 사이더를 통해 통신하고자 하는 IP가 동일한 네트워크에 속해있는지 구분할 수 있고 만약 동일한 네트워크가 아니라면 라우터로 데이터를 전송하게 된다. 

     

    위 이미지의 0.0.0.0/0 이 해당 내용이다. 인터넷 게이트웨이는 라우터라고 생각하면 될 것이다. 

     

    라우팅 테이블에 외부로 통할 수 있는 인터넷 게이트웨이를 연결함으로써 public 하게 동작할 수 있게 하는 것이다. 

     

    이렇듯 VPC 를 생성 후 용도에 따라 서브넷팅을 통해 서브넷을 나누고 각각의 용도에 맞게 설정함으로서 보안적인 측면이나 자원적인 측면에서 이점을 가질 수 있다. 

     

     

     

     

    '개발' 카테고리의 다른 글

    Spring security 동작 방식 정리  (0) 2020.05.02
    Clustering Index란?  (0) 2020.04.05
    Java Garbage Collection (GC)  (0) 2020.03.21
    AWS IOT Rule Engine 을 통한 Elasticsearch 연동  (0) 2020.03.20
    AWS Elasticsearch  (0) 2020.03.20
Designed by Tistory.