[클라우드]오라클 클라우드에 서버 구축하기 – 3. Private 서브넷의 서버에 SSH 접속하기

오라클 클라우드의 계정에서 생성한 클라우드 네트워크인 VCN은 Public 서브넷(DMZ와 동일함)과 Private 서브넷(내부망)을 분리할 수 있다.

Public 서브넷에 설치하는 인스턴스(서버)에는 공인IP를 1대1 NAT로 설정하여 외부에서 접속할 수 있다. 즉 인터넷에 공개할 웹서버나 API서버는 Public 서브넷에 구축한다. 그리고 Private 서브넷에는 인터넷에서 직접 접속은 금지하고 Public 서브넷의 인스턴스만 접속하도록 제한하여야 하는 DB서버 등을 설치하게 된다. (기업에서 오라클 클라우드를 사용한다면 Private 서브넷에는 AP서버를 설치하고 AP서버가 데이터베이스(AWS의 RDS에 대응됨)에 접속하도록 구성하는 경우도 많다.)

그런데.. Private 서브넷에 인스턴스를 설치하면 관리를 위해 외부에서 직접 SSH를 접속할 수 없다. (궂이 원한다면 할수도 있지만 그렇게 되면 Private 서브넷 보안성이 낮아지며 Private 서브넷을 구성하는 의미가 없다) Private 서브넷의 서버에 SSH 접속을 하고자 한다면 Public 서브넷의 인스턴스에 접속한 뒤 Private 서브넷의 인스턴스로 SSH 접속을 해야 한다.

먼저 Private 서브넷에 리눅스 인스턴스를 설치한다.

오라클 클라우드의 인스턴스 만들기
Oracle Cloud의 Create Compute Instance

인스턴스의 이름은 ubuntu01 이다.

네트워크 구성에서 Private Subnet을 선택해준다. 그리고 Public IPv4를 할당하지 않는다.

Oracle Cloud의 Private Subnet을 선택, Public IP not assign
오라클 클라우드의 Private 서브넷을 선택

Private 서브넷에 인스턴스를 만들면 SSH 접속 시 반드시 PKI 인증을 통해서만 접속할 수 있도록 하는 것이 기본이다. 만약 아래에서 “No SSH keys”를 선택한다면 접속할 방법이 없다.

Private Subnet에 설치된 인스턴스는 PKI 인증이 기본이다.

따라서 아래처럼 오라클 클라우드에서 개인키와 공개키를 발급받아 PC에 파일로 저장하도록 한다. 물론 Putty나 XShell에서 생성한 키 중 공개키 .pub 파일을 직접 등록해도 된다. 여기에서는 오라클 클라우드에서 만들어주는 PKI 파일을 사용할 것을 권한다. 필요하다면 나중에 SSH 접속 용 PKI를 자체적으로 발급해도 된다.

오라클 클라우드에서 생성한 인증서 파일 저장하기
오라클 클라우드에서 생성한 인증서 파일 저장하기 (Private key와 Public Key)

오라클 클라우드는 PEM 파일로 키를 만들어주지는 않는다.

Create 버튼을 눌러 인스턴스를 생성하고 잠시 뒤면 생성되어 실행중인 ubuntu01 (ubuntu 20.04 LTS) 인스턴스를 Compute – Instances 메뉴에서 확인할 수 있다.

Oracle Cloud에서 실행중인 Instance 목록
오라클 클라우드에서 실행중인 인스턴스 목록

ubuntu01 인스턴스를 선택해 세부 정보를 보면 할당된 IP와 서브넷을 확인할 수 있다.

Private 서브넷에 설치되어 할당된 IP

이제 Private 서브넷에 설치된 ubuntu01 인스턴스에 SSH 접속을 하기 위한 설정과정이다.

먼저 ubuntu01 인스턴스 생성과정에서 다운로드 받은 Public키(공개키)와 Private키(개인키) 파일을 Public 서브넷에 설치된 ubuntu_web 서버에 업로드해야 한다. 즉 ubuntu01 인스턴스로의 접속은 ubuntu_web 인스턴스에 SSH 접속한 뒤 해야하기 때문에 개인키 파일과 공개키 파일을 ubuntu_web 서버에 업로드 해야 한다.

오라클 클라우드의 인스턴스 생성 시 다운로드 받은 공개키와 개인키 파일
PC에 다운로드 받은 ubuntu01 접속 용 ssh key 파일 (개인키와 공개키)

이 두개의 파일을 ubuntu_web 서버의 기본계정인 ubuntu 계정의 홈디렉토리 아래의 .ssh 디렉토리에 ubuntu01 인스턴스의 IP에 해당하는 디렉토리를 만들고 그 아래에 다음과 같이 업로드 한다.

ssh 접속 용 공개키와 개인키 파일
Private 서브넷의 인스턴스에 접속하기 위해 Public 서브넷 인스턴스에 업로드 된 개인키 및 공개키 파일

ssh-key-2021-06-19.key 파일은 개인키 파일이므로 id_rsa 로 이름을 변경하여 업로드하고 ssh-key-2021-06-19.key.pub 파일은 공개키 파일이므로 id_rsa.pub 라는 이름으로 변경하여 업로드 한다. (업로드 한 뒤 이름을 변경한다.)

이제 Public 서브넷에서 실행중인 ubuntu_web 인스턴스에 ssh 접속한 뒤 다음과 같이 Private 서브넷에서 실행중인 ubuntu01 인스턴스에 ssh 접속을 할 수 있다.

public 서브넷의 인스턴스에서 private 서브넷의 인스턴스에 ssh 접속한 화면

AWS 및 Oracle Cloud의 배스천호스트(Bastion Host)의 역할이 바로 이 기능을 수행하는 서버다. 즉 인터넷에서 접속이 가능한 Public 서브넷에 인스턴스 하나를 배스천호스트로 지정하고 Public 서브넷 및 Private 서브넷에 위치한 많은 서버에 배스천호스트를 통해서만 접속할 수 있도록 하는 것이다.

하지만 보안상 발생할 수 있는 수많은 문제점으로 인해 공개된 인터넷 구간을 경유하여 접속할 수 있는 배스천호스트의 운영은 금지할 것을 권고하고 있다.

● 이전 포스트 보기

[클라우드]오라클 클라우드(OCI)에 서버 구축하기 – 2. 인스턴스(VM) 생성하기

[클라우드]오라클 클라우드(OCI)에 서버 구축하기 – 2. 인스턴스(VM) 생성하기 [클라우드]오라클 클라우드(OCI)에 서버 구축하기 – 1. VCN 생성하기

#오라클클라우드 #OCI #Public서브넷 #Private서브넷 #배스천호스트

Scroll to Top