우선 VPC를 생성하자. 이미 유튜브나 블로그에서 VPC 생성 방법을 정리한 자료가 많기에, 나는 이에 관해선 직접 다루지 않을 생각이다. 대신 내가 Private DB를 만들 때 참고했던 유튜브 자료를 공유하는 것으로 대체하겠다. 영상을 보고 그대로 따라하기만 하면, VPC 생성, Public Subnet 생성, Private Subnet 생성, Internet Gateway 생성 및 연결, 라우팅 테이블 생성 및 연결까지 모두 어렵지 않게 해낼 수 있다.
영상 크게 아래와 같이 구성돼 있다. 순서대로 작업을 진행하면 된다.
영상에선 Public Subnet 2개, Private Subnet 4개를 만들지만, 나는 그렇게 많은 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는 이전 블로그 포스팅 AWS - Private Database 구축하기(2)에서 설명했던 것처럼, Private Subnet 내부에서 외부 인터넷으로 연결해주는 서비스다. 위에서 생성한 VPC의 경우, Private Subnet의 외부와 내부의 모든 연결이 막힌 상태다. Nat Gateway를 Public Subnet 안에 생성한 뒤 이를 Private Subnet의 라우팅 테이블과 연결해주면, Private Subnet 안에서 패키지 다운로드가 가능해진다. 아래 링크 자료를 참고하면 된다.
위 작업의 핵심은 Private Subnet이 Public Subnet이라는 중간 다리를 거쳐 외부와의 통신이 가능해진다는 데 있다. 이는 Private Subnet 안에 구축될 Private Instance의 특징을 암시하는 것이기도 하다. Private Instance는 절대로 외부에서 직접 접근이 불가능하다. 반드시 Public Subnet에 있는 Public Instance를 거쳐야만 접근이 가능하다.
이제 구축했던 Subnet과 연결해 줄 Instance를 생성하는 단계다. EC2 인스턴스를 두 개 만들어, 각각 Public Subnet과 Private Subnet에 연결해주면 된다. 이번에도 아래의 영상을 참고하자.
Instance 생성 및 Subnet과 연결 참고 유튜브 자료
필자의 경우 EC2 세부 설정은 다음과 같이 진행했다.
시작
AMI(Amazon Machine Image) 선택
인스턴스 유형
인스턴스 구성
스토리지 추가
태그 추가
보안 그룹 구성
검토
접속
ssh
를 이용해 접속하려면 키 페어 파일에 대한 권한 설정을 바꿔야 한다.chmod 600 [키 페어 파일 이름]
ssh -i [키 페어] ubuntu@IPv4 퍼블릭 IP
—> yes
—> EC2가 시작된다.ubuntu@
: 인스턴스에서 사용되는 machine이 ubuntu기 때문에 입력되는 명령어Private EC2 접속 방법은 다음과 같다.
ssh
명령으로 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 EC2에 접속했다면 Database를 다운받아 구축하도록 하자. NAT Gateway를 생성하여 Private Subnet 라우팅 테이블과 연결해뒀기 때문에 sudo apt install
명령어를 통해 데이터베이스 패키지 다운로드가 가능하다.
나의 경우 아래의 사이트를 참고하여 MariaDB를 설치했다.
이제 남은 것은 외부 API에서 Private Database에 접근이 가능하도록 설정을 하는 일이다. 이 부분에서 아마 궁금증이 생길 것이다. 그동안 Private Subnet Instance는 외부 인터넷에서 접근이 불가능하다고 줄기차게 언급했기 때문이다. 이는 여전히 맞는 설명이다. 외부에서 ssh
명령을 통해 Private Database로 직접 접근하는 것은 불가능하다. 대신 한 가지 방법이 존재한다. 바로 Private Database와 외부 환경 사이에 터널(Tunnel)을 뚫는 것이다. 이를 SSH tunneling이라고 한다. 한마디로, 포트 포워딩(port forwarding)이라고 이해하면 된다. 이에 대해선 다음 기회에 다른 글에서 더 자세히 다루겠다.