DevOps/AWS

[VPC, Subnet] NestJS 애플리케이션 AWS에 배포하기 02

kyoulho 2023. 3. 16. 23:17

인프라 구성도

이번 시간에 생성하게 될 인프라 구성도입니다. VPC와 퍼블릭 서브넷, 프라이빗 서브넷, 그리고 서브넷에서 사용하게 될 라우팅 테이블과 NACL에 대해서 다룹니다.

AWS 콘솔을 이용하면 생성하기 쉽고 또한 많은 블로그들이 있기 때문에 개념적인 내용과 설정에 대해서만 집중하겠습니다.

 

VPC 생성하기

IPv4로 CIDR로 10.0.0.0/16를 입력하고 생성해 줍니다.  (10.0.0.0 ~ 10.0.255.255입니다)

VPC 설정 옵션 중에 DNS라는 단어가 나와서 헷갈리는 몇 가지 옵션이 있습니다.

 DNS 호스트 이름 활성화 옵션은 EC2 인스턴스의 호스트 이름을 DNS에 등록하는 옵션이며, DNS 확인 활성화 옵션은 DNS 서버가 호스트 이름의 소유자가 DNS 레코드를 변경할 수 있는 권한이 있는지를 확인하는 옵션입니다. 이 두 옵션은 EC2 인스턴스와 DNS 서버 간의 통신에 관련되어 있습니다.

 

서브넷 생성하기

VPC를 생성했다면 서브넷을 생성해 줍니다.

퍼블릭 서브넷으로 사용할 public-subnet과 프라이빗 서브넷으로 사용할 private-subnet을 생성했습니다.

CIDR은 10.0.0.0/24와 10.0.1.0/24로 설정했습니다. 더 크게 생성할 수도 있지만 251(4개는 예약) 개면 충분하다고 판단했습니다.

RDS 생성시에 두개 이상의 가용영역의 두개 이상의 서브넷이 필요하니 필요에 의해 서로 다른 가용영역에 하나씩 더 생성해둡니다.

 

서브넷 설정에도 중요한 옵션이 있어 살펴보겠습니다.

 퍼블릭 IPv4 주소 자동 할당 활성화  옵션은 해당 서브넷 내의 EC2 인스턴스에 자동으로 퍼블릭 IP 주소를 할당하도록 설정하는 옵션입니다. 

 

인터넷 게이트웨이 생성하기

인터넷 게이트웨이(IGW)는 VPC와 인터넷 간의 통신을 가능하게 하는 서비스입니다. VPC 내에 리소스들은 IGW를 통해 인터넷으로 나아갈 수 있습니다.

인터넷 게이트웨이를 생성하고 VPC를 연결해 줍니다.

 

라우팅 테이블 생성하기

 AWS의 라우팅 테이블은 VPC 내에서 IP 패킷을 전송하기 위한 라우팅 정보를 유지하는 데 사용됩니다. VPC 내의 각 서브넷은 라우팅 테이블을 가지고 있으며, 라우팅 테이블은 목적지 IP 주소를 기반으로 각 서브넷에서 다음 홉(Next hop)을 결정합니다. 

 쉽게 말해서 IP 패킷이 어느 호스트로 가야 하는지 알려주는 이정표라고 생각하면 됩니다.

각각의 서브넷에 연결할 라우팅 테이블을 생성 후 라우팅을 편집합니다.

public-rtb에 대해 설명하면 다음과 같습니다. "목적지가 10.0.0.0/16인 IP는 로컬에서 찾고 그 외에는 인터넷 게이트웨이로 향하라"입니다. 그리고 각각의 라우팅 테이블을 각각의 서브넷에 연결해 줍니다.

 

네트워크 ACL(NACL) 생성하기

NACL 이란 서브넷 내부와 외부의 트래픽을 제어하는 방화벽입니다. 하나의 NACL은 여러 서브넷과 연결 가능하며 하나의 서브넷은 하나의 NACL만 연결 가능합니다. NACL은 허용, 거부 규칙 모두 지정 가능하며 연결 상태를 추적하지 않는 상태 비저장 방화벽입니다. 즉, 인바운드 트래픽에 대한 응답은 아웃바운드 트래픽 규칙을 따르고 아웃바운드 트래픽에 대한 응답은 인바운드 트래픽 규칙을 따릅니다.

각가의 서브넷에 연결될 NACL을 생성합니다

 

퍼블릭 NACL

인터넷에서 들어오는 HTTP와 HTTPS를 허용해 줍니다. SSH는 저의 IP를 지정했습니다.

 

프라이빗 NACL

퍼블릭 서브넷에서 3306 포트로 오는 요청을 허용해 줍니다.

 

이렇게 리소스들이 올라갈 VPC와 서브넷과 기본적인 보안을 설정해 보았습니다.