AWS 네트워킹의 중심에는 **Amazon Virtual Private Cloud (VPC)**가 있습니다. VPC는 AWS 클라우드 내에서 사용자를 위해 프로비저닝한 논리적으로 격리된 가상 네트워크입니다. 이는 사용자의 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사하지만, AWS의 확장성과 유연성을 활용할 수 있다는 장점이 있습니다.
VPC를 구축할 때 다음과 같은 주요 구성 요소를 설정하게 됩니다.
VPC (Virtual Private Cloud): 격리된 가상 네트워크 공간입니다. CIDR(Classless Inter-Domain Routing) 블록을 지정하여 VPC의 IP 주소 범위를 정의합니다.
서브넷 (Subnet): VPC 내의 IP 주소 범위입니다. 가용 영역(Availability Zone, AZ)이라는 특정 데이터 센터 내에 생성됩니다. 서브넷은 퍼블릭 서브넷과 프라이빗 서브넷으로 나눌 수 있습니다.
퍼블릭 서브넷: 인터넷 게이트웨이(Internet Gateway)를 통해 인터넷과 직접 통신할 수 있는 서브넷입니다.
프라이빗 서브넷: 인터넷 게이트웨이를 통해 직접 인터넷과 통신할 수 없으며, NAT 게이트웨이 등을 통해 아웃바운드 인터넷 연결을 허용할 수 있습니다.
라우팅 테이블 (Route Table): 네트워크 트래픽이 이동해야 하는 경로를 결정하는 규칙의 집합입니다. 각 서브넷은 라우팅 테이블과 연결되어 트래픽 흐름을 제어합니다.
인터넷 게이트웨이 (Internet Gateway): VPC의 리소스와 인터넷 간의 통신을 가능하게 하는 VPC 구성 요소입니다. 퍼블릭 서브넷의 인스턴스가 퍼블릭 IP 주소를 통해 인터넷과 통신하는 데 필요합니다.
NAT 게이트웨이 (NAT Gateway): 프라이빗 서브넷의 인스턴스가 아웃바운드 인터넷 연결을 시작할 수 있도록 하면서, 인터넷으로부터의 원치 않는 인바운드 연결을 방지하는 데 사용됩니다.
보안 그룹 (Security Group): 인스턴스 수준에서 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 상태 저장 방화벽으로, 허용된 인바운드 트래픽에 대한 응답은 자동으로 허용됩니다.
네트워크 ACL (Network Access Control List): 서브넷 수준에서 인바운드 및 아웃바운드 트래픽을 제어하는 방화벽 역할을 합니다. 무상태 방화벽으로, 각 방향의 트래픽에 대한 규칙을 명시적으로 설정해야 합니다.
▶ Default VPC의 위험성
AWS 계정을 처음 생성하면 각 리전마다 자동으로 생성되는 Default VPC가 있습니다. Default VPC는 바로 EC2 인스턴스 등을 시작할 수 있도록 기본적인 네트워크 설정을 갖추고 있어 편리할 수 있지만, 다음과 같은 잠재적인 위험성을 내포하고 있습니다.
과도한 개방성: Default VPC는 기본적으로 인터넷 게이트웨이가 연결되어 있고, 서브넷이 퍼블릭 서브넷으로 설정되어 있는 경우가 많습니다. 또한, 기본 보안 그룹이 필요 이상으로 넓은 범위의 트래픽을 허용하도록 설정되어 있을 수 있습니다. 이는 보안 취약점으로 이어져 의도치 않은 외부 접근을 허용할 수 있습니다.
명확한 보안 경계 부재: 여러 환경(개발, 스테이징, 운영 등)을 Default VPC 내에서 혼용하여 사용하는 경우, 각 환경 간의 명확한 보안 경계를 설정하기 어렵습니다. 이는 실수로 인해 운영 환경에 영향을 미치거나, 보안 사고 발생 시 영향 범위를 제한하기 어렵게 만들 수 있습니다.
리소스 관리의 어려움: Default VPC에 여러 종류의 리소스를 혼합하여 배포하면, 각 리소스 그룹별로 네트워크 설정을 관리하고 모니터링하는 것이 복잡해질 수 있습니다.
예측 불가능한 설정 변경: Default VPC의 설정은 AWS에 의해 변경될 수 있으며, 이는 사용자의 의도와 다르게 동작하거나 예상치 못한 문제를 발생시킬 수 있습니다.
따라서 프로덕션 환경이나 보안이 중요한 워크로드의 경우, 직접 VPC를 생성하고 네트워크 설정을 명확하게 정의하여 사용하는 것이 훨씬 안전하고 관리하기 용이합니다.
▶ 라우팅 (Routing) & IP 주소 (IP Address)
O 라우팅:
AWS VPC 내에서의 라우팅은 라우팅 테이블을 통해 이루어집니다. 라우팅 테이블은 목적지 CIDR 블록과 해당 트래픽이 전송되어야 하는 대상(Target)을 정의하는 여러 개의 라우트로 구성됩니다.
목적지 (Destination): 트래픽이 향해야 하는 IP 주소 범위(CIDR 형식)입니다.
타겟 (Target): 목적지로 향하는 트래픽을 처리해야 하는 AWS 리소스 또는 네트워크 인터페이스입니다. 예시로는 다음과 같은 것들이 있습니다.
local: VPC 내부의 통신
igw-xxxxxxxxxxxxxxxxx: 인터넷 게이트웨이
nat-xxxxxxxxxxxxxxxxx: NAT 게이트웨이
vgw-xxxxxxxxxxxxxxxxx: 가상 프라이빗 게이트웨이 (VPN 연결)
pcx-xxxxxxxxxxxxxxxxx: VPC 피어링 연결
eni-xxxxxxxxxxxxxxxxx: 네트워크 인터페이스
각 서브넷은 하나의 라우팅 테이블과 연결됩니다. 서브넷 내의 인스턴스에서 발생하는 트래픽은 해당 서브넷과 연결된 라우팅 테이블의 규칙에 따라 경로가 결정됩니다. AWS는 기본 라우팅 테이블을 자동으로 생성하며, 사용자는 필요에 따라 사용자 지정 라우팅 테이블을 생성하고 수정할 수 있습니다.
라우팅 테이블은 최장 프리픽스 매칭(Longest Prefix Match) 규칙에 따라 트래픽의 경로를 결정합니다. 즉, 여러 라우트가 목적지 IP 주소와 일치할 경우, 가장 구체적인(가장 긴 프리픽스를 가진) 라우트가 선택됩니다.
O IP 주소:
AWS VPC 내의 리소스(예: EC2 인스턴스)는 IP 주소를 사용하여 네트워크에서 서로를 식별하고 통신합니다. AWS는 IPv4 및 IPv6 주소 지정을 지원합니다.
IPv4 주소: 각 인스턴스는 VPC 및 서브넷의 CIDR 범위 내에서 프라이빗 IPv4 주소를 할당받습니다. 이 주소는 VPC 내부에서 통신하는 데 사용되며, 인터넷을 통해 직접 라우팅되지 않습니다.
퍼블릭 서브넷의 인스턴스는 필요에 따라 퍼블릭 IPv4 주소를 할당받을 수 있습니다. 이 주소는 인터넷을 통해 라우팅될 수 있으며, 인스턴스가 인터넷과 직접 통신하는 데 사용됩니다. 퍼블릭 IP 주소는 인스턴스가 중지/시작될 때 변경될 수 있으며, 고정된 퍼블릭 IP 주소가 필요한 경우 **탄력적 IP 주소 (Elastic IP)**를 할당하여 사용할 수 있습니다.
IPv6 주소: VPC를 생성하거나 기존 VPC에 IPv6 CIDR 블록을 연결하여 IPv6 주소를 사용할 수 있습니다. 인스턴스에 IPv6 주소를 할당하면 IPv6를 통한 통신이 가능해집니다.
서브넷을 생성할 때 CIDR 블록을 지정하며, 이 CIDR 블록 내에서 인스턴스에 IP 주소가 자동으로 할당되거나 사용자가 특정 IP 주소를 지정할 수 있습니다. AWS는 서브넷 CIDR 블록의 처음 4개 IP 주소와 마지막 1개 IP 주소를 예약된 주소로 사용합니다.
이 외에도 AWS는 VPC 피어링, VPN 연결, Direct Connect 등 다양한 네트워킹 서비스를 제공하여 VPC 간 또는 온프레미스 환경과의 연결을 지원합니다.
댓글 영역