[AWS] VPC 생성 및 Amazon EC2 인스턴스에서 웹 애플리케이션 동작 실습

vinca·2023년 11월 9일
0

Introduction

본 실습 과정은 AWS Training and Certification을 바탕으로 작성되었습니다.


사례

어떤 요소가 있을까?

  • VPC
  • 인터넷 게이트웨이
  • 인터넷으로의 퍼블릭 경로가 포함된 라우팅 테이블
  • 가용 영역(AZ) 2개
  • 퍼블릭 서브넷 2개

🌏 VPC란?

Amazon Virtual Private Cloud

AWS에서 제공하는 가상 네트워킹 환경으로, 클라우드에서 자체 전용 네트워크를 만들 수 있는 서비스이다.

VPC를 사용하면 AWS 클라우드 내에서 리소스를 VPC 내로 격리하고, 사용자가 정의한 가상 네트워크 환경에서 작동할 수 있도록 한다.

이를 통해 기업이나 조직은 클라우드 리소스를 보다 안전하게 관리하고 사용할 수 있다.

🚧 인터넷 게이트웨이란?

AWS VPC에서 인터넷과의 통신을 가능케 하는 필수적인 구성 요소.
이 게이트웨이를 통해 VPC 내의 리소스들이 외부의 인터넷과 통신할 수 있다.

간단하게 설명하자면, 인터넷 게이트웨이는 VPC 내의 프라이빗 네트워크와 외부의 공개된 인터넷 간에 통로 역할을 수행한다.

이를 통해 VPC 내부의 인스턴스들이 외부의 서비스에 접근하거나 외부에서 VPC 내부의 리소스에 접근할 수 있게 도와준다.

VPC 생성

이름 태그 자동 생성

정의된 값은 모든 리소스에서 이름 태그를 "name-resource" 로 생성하는 데 사용됩니다.

IPv4 CIDR 블록

VPC에 대한 IPv4 주소 범위를 지정해야 합니다. IPv4 주소 범위를 CIDR(Classless Inter-Domain Routing) 블록으로 지정합니다(예: 10.0.0.0/16). CIDR 블록 크기는 /16 ~ /28 넷마스크여야 합니다.

IPv6 CIDR 블록

Amazon 제공 IPv6 CIDR 블록을 VPC와 연결할 수 있습니다. Amazon에서는 고정 크기(/56)의 IPv6 CIDR 블록을 제공합니다. IPv6 주소의 범위를 직접 선택할 수는 없습니다

테넌시

VPC(Virtual Private Cloud)를 생성할 때 테넌시(Tenancy) 옵션은 해당 VPC 내의 인스턴스가 호스팅되는 물리적 하드웨어의 공유 여부를 나타냅니다. 테넌시는 주로 클라우드 서비스 제공자가 사용자에게 제공하는 옵션 중 하나입니다.

AWS에서는 VPC를 생성할 때 테넌시 옵션으로 다음 두 가지를 선택할 수 있습니다

  • Default (공유): 기본값으로, VPC 내의 인스턴스가 여러 계정에서 공유된 물리적 하드웨어에 호스팅됩니다. 다수의 고객이 이 하드웨어를 공유하므로 비용이 저렴하게 책정되지만, 가끔 다른 사용자의 활동으로 인해 성능이 영향을 받을 수 있습니다.

  • Dedicated (전용): 특정 고객에게 물리적 서버를 전용으로 할당합니다. 이 옵션은 추가 비용이 들 수 있지만, 다른 사용자의 활동으로부터 완전히 격리된 환경을 제공하여 보안과 성능을 강화할 수 있습니다.

일반적으로 기본값으로 설정하는 것이 일반적이며, 특별한 요구 사항이나 보안 강화가 필요한 경우에만 전용 테넌시 옵션을 선택합니다.

가용 영역

가용 영역(AZ)은 AWS 리전에서 중복 전력, 네트워킹 및 연결을 지원하는 하나 이상의 개별 데이터 센터입니다.


나머지 부분도 계속 봅시다.

퍼블릭 서브넷

인터넷을 통해 퍼블릭 액세스를 수행해야 하는 웹 애플리케이션에 대해서는 퍼블릭 서브넷을 사용합니다.

프라이빗 서브넷

퍼블릭 액세스가 필요하지 않은 백엔드 리소스를 보호하려면 프라이빗 서브넷을 사용합니다.

NAT 게이트웨이

네트워크 주소 변환(NAT) 서비스입니다. NAT 게이트웨이를 사용하면 프라이빗 서브넷의 리소스가 인터넷에 연결할 수 있습니다. 하지만 외부 서비스는 프라이빗 서브넷의 리소스와의 연결을 시작할 수 없습니다.
즉, NAT를 통해 나가는 데이터는 내부 서브넷을 거치지 않고 직접적으로 VPC 외부로 나갑니다. 내부 리소스가 외부로 통신할 때 NAT 게이트웨이를 사용하면, 내부 IP 주소는 NAT 게이트웨이의 공인 IP 주소로 변환되어 외부로 전송됩니다. 이렇게 하면 외부에서는 내부 구조를 직접 알 수 없으며, 보안 측면에서 장점을 가질 수 있다.

퍼블릭 서브넷, 프라이빗 서브넷, NAT 게이트웨이와 관련해서는 여기를 참고
[AWS] 퍼블릭 서브넷과 프라이빗 서브넷

VPC 엔드포인트

VPC 엔드포인트를 사용하면 VPC를 Amazon S3와 같은 지원되는 AWS 서비스에 프라이빗으로 연결할 수 있습니다.

VPC 엔드포인트를 사용하면 퍼블릭 인터넷에서 닫히는 격리된 VPC를 생성할 수 있습니다. 또한, 게이트웨이 엔드포인트 사용에 대한 추가 요금은 없습니다(NAT 게이트웨이와 관련된 비용을 피할 수 있음).

DNS 옵션

DNS 호스트 이름 속성은 VPC에서 시작된 인스턴스가 퍼블릭 IP 주소에 해당하는 퍼블릭 DNS 호스트 이름을 받을지 여부를 결정합니다.

DNS 확인 속성은 Amazon DNS 서버를 통한 DNS 확인이 VPC에서 지원되는지 여부를 결정합니다.


생성 완료


생성이 완료되었다!

라우팅 테이블에 퍼블릭 경로 추가

현재 VPC 내의 모든 인터넷 트래픽에 사용되는 경로는 현재 lab-2-rtb-public 라우팅 테이블 하나이다.

인터넷에 액세스 할 수 있는 인터넷 게이트웨이로의 경로를 하나 더 추가해주도록 하자.

메인 라우팅 테이블에 인터넷 라우터로 가는 경로를 추가해 주었다.

전체적인 그림은 다음과 같다.


VPC 보안 그룹 생성

VPC에서 웹 접속을 허용하는 보안 그룹을 생성해보도록 하자.

lab-2-VPC내에서 사용할 보안 그룹을 생성하도록 선택하고, anywhere(0.0.0.0)에서 들어오는 트래픽을 허용해준다.

이 보안 그룹은 다음 단계인 Amazon EC2 인스턴스를 생성하고, 이에 접속할 때 사용된다.
이 인바운드 규칙이 없으면 EC2 인스턴스가 인바운드 웹 요청을 수신할 수 없다. (접속 불가능)

이를 통해 lab-2-VPC에 대해서 default 보안 그룹을 포함하여 총 2개의 보안 그룹이 적용되었다.

default 보안 그룹

default 보안 그룹은 다음과 같이 sg-002baef3d6b35b8f3 Source (출발지) 정보가 자기 자신의 보안 그룹 ID로 설정되어 있는 것을 확인할 수 있다.

즉, 해당 보안 그룹에 속한 인스턴스끼리의 트래픽을 허용한다는 의미이다.

예시
예를 들어 sg-002baef3d6b35b8f3이라는 보안 그룹에 속한 EC2 인스턴스가 2개 있다고 가정해보면, 이 보안 그룹에 속한 인스턴스끼리는 서로 허용된 포트 및 프로토콜에 대한 트래픽을 전체 교환 가능하다.

사용 목적
이는 보안 그룹 내에서 자체적인 통신을 지원하는데 사용된다.
주로 웹 애플리케이션 서버와 데이터베이스 서버가 동일한 보안 그룹에 속해 있고, 데이터베이스 서버에 대한 트래픽을 웹 애플리케이션 서버에서만 허용하려면, 출발지로 자기 자신의 보안 그룹 ID를 지정하여 트래픽을 허용할 수 있다.

참고자료 : AWS 공식문서

추가적으로 보안 그룹의 특성 상 여러 규칙이 적용될 경우, 가장 특정한 규칙이 우선권을 가지므로 가장 구체적인 규칙이 다른 규칙을 무시하게 된다.

참고자료 : [AWS] 보안그룹과 ACL의 차이

인스턴스 생성

  • 생성된 VPC내에 인스턴스를 배포하도록 VPC를 변경해준
    다.
  • 인스턴스가 위치할 서브넷을 선택한다.
  • 퍼블릭 서브넷에 위치할 웹 서버이므로 public IP를 자동으로 할당함을 (Enable)해준다.
  • 해당 VPC 내에 종속된 보안 그룹 중 WebSecurity를 선택한다.

웹 애플리케이션 배포

Amazon EC2에서 인스턴스를 시작할 때 사용자 데이터를 인스턴스에 전달하여 일반적인 구성 작업을 자동으로 수행하도록 만들 수 있다.

아래 스크립트는 필요한 웹 애플리케이션 종속성을 설치하고 웹 애플리케이션 서버를 시작하도록 해주는 셸 스크립트이다.

만약 이 사용자 데이터 스크립트를 제공하지 않는 경우에는 EC2 인스턴스에 로그인한 후 모든 명령을 직접 실행해야 한다.

이 스크립트는 다음 태스크를 수행한다.

  • 시스템 업데이트 설치
  • Node.js 설치 프로그램 다운로드를 위한 소스 리포지토리 설치
  • Node.js 설치
  • 애플리케이션 코드 다운로드
  • 웹 애플리케이션 전용 디렉터리 생성
  • 지정된 디렉터리에 애플리케이션을 다운로드하여 추출
  • 애플리케이션 종속성 설치
  • 애플리케이션용 리스너 포트 설정
  • 웹 애플리케이션 시작

이를 다음 Advanced detailsUser data에 입력해주자.

생성 버튼을 눌러서 인스턴스를 생성해주면 끝난다.

결과 확인

Public IPv4 DNS로 접속해보면?

ec2-13-229-58-183.ap-southeast-1.compute.amazonaws.com

잘 접속되는 것을 확인할 수 있다.

전체 구성도

전체 완성된 구성도는 다음과 같다.

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글