[AWS 네트워크 지식 01] 아마존 VPC란?
아마존 VPCVirtual Private Cloud는 사용자 전용 가상 네트워크로 AWS의 클라우드 환경에서 네트워크를 구성하고 관리할 수 있는 서비스입니다. 쉽게 말해 사용자가 원하는 대로 라우팅 테이블 구성, IP 주소 범위 선택, 서브넷 생성 등으로 구성해 가상 네트워크 환경인 VPC를 생성할 수 있습니다. 이렇게 생성된 네트워크는 리소스를 효율적으로 관리하고 보안 및 접근 제어를 강화할 수 있도록 여러 개의 부분 네트워크로 나눕니다. 이렇게 나눈 부분 네트워크를 서브넷이라고 하며, 이 안에서도 독립적으로 리소스를 생성하고 관리할 수 있습니다.
또한 VPC를 이용하면 인터넷과 통신할 수 있는 환경을 만들거나 회사 내부 네트워크를 통해서만 접속할 수 있도록 설정할 수 있으며, AWS에서 제공하는 다양한 서비스를 배치하여 운영하고 관리할 수 있습니다. 자 이제 아마존 VPC를 사용하기 앞서 어떤 것들로 구성되어 있는지 살펴봅시다.
1. 아마존 VPC 구성 요소 살펴보기
클라우드 환경에서 네트워크를 구성하는 아마존 VPC에 어떤 구성 요소가 있고 역할을 하는지 알아보겠습니다. 우선 여기에서는 각각 어떤 기능을 하는지 간단히 표에 정리했습니다.
▶아마존 VPC 구성 요소
2. 서브넷
서브넷Subnet은 네트워크를 더 작은 단위로 나눈 것으로 AWS의 VPC 안에서도 네트워크를 부분으로 나눌 수 있으며 VPC 하나는 서브넷 N개를 가질 수 있습니다. AWS에서 VPC를 생성할 때 사용자는 VPC에 할당할 CIDR 범위를 지정하고 이를 기반으로 서브넷을 나눌 수 있습니다. 서브넷은 퍼블릭 서브넷Public Subnet과 프라이빗 서브넷Private Subnet으로 나누어집니다.
퍼블릭 서브넷은 인터넷과 연결되어 있어 직접 통신이 가능한 서브넷으로, 외부에서 접근 가능한 리소스를 호스팅하는 데 사용됩니다. 퍼블릭 서브넷은 외부에서 접근 가능하기 때문에 서버나 데이터베이스와 같은 중요 리소스를 배치할 때 보안 관리에 신중해야 합니다. 반면 프라이빗 서브넷은 외부와의 통신이 불가능하여 주로 내부 서버나 데이터베이스와 같은 중요한 리소스를 배치합니다. 프라이빗 서브넷은 외부에서의 직접 접근을 제한할 수 있기 때문에 보안에 민감한 데이터를 주로 저장하여 내부 시스템이나 데이터의 보안을 유지합니다. 프라이빗 서브넷은 직접적으로 외부와 통신이 불가능하기 때문에 외부와 통신하려면 퍼블릭 서브넷을 거쳐야 합니다. 그렇다면 AWS의 VPC에서 퍼블릭 서브넷과 프라이빗 서브넷을 어떻게 생성하는 게 좋을까요?
▼ 퍼블릭 서브넷과 프라이빗 서브넷 구성 예
VPC 안에서 퍼블릭 서브넷과 프라이빗 서브넷을 생성할 때는 일반적으로 가용 영역에 서브넷을 최소한 두 개를 생성합니다. 앞서 말했듯 VPC 하나는 서브넷 N개를 가질 수 있으며, 서브넷은 하나의 가용 영역 내부에만 생성이 가능하여 여러 가용 영역에 걸쳐서 생성하는 것은 불가능합니다. 다음과 같이 구성하면 서브넷이 여러 가용 영역에 분산되어 있기 때문에 한 가용 영역에서 장애가 발생해도 다른 가용 영역에 있는 서브넷을 통해 서비스를 지속할 수 있으므로 가용성이 향상됩니다. 또한 다중 가용 영역 서브넷을 구성하면 서버의 분산과 확장이 가능해지므로 트래픽이나 리소스의 증가에 유연하게 대응할 수 있어 확장성을 가집니다. 따라서 퍼블릭 서브넷과 프라이빗 서브넷을 여러 가용 영역에 생성함으로써 안정적인 인프라를 구축할 수 있습니다.
그렇다면 퍼블릭 서브넷과 프라이빗 서브넷이라는 이름을 가진 서브넷을 AWS에서 생성할 수 있을까요? 앞의 그림을 보면 퍼블릭 서브넷과 프라이빗 서브넷이 있지만 이름만 저렇게 설정한 것이고, 실제로는 프라이빗 서브넷이 4개 있는 것과 마찬가지입니다. AWS에서는 서브넷을 생성할 때 퍼블릭 서브넷이나 프라이빗 서브넷으로 직접 지정하여 생성할 수 없습니다. 대신 서브넷을 생성한 다음 해당 서브넷에 대한 네트워크 설정을 통해 서브넷이 퍼블릭이나 프라이빗 서브넷으로 동작하도록 설정할 수 있습니다. 그렇다면 인터넷과 통신이 가능한 퍼블릭 서브넷은 어떻게 생성해야 할까요? 바로 인터넷 게이트웨이를 통해 네트워크 설정을 합니다.
3. 인터넷 게이트웨이
VPC는 기본적으로 격리된 네트워크 환경으로 VPC 내에서 생성된 리소스는 인터넷과 통신을 할 수 없습니다. 이때 VPC의 리소스를 인터넷과 통신하는 것이 인터넷 게이트웨이입니다. 인터넷 게이트웨이Internet Gateway는 리전 단위로 생성되는 서비스로 특정 VPC나 서브넷에 속하지 않으며, 해당 리전 내에서 인터넷 연결을 제공하는 역할을 합니다.
VPC에 생성한 서브넷은 모두 프라이빗 서브넷이기 때문에 퍼블릭 서브넷으로 바꾸는 작업이 필요합니다. 다음 그림은 VPC에서 인터넷과 통신하는 구조입니다.
AWS에서 인터넷 게이트웨이를 생성하고 서브넷에 인터넷 게이트웨이의 라우팅을 설정하면 해당 서브넷은 인터넷과 통신이 가능한 퍼블릭 서브넷이 됩니다. 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 경우 퍼블릭 서브넷입니다.
4. NAT 게이트웨이
NAT 게이트웨이Network Address Translation Gateway는 프라이빗 서브넷에 있는 리소스가 외부 인터넷과 통신하는 데 사용하는 퍼블릭 서브넷에 있는 서비스입니다. 프라이빗 서브넷의 리소스는 NAT 게이트웨이를 통해서 인터넷과 통신하며 필요한 데이터를 주고받습니다. 그래서 NAT 게이트웨이는 프라이빗 서브넷 내의 리소스가 외부 리소스에 접근할 수 있도록 하면서도 외부의 직접적인 접근을 제한하여 보안을 유지하는 효과도 있습니다. 그림을 봅시다.
그림을 보면 NAT 게이트웨이는 퍼블릭 서브넷에 있고, 퍼블릭 서브넷은 라우팅 테이블을 통해 인터넷과 연결되어 있습니다. 이때 프라이빗 서브넷과 인터넷의 연결을 NAT 게이트웨이가 중개합니다. 어떻게 중개하는지 살펴보겠습니다. ➊ 우선 프라이빗 서브넷에서 라우팅 테이블을 통해 NAT 게이트웨이로 접근합니다. ➋ 그런 다음 NAT 게이트웨이에서는 다시 라우팅 테이블을 통해 인터넷과 연결합니다. 이렇게 NAT 게이트웨이를 거쳐 인터넷에 연결되므로 프라이빗 서브넷은 인터넷과 직접적으로 연결되지는 않으면서도 필요한 데이터나 리소스를 안전하게 가져올 수 있습니다.
프라이빗 서브넷에 있는 라우팅 테이블에는 NAT 게이트웨이까지의 경로가 적혀 있습니다. 이를 참고하여 NAT 게이트웨이와 프라이빗 서브넷의 서비스가 서로 연결될 수 있습니다.
보통 가용성을 위해 NAT 게이트웨이는 생성된 퍼블릭 서브넷마다 하나씩 생성하는 것이 권장됩니다. 그러나 요금과 관련하여 주의해야 할 점이 있습니다. 기본적으로 VPC 구성 요소 중 서브넷, 보안 그룹, NACL, 인터넷 게이트웨이에 대해서는 따로 사용료가 없지만 NAT 게이트웨이는 예외입니다. NAT 게이트웨이는 기본적으로 트래픽이 발생할 때 데이터 처리 요금이 발생하여 계속 돌려놓고만 있어도 시간당 요금이 청구되는 서비스입니다. 2024년 기준으로 NAT 게이트웨이는 시간당 USD 0.059의 요금이 발생하므로 비용과 가용성 중 어떤 것을 더 우선할지에 따라 균형있게 고려한 최적의 결정을 내리는 것이 중요합니다.
5. 라우팅 테이블
서브넷은 각각 서로 다른 네트워크 영역을 가지기 때문에 한 서브넷에서 발생한 요청이 다른 서브넷으로 전송되려면 라우팅이 필요합니다. 라우팅 테이블Routing Table은 VPC 안에서 발생한 네트워크 요청이 서브넷 내의 트래픽이 어디로 전송되어야 하는지를 알려주는 역할을 합니다. 즉 네트워크에서 목적지에 도달하게 하기 위해 목적지 주소를 네트워크 노선으로 변환시키는 역할을 합니다. 이를 통해 서브넷 간의 통신 및 외부 리소스와의 연결을 관리할 수 있습니다. 또한 앞서 살펴본 인터넷과 연결하는 통로 역할을 하는 인터넷 게이트웨이와 외부 인터넷과 통신에 사용하는 NAT 게이트웨이를 사용하려면 해당 게이트웨이로의 라우팅을 설정해야 합니다. 그렇다면 라우팅 테이블은 어떻게 연결되어 있는지 다음 그림을 통해 확인해봅시다.
라우팅 테이블에서는 서브넷을 연결할 수 있습니다. 퍼블릭 서브넷으로 사용하고자 하는 서브넷을 해당 라우팅 테이블에 연결하고, 인터넷 게이트웨이로의 라우팅을 설정하면 이 라우팅 테이블에 연결된 서브넷은 인터넷에서 접속이 가능한 퍼블릭 서브넷이 됩니다. 서브넷과 라우팅은 다양한 관계를 가질 수 있습니다. 일반적으로 퍼블릭 서브넷은 인터넷 게이트웨이를 통해 외부 인터넷과 통신하며, 인터넷 게이트웨이 이외의 별도의 라우팅 설정이 없기 때문에 하나의 라우팅 테이블에 여러 퍼블릭 서브넷을 연결하여 일대다 관계를 유지하는 것이 일반적입니다. 반면에 프라이빗 서브넷에는 서버, 데이터베이스 등 다양한 리소스가 존재하며, 각 리소스마다 다른 라우팅 대상을 가질 수 있습니다. 이런 때에는 각 서브넷에 대해 별도의 라우팅 설정을 할 수 있으며, 일대일 관계를 유지하는 것이 일반적입니다. 하지만 같은 라우팅을 공유해야 하는 때에는 프라이빗 서브넷에도 일대다 관계를 설정할 수 있습니다. 이런 구성을 통해 서브넷과 라우팅을 유연하게 관리하여 네트워크 아키텍처를 최적화할 수 있습니다.
라우팅에는 라우팅 대상을 설정합니다. 라우팅 테이블에서는 기본적으로 VPC CIDR이 지정되어 있으며, 이는 라우팅 테이블 생성과 함께 자동으로 지정되는 항목입니다. 퍼블릭 서브넷의 라우팅 테이블에는 인터넷 게이트웨이의 라우팅을 설정하며 0.0.0.0/0을 지정합니다. 여기서 0.0.0.0/0은 모든 통신을 허용하겠다는 것을 의미합니다. 프라이빗 서브넷의 라우팅 테이블에는 NAT 게이트웨이를 지정하고 인터넷 게이트웨이와 마찬가지로 0.0.0.0/0을 지정합니다.
NAT 게이트웨이가 없는 환경도 있을 수 있습니다. 이 경우 라우팅 테이블에는 VPC의 CIDR 범위와 사용자가 직접 지정한 라우팅 항목만이 포함됩니다.
6. VPC 엔드포인트
VPC 엔드포인트VPC Endpoint는 VPC의 외부 서비스나 다른 서비스와 안전하게 연결하는 데 도움을 주는 서비스입니다. 이런 VPC 엔드포인트에는 인터페이스 엔드포인트Interface Endpoint와 게이트웨이 엔드포인트Gateway Endpoint 두 가지 유형이 있습니다.
인터페이스 엔드포인트
인터페이스 엔드포인트Interface Endpoint는 사설 IP 주소를 할당받아 AWS에서 제공하는 프라이빗 연결 공간인 프라이빗링크PrivateLink를 통해 VPC 내의 서버는 인터넷을 거치지 않고도 AWS의 다른 서비스와 안전하게 통신할 수 있습니다.
▼ 인터페이스 엔드포인트 구성 예
게이트웨이 엔드포인트
게이트웨이 엔드포인트Gateway Endpoint는 인터넷 게이트웨이와 NAT 게이트웨이 없이 아마존 S3와 아마존 다이나모DB에 연결하는 엔드포인트 유형입니다. 게이트웨이 엔드포인트에서는 아마존 S3와 아마존 다이나모DB만 지원하고 있으며 다른 서비스는 선택할 수 없습니다. 하지만 인터페이스 엔드포인트에서도 아마존 S3와 아마존 다이나모DB를 지원하고 있습니다. 이 두 유형의 차이는 무엇일까요? 인터페이스 엔드포인트는 VPC의 사설 IP 주소 즉, 프라이빗 IP 주소를 사용하여 아마존 S3와 아마존 다이나모DB에 접근하며, 온프레미스 네트워크와 다른 AWS 리전의 VPC에서도 접근할 수 있습니다. 데이터 전송량에 따라 비용이 발생합니다. 반면 게이트웨이 엔드포인트에는 공용 IP 즉 퍼블릭 IP가 할당되기 때문에 아마존 S3와 아마존 다이나모DB에는 퍼블릭 IP로 접근합니다. 온프레미스 네트워크와 다른 AWS 리전에서의 접근은 허용되지 않습니다. 이런 게이트웨이 엔드포인트를 사용하는 때에는 별도의 비용이 발생하지 않습니다.
온프레미스 환경과 다른 리전에서의 사용, 비용, 비공개 IP로의 접근을 고려하여 인터페이스 엔드포인트와 게이트웨이 엔드포인트를 결정합니다.
▼ 게이트웨이 엔드포인트 구성 예
