AWS - VPC(Virtual Private Cloud)

 

 


 

1. AWS VPC(Virtual Private Cloud)

 

1) AWS VPC 개념

 AWS VPC(Virtual Private Cloud)는 Amazon Web Services에서 제공하는 가상 네트워크 서비스로, 사용자가 자신의 AWS 리소스를 격리된 가상 네트워크 환경에서 운영할 수 있도록 해줍니다.

 

 AWS VPC(Virtual Private Cloud)를 이용하면 직접 네트워크 장비를 구매하고 관리하는 복잡한 과정을 거치지 않고도 간단하게 네트워크를 설정하고 다양한 네트워크 인프라를 구성할 수 있습니다.

 

예를들어, 데이터베이스 서버는 외부 접근을 차단하고 오직 WAS(Web Application Server) 서버와만 통신하도록 네트워크 아키텍처를 손쉽게 구축할 수 있습니다.

 

 

 

 

 결론적으로, AWS VPC는 보안 설정, IP 주소 관리, 리소스 최적화 등 사용자가 네트워크 인프라를 보다 효율적으로 관리할 수 있도록 도와줍니다.

 

2. AWS VPC 구성요소

 

1) 서브넷(Subnet)

 

 서브넷(Subnet)은 VPC(Virtual Private Cloud)의 하위 단위로, VPC에 할당된 IP 주소 범위를 더 작은 단위로 분할한 개념입니다. 하나의 서브넷은 하나의 가용 영역(AZ, Availability Zone) 안에 위치하며, CIDR 블록(CIDR block range)으로 IP 주소를 지정합니다. 이를 통해 네트워크를 논리적으로 분할하고, 각 서브넷에 대해 개별적인 보안 및 라우팅 정책을 적용할 수 있습니다.

 

 예를 들어, 하나의 VPC 안에 여러 개의 서브넷을 만들고 각 서브넷마다 보안과 라우팅 설정을 개별적으로 적용할 수 있습니다. 하나의 큰 IP 클래스(예: 10.0.0.0/16) 내에서 각 서브넷을 구분하여 (예: 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24) 설정할 수 있습니다.

 

- AWS 서브넷의 IP 주소 구성

예시로 CIDR 블록이 `10.0.0.0/24`인 경우, 다음의 IP 주소는 예약된 주소로, 사용하지 못합니다.

- 10.0.0.0: 네트워크 주소

- 10.0.0.1: VPC 라우터

- 10.0.0.2: DNS 서버

- 10.0.0.3: 여분의 예약된 주소

- 10.0.0.255: 브로드캐스트 주소

 

- 퍼블릭 서브넷과 프라이빗 서브넷

1. 퍼블릭 서브넷: 외부에 노출되어야 하는 리소스를 배치하는 서브넷입니다. 퍼블릭 IP 주소를 가지며, 인터넷 게이트웨이(Internet Gateway)를 통해 외부 인터넷과 통신할 수 있습니다. 예를 들어, 웹 서버와 같이 외부에서 접근이 필요한 리소스를 퍼블릭 서브넷에 배치합니다.

 

2. 프라이빗 서브넷: 외부에 노출되지 않는 리소스를 배치하는 서브넷입니다. 퍼블릭 IP 주소가 필요 없으며, 외부 인터넷과 직접 통신하지 않습니다. 데이터베이스 서버나 내부 로직 서버와 같이 외부에 노출될 필요가 없는 리소스를 프라이빗 서브넷에 배치합니다.

 

2) 인터넷 게이트웨이(Internet Gateway)

 

 인터넷 게이트웨이(Internet Gateway, IGW)는 AWS VPC 내의 리소스가 외부 인터넷과 통신할 수 있도록 해줍니다. 이를 통해 퍼블릭 서브넷의 인스턴스가 인터넷에 접근할 수 있도록 지원합니다. 단, 해당 서브넷에 Public IP주소가 있어야 합니다.

 

 

- 인터넷 게이트웨이의 주요 기능

1.인터넷 연결 제공: 인터넷 게이트웨이는 VPC 내의 퍼블릭 서브넷에 있는 인스턴스가 인터넷과 통신할 수 있도록 해줍니다. 이를 통해 웹 서버, 애플리케이션 서버 등 외부에서 접근이 필요한 리소스를 인터넷에 노출할 수 있습니다.

 

2. 양방향 트래픽 지원: 인터넷 게이트웨이는 VPC와 인터넷 간의 트래픽을 양방향으로 전달합니다. 즉, VPC 내의 인스턴스가 인터넷으로 나가는 트래픽과 인터넷에서 VPC로 들어오는 트래픽을 모두 처리합니다.

 

3. 고가용성 및 확장성: 인터넷 게이트웨이는 AWS에서 관리되며, 고가용성과 확장성을 제공합니다. 사용자는 인터넷 게이트웨이를 설정한 후 별도의 관리나 유지보수를 할 필요가 없습니다.

 

3) 라우팅 테이블(Routing Table)

 

 라우팅 테이블은 네트워크 트래픽의 경로를 결정합니다. AWS VPC에서 라우팅 테이블은 서브넷과 인터넷 게이트웨이, NAT 게이트웨이, VPN 연결 등 다양한 네트워크 엔드포인트 간의 트래픽 흐름을 제어합니다. 

 

- 라우팅 테이블의 구성 요소

라우팅 테이블은 여러 개의 라우팅 규칙(라우트)으로 구성됩니다. 각 라우트는 다음과 같은 필수 요소를 포함합니다

 

- 목적지(Destination): 트래픽이 도달해야 할 IP 주소 범위(CIDR 블록)를 지정합니다.

 

- 대상(Target): 트래픽을 전달할 네트워크 엔드포인트를 지정합니다. 이는 인터넷 게이트웨이(igw), NAT 게이트웨이(nat), VPC 피어링 연결(pcx), VPN 연결(vpn) 또는 다른 서브넷의 인스턴스 등이 될 수 있습니다.

 

- 라우팅 테이블의 작동 방식

 라우팅 테이블은 네트워크 트래픽이 발생할 때마다 해당 트래픽의 목적지 주소를 확인하고, 가장 적합한 라우트를 선택하여 트래픽을 전달합니다. 예를 들어, 다음과 같은 라우팅 테이블이 있다고 가정해 보겠습니다

 

 

 

 

- 10.0.0.0/16: 이 서브넷 내의 트래픽은 로컬 네트워크(local)로 전달됩니다. 여기서 로컬은 해당 VPC(10.0.0.0/16)에 포함된 모든 서브넷을 의미합니다. 따라서, 라우터는 10.0.0.0/16 목적지 정보를 통해 private 서브넷인 "10.0.1.0/24", "10.0.2.0/24"와 통신할 수 있습니다.

 

- 0.0.0.0/0: 모든 외부 인터넷 트래픽은 인터넷 게이트웨이(igw-12345678)로 전달됩니다. 이를 통해 퍼블릭 서브넷은 외부와 통신 할 수 있습니다.

 

- 라우팅 테이블의 유형

 AWS VPC에서는 기본 라우팅 테이블(Main Route Table)과 사용자 정의 라우팅 테이블(Custom Route Table)을 사용할 수 있습니다

 

- 기본 라우팅 테이블: VPC를 생성할 때 자동으로 생성되며, 사용자는 이 테이블을 수정하여 라우팅 규칙을 추가하거나 변경할 수 있습니다. 해당 VPC안의 모든 서브넷은 처음에는 기본 라우팅 테이블과 연결됩니다. 즉, 서브넷을 별도로 사용자 정의 라우팅 테이블과 연결하지 않는 한, 기본 라우팅 테이블에 연결된 상태로 유지됩니다.

 

- 사용자 정의 라우팅 테이블: 필요에 따라 추가로 생성할 수 있으며, 특정 서브넷에만 적용할 수 있습니다. 이를 통해 서브넷마다 다른 라우팅 규칙을 적용할 수 있습니다.

 

4) 보안그룹(Security Group)

 

 보안 그룹(Security Group)은 AWS에서 제공하는 인스턴스에 대한 가상 방화벽입니다. 주요 기능은 다음과 같습니다.

 

1. 상태 저장(Stateful) 방화벽

 

 보안 그룹은 상태 저장 방화벽입니다. 이는 인바운드 규칙에 의해 허용된 트래픽에 대한 응답 트래픽(아웃바운드)이 자동으로 허용된다는 것을 의미합니다. 마찬가지로, 아웃바운드 규칙에 의해 허용된 트래픽에 대한 응답 트래픽(인바운드)도 자동으로 허용됩니다.

 

2. 허용 규칙만 정의

 

 보안 그룹은 허용 규칙만 정의할 수 있습니다. 즉, 명시적으로 허용된 트래픽만 인스턴스에 도달할 수 있으며, 나머지 모든 트래픽은 기본적으로 차단됩니다.

 

3. 다중 보안 그룹

 하나의 인스턴스에 여러 개의 보안 그룹을 적용할 수 있습니다. 이 경우, 모든 보안 그룹의 규칙이 결합되어 적용됩니다.

 

 

인바운드 규칙을 보면 다음과 같이 설정하여 특정 트래픽을 허용할 수 있습니다. 위 이미지는 모든 포트, 프로토콜, 소스를 허용합니다.

 

5) NACL(Network Access Control List, NACL)

 

 네트워크 ACL(Network Access Control List, NACL)은 AWS VPC에서 서브넷 수준에서 인바운드(Inbound) 및 아웃바운드(Outbound) 트래픽을 제어하는 보안 계층입니다. NACL은 서브넷에 연결된 모든 인스턴스에 적용되며, 보안 그룹과 함께 사용하여 네트워크 보안을 강화할 수 있습니다.

 

- 주요 기능

1. 서브넷 수준의 보안: NACL은 서브넷 수준에서 트래픽을 제어합니다. 이는 서브넷 내의 모든 인스턴스에 대해 동일한 보안 규칙이 적용됨을 의미합니다.

 

2. 상태 비저장(Stateless) 방화벽: NACL은 상태 비저장 방화벽입니다. 이는 인바운드 및 아웃바운드 트래픽에 대해 각각 별도의 규칙을 설정해야 함을 의미합니다. 인바운드 트래픽을 허용하더라도, 해당 아웃바운드 트래픽을 별도로 허용해야 합니다.

 

3. 허용 및 거부 규칙: 보안그룹과 달리, NACL은 허용(Allow) 규칙뿐만 아니라 거부(Deny) 규칙도 설정할 수 있습니다. 이를 통해 특정 트래픽을 명시적으로 차단할 수 있습니다.

 

4. 규칙 번호: NACL의 각 규칙은 번호를 가지며, 낮은 번호의 규칙이 우선적으로 적용됩니다. 트래픽이 NACL의 규칙을 평가할 때, 가장 낮은 번호부터 순차적으로 평가됩니다.

 

- 구성요소 및 예시

NACL은 다음과 같은 구성 요소로 이루어져 있습니다

 

- 이름 및 설명: NACL의 이름과 설명을 설정하여, 해당 NACL의 목적을 명확히 할 수 있습니다.

 

- VPC: NACL이 속한 VPC를 지정합니다.

 

- 인바운드 규칙: 서브넷으로 들어오는 트래픽을 제어하는 규칙을 정의합니다. 각 규칙은 규칙 번호, 프로토콜, 포트 범위, 소스 IP 주소, 허용 또는 거부 동작을 포함합니다.

 

- 아웃바운드 규칙: 서브넷에서 나가는 트래픽을 제어하는 규칙을 정의합니다. 각 규칙은 규칙 번호, 프로토콜, 포트 범위, 목적지 IP 주소, 허용 또는 거부 동작을 포함합니다.

 

 

 

다음과 같은 규칙의 NACL에서 10.0.1.0/24로부터 TCP 요청이 들어오면 어떻게 될까요?

두 번째 줄에서 모든 소스에 대해 TCP를 허용했지만, 위에서 말했 듯이 규칙 번호가 낮은 숫자부터 우선순위가 부여됩니다. 따라서 TCP 요청은 차단되어 해당 요청은 거부됩니다.

 

- NACL과 보안 그룹의 차이점

  보안그룹 NACL
적용범위 인스턴스 수준 서브넷 수준
상태저장 여부 상태 저장(Stateful) 방화벽 상태 비저장(Stateless) 방화벽
규칙 유형 허용(Allow) 허용(Allow) 및 거부(Deny) 

 

 

6) NAT 게이트웨이(Network Address Translation Gateway)

 

 NAT 게이트웨이(NAT Gateway)는 AWS VPC에서 프라이빗 서브넷의 인스턴스가 인터넷이나 다른 AWS 서비스와 통신할 수 있도록 해주는 네트워크 서비스입니다. NAT 게이트웨이는 퍼블릭 서브넷에 위치해야 합니다.

 

 인터넷 게이트웨이에서 설명 했듯이 외부 인터넷과 통신하려면 퍼블릭 IP가 필요합니다. 프라이빗 서브넷은 퍼블릭 IP가 없기 때문에 NAT 게이트웨이가 퍼블릭 IP를 할당해줍니다. 즉, 네트워크에서 배운 NAT(Network Address Translation)의 역할을 담당합니다.

 

 또한, NAT 게이트웨이는 인스턴스가 외부와 통신할 수 있게 하면서도, 외부에서 인스턴스로의 직접적인 접근을 차단하여 보안을 유지합니다.

 

 

- NAT 게이트웨이의 구성 및 설정

NAT 게이트웨이를 사용하려면 다음과 같은 단계를 거쳐야 합니다

 

1. NAT 게이트웨이 생성: AWS Management Console, AWS CLI, 또는 AWS SDK를 사용하여 NAT 게이트웨이를 생성합니다. 이때, NAT 게이트웨이는 퍼블릭 서브넷에 배치되어야 하며, 엘라스틱 IP 주소를 할당받아야 합니다.

 

2. 라우팅 테이블 업데이트: 프라이빗 서브넷의 라우팅 테이블에 NAT 게이트웨이를 대상으로 하는 라우팅 규칙을 추가합니다. 예를 들어, `0.0.0.0/0` 목적지에 대해 NAT 게이트웨이를 대상으로 설정합니다. 이를 통해 프라이빗 서브넷 내의 인스턴스가 NAT 게이트웨이를 통해 인터넷과 통신할 수 있게 됩니다.

 

7) Bastion Host

 Bastion Host(배스천 호스트)는 AWS VPC 내의 프라이빗 서브넷에 있는 리소스에 대한 안전한 원격 접근을 제공하는 인스턴스입니다. 배스천 호스트는 보안상의 이유로 외부 인터넷과 직접 연결되지 않는 프라이빗 서브넷의 인스턴스에 접근할 수 있는 중간 지점 역할을 합니다. 즉, 외부에서 프라이빗 인스턴스에 접근하기 위한 진입점 역할을 합니다. 점프 호스트라고도 합니다.

 

 

3. AWS VPC 실습

 

구성할 VPC 아키텍처

 

 

 

실습 순서는 다음과 같습니다.

VPC 생성 -> 서브넷 생성 -> 라우팅테이블 추가 생성/설정 -> 인터넷게이트 웨이 생성/연결 -> EC2 서브넷 연결 -> NAT gateway 추가/설정

 

1. vpc 생성

 

 

- VPC 생성시 NACL, 기본 라우팅 테이블, 보안그룹이 자동으로 생성됩니다.

 

- 학습을 위해 기본 보안그룹의 소스를 전체로 수정합니다.

 

 

 

2. 서브넷 생성

- 위에서 생성한 VPC로 설정하고 서브넷을 만듭니다. public subnet도 같은 방식으로 만듭니다.

 

 

3. 라우팅 추가 생성 / 서브넷 연결

- 기본 라우팅 테이블은 public subnet이 사용하고 private subnet 전용 라우팅 테이블을 추가로 생성합니다.

 

- 서브넷 연결 편집으로 들어가서 연결할 서브넷을 지정합니다.

 

 

4.인터넷 게이트웨이 생성

 

- 생성한 인터넷 게이트퀘이를 VPC에 연결합니다.

 

 

- VPC에 연결하고 나서 Public subnet에 연결된 라우팅테이블에 인터넷게이트웨이 라우팅을 추가합니다.

 

 

5. EC2생성후 subnet지정

- EC2를 생성하고 Public subnet을 지정합니다.

 

- EC2를 생성하고 Private subnet을 지정합니다. 이때 Private subnet은 퍼블릭 IP를 비활성화합니다.

 

 

6. NAT gateway 생성

- Private subnet에서 외부 인터넷을 이용하기 위해 NAT gateway를 생성합니다. NAT gateway는 Public subnet에 있어야 합니다.

 

- Private subnet에 연결된 라우팅 테이블에 NAT gateway 라우팅을 추가합니다.