[AWS] Amazon VPC 인프라 구축

vinca·2023년 11월 28일
0

Introduction

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


사례

구축할 내용을 간단하게 살펴보고 넘어가자.

  • Amazon Virtual Private Cloud(Amazon VPC)
  • 단일 가용 영역의 퍼블릭 서브넷과 프라이빗 서브넷
  • VPC 내부의 퍼블릭 및 프라이빗 경로
  • NAT 게이트웨이
  • 인터넷 게이트웨이

👌 자 그럼 시작해보자!

Amazon VPC 생성

VPC를 생성할 때, 서브넷 및 NAT 게이트 웨이, 인터넷 게이트웨이등을 한번에 설정할 수 있다. (VPC and more)

하지만, 이번 실습에서는 VPC only 옵션을 통해서 VPC만을 먼저 생성해 보도록 하자.

  • Resources to create : VPC only
  • Name tag(optional) : Lab VPC
  • IPv4 CIDR : 10.0.0.0/16

Create 버튼을 눌러주면?
VPC가 이쁘장하게 잘 생성되었다.

퍼블릭 서브넷 및 프라이빗 서브넷 생성

이제 VPC 내부에 서브넷을 생성해주자.

서브넷의 IP주소는 네트워크(VPC) 내 IP 주소의 하위 범위가 되어야 한다.

VPC의 CIDR 범위는 10.0.0.0/16이고, 퍼블릭 서브넷 및 프라이빗 서브넷은 각각 10.0.0.0/2410.0.0.0/23으로 CIDR 범위가 VPC의 내부에 있다.

서브넷은 VPC 내부에 위치하므로, VPC를 선택해주고 다음과 같이 Public 서브넷과 Private 서브넷을 생성해 주도록 하자.

  • VPC 생성

  • Public 서브넷과 Private 서브넷 생성

퍼블릭 IP 주소 자동 부여 설정

퍼블릭 서브넷 안에 배포되는 EC2와 같은 서비스는 외부로 노출되어야 하므로, 시작되는 모든 인스턴스에 퍼블릭 IP 주소가 자동으로 할당되어야한다.

퍼블릭 서브넷에서 "Enable auto-assign public IPv4 address" 옵션을 켜주도록 하자.

이 옵션을 활성화하면 EC2 인스턴스가 시작될 때 해당 인스턴스에 대해 공용 IPv4 주소가 자동으로 할당된다.


수행할 과정은 다음과 같다.

  1. 인터넷 게이트웨이를 생성하고,
  2. 인터넷 게이트웨이를 VPC에 연결
  3. 퍼블릭 서브넷에서 인터넷 트래픽을 인터넷 게이트웨이로 보내도록 하는 경로를 퍼블릭 서브넷의 라우팅 테이블에 추가.

인터넷 게이트웨이 생성

현재 퍼블릭 서브넷은 있지만, 인터넷 게이트웨이가 없으므로 퍼블릭 서브넷에서 인터넷으로 액세스 할 수 없다.

인터넷 게이트웨이의 역할
1. IPv4가 있는 인스턴스에 대해서 NAT를 통해서 외부에서 내부로 연결할 수 있도록 함
2. 인터넷게이트웨이를 통해 트래픽이 나가는데 대한 목적지를 제공

VPC에 인터넷 게이트웨이 연결

생성한 인터넷 게이트웨이를 VPC에 연결해주도록 하자.

서브넷에 라우팅 테이블 생성

각 서브넷은 하나의 라우팅 테이블만을 가진다.

퍼블릭 서브넷이 인터넷 게이트웨이를 사용하려면 인터넷 게이트웨이로 가는 경로를 포함한 라우팅 테이블을 서브넷에 연결해주면 된다.

🤓핵심
인터넷 게이트웨이로 가는 경로가 있는 라우팅 테이블에 연결된 서브넷퍼블릭 서브넷이라고 한다.

라우팅 테이블 생성

다음과 같이 퍼블릭 서브넷의 라우팅 테이블이 될 존재를 Lab VPC에 생성해주자.

라우팅 테이블에 인터넷 게이트웨이로의 경로 추가

이제 생성된 라우팅 테이블을 수정해 주도록 하자.

인터넷으로 가는 경로를 추가해준다.

이 때, 이전에 생성하고 VPC에 Attach to VPC를 통해 추가한 인터넷 게이트웨이를 선택하여 인터넷으로 가는 경로를 열어준다.

서브넷에 라우팅 테이블 연결

완성된 라우팅 테이블을 이제 퍼블릭 서브넷에 연결해 주도록 하자.

EC2 인스턴스 배포 및 퍼블릭 보안 그룹 생성

이를 통해 퍼블릭 서브넷이 완성되었다.
이제 내부에 EC2 인스턴스를 배치하면 외부 인터넷과 접속할 수 있을까?

그렇지 않다.

EC2 인스턴스는 내부의 보안그룹에 의해서 보호되므로 이에 대한 허용할 보안 그룹또한 만들어줘야한다.

EC2인스턴스를 배포하면서 함께 생성해주도록 하자.

  • VPC 및 서브넷 선택

  • 보안 그룹 생성
    모든 소스에서 해당 EC2로 접속할 수 있도록 보안 그룹을 생성해준다.

  • EC2에 역할 부여
    EC2에서 IAM instance profile 메뉴에서 EC2InstProfile 역할을 부여해준다.
    EC2InstProfile 역할이 하는 일은

  • user date(사용자 데이터) 구성
    이 EC2를 웹 서버로 구성하기 위해 인스턴스 시작 시 자동 실행되는 사용자 데이터 스크립트를 설정해준다.

#!/bin/bash

# To connect to your EC2 instance and install the Apache web server with PHP

yum update -y

yum install -y httpd php8.1
systemctl enable httpd.service
systemctl start httpd
cd /var/www/html
wget https://us-west-2-tcprod.s3.amazonaws.com/courses/ILT-TF-200-ARCHIT/v7.5.7.prod-05282af8/lab-2-VPC/scripts/instanceData.zip
unzip instanceData.zip

인스턴스 확인

이제 이러한 인스턴스가 정상적으로 잘 동작하는 지 확인해보자.

1. 인터넷 ➡️ 인스턴스 확인

배포된 인스턴스의 pubic IPv4로 접속해보도록 하자.
인터넷 게이트웨이의 설정이 잘 되어있다면 NAT를 통해서 외부에서 인스턴스로의 접속이 잘 수행될 것이다.


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

2. 인스턴스 ➡️ 인터넷

이번에는 인스턴스 내에서 인터넷으로의 접속이 가능한지 확인해 보자.
세션 매니저를 통해서 EC2인스턴스에 접속한 후 다음과 같은 curl을 통해 인터넷에 웹 요청을 보내보았다.

curl vinca.coi.kr

인터넷 게이트웨이의 설정이 잘 되어있다면, 외부로의 접속 작업이 정상적으로 잘 수행될 것이다.

NAT 게이트웨이 생성

프라이빗 서브넷에서는 현재 외부 인터넷으로 통신할 수 없다.
당연하게도 인터넷 게이트웨이와 연결된 적이 없는 "프라이빗 서브넷"이기 때문이다.

이를 외부로의 접속이 가능하도록 하기 위해서는 다음과 같은 과정이 필요하다.

  1. 인터넷 통신이 가능한 퍼블릭 서브넷에 NAT 게이트웨이 생성
  2. 생성 시, Allocate Elastic IP를 통해서 NAT 게이트웨이에 탄력적 IP부여
  3. NAT 게이트웨이를 가르키도록 라우팅 테이블을 프라이빗 서브넷에 연결

NAT 게이트웨이 생성

다음과 같이 퍼블릭 서브넷에 NAT 게이트웨이를 생성해주도록 하자.

이 떄, Allocate Elasitc IP를 통해서 EIP를 부여해 주어야한다.
부여하지 않으면 An Elastic IP allocation ID is required. 오류 메세지가 출력된다.

프라이빗 서브넷의 라우팅 테이블 수정

프라이빗 서브넷에서의 라우팅 테이블을 인터넷으로 갈 수 있도록 수정해 줘야한다.
이를 하는 방법은 간단하다.

생성한 NAT 게이트웨이를 이용해서 외부로의 접속을 할 것이므로, (0.0.0.0/0 - NAT 게이트웨이)로의 라우팅을 추가해 주면 된다.

프라이빗 인스턴스 생성 및 보안 그룹 설정

이제 프라이빗 인스턴스를 생성해 주도록 하자.

프라이빗 서브넷 내의 인스턴스로 퍼블릭 서브넷의 EC2 인스턴스에서의 (HTTP 웹)접근을 허용한다.

사실 이건 아래 접속확인을 위해서는 필요없다. 안 해도 잘 된다.
(인스턴스의 보호 단위인 보안그룹을 설정하는 것은 단지 EC2 간의 통신규약일 뿐)
(뒤에 DHCP 실습에서 변경하기 위해 설정)

접속 확인

프라이빗 서브넷의 트래픽은 NAT 게이트웨이를 통과한 후 인터넷 게이트웨이를 통해 인터넷으로 나간다.

curl vinca.coi.kr

프라이빗 서브넷 내의 인스턴스에 접속하여 외부 vinca.coi.kr로의 트래픽(접속)이 나갈 수 있는지 확인해보도록 하자.

결과 확인

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

PING 명령어 확인

ping 명령어를 통해 Public 서브넷에서 Privte 서브넷에 Ping통신을 해보자.

ping <Private 서브넷의 인스턴스 IP>

이를 위해서는 ICMP 프로토콜을 허용해 주어야한다.

잘 통신되는 것을 확인할 수 있다.

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

0개의 댓글