AWS - Private Database 구축하기(2) - Private EC2 & MariaDB 생성하기(Mac)

김영훈·2022년 1월 4일
0

AWS

목록 보기
2/3
post-thumbnail

# VPC 환경 구축

  • Private Database를 구축하려면, 우선 Private Subnet과 Public Subnet으로 구성된 VPC 환경을 만들어야 한다. 대개, 인스턴스(EC2, RDS 등...) 구축을 위해 VPC 환경을 직접 생성할 필요는 없다. AWS에서 기본값(default)으로 설정된 VPC 환경을 제공하기 때문이다. 하지만 Private Database를 구축하는 경우엔 다르다. Private Database가 위치할 Private Subnet이 필요하기 때문이다. 이는 사용자가 직접 VPC 설정을 해줘야 가능하다.
  • VPC 환경구조는 아래의 이미지 다이어그램을 참고할 예정이다. (1)Public Subnet으로, 내부에는 Public EC2 Instance를 설치할 것이다. (2)Private Subnet으로, 내부에는 Private EC2 Instance를 설치한 후, 다시 EC2 환경에 MariaDB설치하여 Private Database를 구축할 것이다. Private Subnet Instance로 EC2 대신 RDS를 사용하는 것이 확장성과 편의성 측면에서 훨씬 더 좋지만, 과금에 대한 우려가 있는 경우라면 RDS 대신 EC2 인스턴스를 활용하는 것도 하나의 방법이 될 수 있다.

  • 우선 VPC를 생성하자. 이미 유튜브나 블로그에서 VPC 생성 방법을 정리한 자료가 많기에, 나는 이에 관해선 직접 다루지 않을 생각이다. 대신 내가 Private DB를 만들 때 참고했던 유튜브 자료를 공유하는 것으로 대체하겠다. 영상을 보고 그대로 따라하기만 하면, VPC 생성, Public Subnet 생성, Private Subnet 생성, Internet Gateway 생성 및 연결, 라우팅 테이블 생성 및 연결까지 모두 어렵지 않게 해낼 수 있다.

  • Private Subnet 생성 참고 유튜브 자료

    • 영상 크게 아래와 같이 구성돼 있다. 순서대로 작업을 진행하면 된다.

    • 영상에선 Public Subnet 2개, Private Subnet 4개를 만들지만, 나는 그렇게 많은 Subnet이 필요치 않아 각각 한 개씩만 만들었다.

      • 0:52 ~: VPC 생성
      • 2:21 ~: Internet Gateway 생성 및 VPC에 연결
      • 3:37 ~: Public Subnet 생성 및 public IPv4 할당
      • 6:04 ~: Public Route 테이블 생성 및 테이블에 Internet Gateway 라우팅을 추가하여 Public Subnet과 연결
      • 8:02 ~: Private Subnet 생성
      • 10:23 ~: Private Route 테이블 생성 및 Private Subnet과 연결
  • 서로 짝을 지을 Public Subnet과 Private Subnet의 가용 영역동일하게 설정하도록 하자.
    ex) Public Sunet 가용영역: ap-northeast-2a / Private Sunet 가용영역: ap-northeast-2a

  • 위 작업에서 핵심은 Private Subnet에 public IP를 할당하지 않으며, Internet Gateway 라우팅을 추가하지 않는다는 점이다. 이는 외부 인터넷과의 연결을 차단하여 보안성을 높이기 위해 필요한 부분이다.

# NAT Gateway 생성 및 연결

  • 이제 NAT Gateway를 생성하자. NAT Gateway는 이전 블로그 포스팅 AWS - Private Database 구축하기(2)에서 설명했던 것처럼, Private Subnet 내부에서 외부 인터넷으로 연결해주는 서비스다. 위에서 생성한 VPC의 경우, Private Subnet의 외부와 내부의 모든 연결이 막힌 상태다. Nat Gateway를 Public Subnet 안에 생성한 뒤 이를 Private Subnet의 라우팅 테이블과 연결해주면, Private Subnet 안에서 패키지 다운로드가 가능해진다. 아래 링크 자료를 참고하면 된다.

  • NAT Gateway 생성 및 연결 참고 유튜브 자료

    • 2:30 ~: 탄력적 IP 주소 할당
    • 3:15 ~: NAT Gateway 생성
    • 4:06 ~: Private Route 테이블에 NAT Gateway 라우팅 추가
  • 위 작업의 핵심은 Private Subnet이 Public Subnet이라는 중간 다리를 거쳐 외부와의 통신이 가능해진다는 데 있다. 이는 Private Subnet 안에 구축될 Private Instance의 특징을 암시하는 것이기도 하다. Private Instance는 절대로 외부에서 직접 접근이 불가능하다. 반드시 Public Subnet에 있는 Public Instance를 거쳐야만 접근이 가능하다.

# Instance 생성

  • 이제 구축했던 Subnet과 연결해 줄 Instance를 생성하는 단계다. EC2 인스턴스를 두 개 만들어, 각각 Public Subnet과 Private Subnet에 연결해주면 된다. 이번에도 아래의 영상을 참고하자.

  • Instance 생성 및 Subnet과 연결 참고 유튜브 자료

    • 1:31: Public EC2 Instance 생성
  • 필자의 경우 EC2 세부 설정은 다음과 같이 진행했다.

    • 시작

      • 로그인 —> EC2 —> "인스턴스 시작" 클릭
    • AMI(Amazon Machine Image) 선택

      • Ubuntu Server 18.04 LTS 64bit
    • 인스턴스 유형

      • t2.micro
    • 인스턴스 구성

      • VPC: 생성했던 VPC 선택
      • Subnet: Public EC2에선 Public Subnet을, Private EC2에선 Private Subnet을 선택했다.
      • 종료 방식 설정(중지)
      • 종료방지기능 활성화 목록 체크
      • 추가 요금을 발생하는 목록은 가급적 체크X
    • 스토리지 추가

      • 특별히 설정할 필요X
    • 태그 추가

      • KEY: Name
      • VALUE: Instacne 이름 ex) Public Instance 1, Private Instance 1
    • 보안 그룹 구성

      • 22번 SSH 포트 허용
    • 검토

      • "시작하기" 클릭
      • "기존 키 페어 선택".
      • "시작하기" 클릭
    • 접속

      • 터미널을 켠 뒤, 키 페어가 다운로드된 폴더로 이동
      • AWS의 EC2에 ssh를 이용해 접속하려면 키 페어 파일에 대한 권한 설정을 바꿔야 한다.
        • chmod 600 [키 페어 파일 이름]
      • ssh -i [키 페어] ubuntu@IPv4 퍼블릭 IP —> yes —> EC2가 시작된다.
        • ubuntu@ : 인스턴스에서 사용되는 machine이 ubuntu기 때문에 입력되는 명령어

# Private Instance(EC2) 접속

  • Private EC2 접속 방법은 다음과 같다.

    1. ssh 명령으로 Public EC2접속한다.
    2. Public EC2에서 다시 ssh 명령으로 Private EC2접속한다.
  • 문제는 local 환경에 저장된 pem key를 어떻게 Public EC2 환경에서 사용할지에 관한 것이다. 여기엔 두 가지 방법이 있다. 첫 번째는 ssh agent를 활용해 local 환경에 저장된 pem key를 Public EC2 환경으로 가지고 가는 것이다. 두 번째 방법pem key를 Public EC2에 그대로 복사 붙여넣기를 한 뒤, chmod 600 파일명 명령어로 권한을 조정해주는 것이다. 두 가지 방법 중 편한 방법을 사용하는 것을 권장한다. 이번 글에서 첫 번째 방법에 관해서만 다루겠다. 아래 순서대로 진행하면 된다.

  # 로컬 환경에서 pem key가 저장된 경로로 이동한다.
  cd ~/경로
  
  # private 키파일을 ssh agent에 추가한다. (agent라는 요원에게 키파일을 들려 보낸다)
  ssh-add -K [pem key 파일명]

  # public 인스턴스 키파일로 public 인스턴스에 접속하되 -A 옵션으로 ssh agent와 함께 접속한다.
  ssh -A -i [pem key 파일명] 계정 이름@퍼블릭 IPv4 주소
 
  # private 인스턴스에 접속한다.
  ssh 계정 이름@프라이빗 IPv4 주소

# Private Database 설치

  • Private EC2에 접속했다면 Database를 다운받아 구축하도록 하자. NAT Gateway를 생성하여 Private Subnet 라우팅 테이블과 연결해뒀기 때문에 sudo apt install 명령어를 통해 데이터베이스 패키지 다운로드가 가능하다.

  • 나의 경우 아래의 사이트를 참고하여 MariaDB를 설치했다.

    ubuntu에서 MariaDB 설치하기

  • 이제 남은 것은 외부 API에서 Private Database에 접근이 가능하도록 설정을 하는 일이다. 이 부분에서 아마 궁금증이 생길 것이다. 그동안 Private Subnet Instance는 외부 인터넷에서 접근이 불가능하다고 줄기차게 언급했기 때문이다. 이는 여전히 맞는 설명이다. 외부에서 ssh 명령을 통해 Private Database로 직접 접근하는 것은 불가능하다. 대신 한 가지 방법이 존재한다. 바로 Private Database와 외부 환경 사이에 터널(Tunnel)을 뚫는 것이다. 이를 SSH tunneling이라고 한다. 한마디로, 포트 포워딩(port forwarding)이라고 이해하면 된다. 이에 대해선 다음 기회에 다른 글에서 더 자세히 다루겠다.

profile
Difference & Repetition

0개의 댓글