Xplenty에서 MySQL(RDS 및 Firewall 넘어에 있는 DB)에 연결하는 절차

이번 가이드에서는 MySQL 등의 RDS 서비스에 안전하게 연결하기 위한 절차에 대해 설명합니다.
Xplenty는 데이터베이스에 액세스하는 방법으로 다음 세 가지 방법을 제공합니다.

  1. Direct connection
  2. SSH Tunnel
  3. Reverse SSH Tunnel

1. Direct connection

Direct Connect는 사용자와 암호를 사용하여 직접 연결하는 방법입니다.

thumbnail image

SSL 옵션 정보에 대하여
Xplenty에서 연결할 때 SSL 인증서를 등록하지 않고도 어떻게 RDS연결에 SSL을 통해 액세스 할 수 있을까요? 그 이유는 AWS 사이트에 있는 루트 인증서를 Xplenty쪽에서 미리 보유하고 있기 때문입니다. 따라서 RDS에 접속하는 경우는 Connect using SSL의 체크만으로 간단하게 SSL을 사용한 RDS에 접속이 가능합니다.

Use custom SSL certificate 옵션 정보에 대하여

Custom SSL certificate는 데이터베이스나 파일 서버에 접속할 때 기본적으로 제공되는 증명서가 아닌, 유저 자식(조직)이 생성한 독자적인 증명서를 사용해서 서버 접속을 암호화 하는 기술입니다. 

Xplenty도 이 기능을 제공하고 있으며, 서버 접속시에 본 기능을 사용하고자 할 경우에 이 옵션을 키고 SSL 관련 파일을 등록후에 접속하십시요.

2. SSH Tunnel

SSH Tunnel은 Bastion 호스트(인터넷과 같은 외부 네트워크에서 사설 네트워크에 대한 액세스를 제공하는 서버)를 통해 Xplenty를 데이터베이스 또는 파일 서버에 연결할 수 있습니다. 이 연결 유형은 데이터 웨어하우스에 인바운드 방화벽 규칙을 추가할 수 없거나 데이터 웨어하우스의 IP 주소가 인트라 넷에 있는 경우(외부 네트워크로 액세스가 안 되는 경우)에 사용됩니다.

thumbnail image

1. Databaseコネクターの事前準備

SSH 터널을 통해 데이터베이스나 파일 서버에 연결하기 위해서는 먼저 Xplenty 측에서 SSH 클라이언트로 고객 측에 SSH 연결(SSH 터널)을 수행합니다. 이 SSH 연결이 확립된 후에 데이터베이스나 파일 서버로의 연결이 이루어집니다.

Xplenty에서 SSH 터널을 설정할 때 필요한 것은 SSH 키 페어이며, Xplenty가 제공하는 공개 키를 고객 측 SSH 서버에 배치한 후, Xplenty에서 비밀 키로 SSH 연결을 설정합니다.

아래 그림과 같이 Xplenty의 커넥터 생성 화면에서 Access Type을 SSH tunnel connection으로 선택한 후 관련 정보를 입력합니다.

thumbnail image

Create connection을 클릭하면, Xplenty의 SSH공개키가 표시됩니다.

thumbnail image

고유의 SSH 공개 키는 Xplenty의 커넥션 설정 화면에서 개별 커넥션 별로 생성됩니다. 이 공개 키는 SSH 터널 세션을 인증하는 데 사용되며, 복사 아이콘을 클릭하여 SSH 공개 키를 클립보드에 복사합니다.

2. Tunnel Host(Bastion 호스트)쪽의 준비

다음은 Bastion 호스트쪽으로 가서 아래의 절차를 수행합니다.

  1. xplenty라는 그룹을 만듭니다.
    sudo groupadd xplenty

  2. xplenty라는 사용자와 Home 디렉토리 작성
    sudo useradd -m -g xplenty xplenty

  3. 사용자를 xplenty로 전환
    sudo su - xplenty

  4. .ssh 디렉토리를 만들고 권한을 변경
    mkdir ~/.ssh && chmod 700 ~/.ssh

  5. authorization_keys 파일을 만들고 권한을 변경
    touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

  6. 텍스트 편집기 등을 사용하여 클립보드의 공개 키를 authorized_keys에 추가

  7. Xplenty의 IP 주소에서 제공하는 서버 호스트 및 포트에 대한 액세스를 허용하도록 설정

위의 작업이 완료되면 Xplenty의 커넥션 설정 화면에서 Test connection을 클릭하고 연결이 성공하면 Create connection을 클릭합니다.

3. 접속정보를 입력하고, [Save Connection]을 클릭

위 작업이 완료되면 Xplenty의 커넥터 설정 화면에서 [Test connection]을 클릭하여 SSH 터널을 통해 데이터베이스나 파일서버에 정상적으로 연결이 설정되는지 테스트합니다. 연결 테스트가 성공하면 [Save connection]을 클릭합니다.

thumbnail image

4. 터널 보안에 관한 주의사항

기본적으로 SSH 액세스를 열면 Xplenty와 SSH 터널을 종료하는 데이터베이스 호스트 간의 방화벽을 교모히 회피하며 모든 포트에 대한 전송이 가능합니다. 보다 안전한 보안을 위해 포트 포워딩과 터널 서버에 대한 로그인을 제한 하십시오. 이를 위해서 계정의 공개 키에 대하여 ~/.ssh/authorized_keys 항목의 적절한 설정으로 제어할 수 있습니다.

예를 들어, 다음 설정 내용을 authorized_keys 파일의 SSH 키 앞에 추가할 수 있습니다. 이 설정 내용은 사용자 환경에 맞게 반드시 재설정하여 사용하도록 하십시요.
no-pty,no-X11-forwarding,permitopen="localhost:5432",permitopen="localhost:3306",command="/bin/echo Login Not Permitted"

3. 연결 정보를 입력하고 Create Connection을 클릭합니다.

thumbnail image

3. Reverse SSH Tunnel(Unix의 경우)

Reverse SSH Tunnel은 아래 그림과 같이 SSH 연결의 방향이 SSH 터널과 정반대입니다. 고객이 SSH 클라이언트가 되어 SSH 연결을 수행하고, 이를 통해 설정된 SSH 터널을 통해 Xplenty 측이 고객의 데이터베이스나 파일 서버를 이용합니다.

즉, Xplenty쪽이 SSH 서버가 되어 고객쪽의 SSH 연결을 기다려야 하므로, Xplenty쪽에서 SSH 엔드포인트를 제공합니다.

thumbnail image

이 방법은 아래 두 가지 이유로 자주 사용됩니다.

  1. 방화벽에서 SSH 연결이 인바운드만 허용되어 있는 경우
  2. 고객 측 서버 연결 정보를 보안 정책으로 노출하고 싶지 않은 경우

고객의 클라이언트가 Linux/Unix인 경우, 아래 절차로 설정을 진행합니다.
(Windows의 경우는 이곳(영어)을 참고하세요.)

1. 고객쪽에 SSH 클라이언트를 준비

여기의 순서(영어)를 참고하여 EC2측(autossh를 움직이는 서버)에서 Private 키와 Public 키를 생성해, Public 키의 파일을 다운로드

2. Public 키를 Xplenty에 저장

Xplenty 측 화면에서 SSH Key 메뉴에서 Public 키를 저장

thumbnail imagethumbnail image

주의 : 공개 키를 편집기에서 복사 한 경우 줄 바꿈이 포함되어 있다면 "Public key is invalid. It must begin with ..." 에러 메세지가 표시 될 수 있으므로 주의하십시오.thumbnail image

3. 연결 정보를 입력하고 Create Connection을 클릭

thumbnail image

4. Xplenty쪽의 SSH엔드 포인트를 얻기

아래의 Reverse Tunnel Connection Setup에 Xplenty쪽의 엔드 포인트(서버 정보)가 표시되므로 그것을 메모

thumbnail image

5. 데이터 베이스 혹은 파일 서버의 정보를 설정

EC2 서버 측의 절차에 따라 SSH Server(autossh) 설치
절차는 여기(영어)의 "Reverse SSH Tunnel"의 절차 2를 참조하십시오.

  • SSH 통신 테스트 시의 주의: 위의 링크에 있는 절차 6의 명령은 각각 아래 표를 참고로 설정하십시오.thumbnail image
설정 위치 설     명
connection port 위의 4단계에서 기록한 포트 번호를 설정합니다. (굵은 부분의 번호)
my server RDS 혹은 Firewall 너머에 있는 (MySQL 등) 서버의 호스트명을 지정해 주세요.
local port RDS 또는 Firewall을 넘는 (MySQL 등) 서버의 포트 번호를 지정하십시오.
Xplenty server 연결을 만들 때 Xplenty 화면에 표시되는 호스트 이름을 설정합니다.
예) 순서 4의 화면을 예로 한 경우 virginia-tunnel.xplenty.com을 설정합니다.
private key file secret key 경로
예) ~/.ssh/id_rsa

6. Xplenty의 커넥터 화면에서 소통 테스트와 저장

여기까지 절차가 완료되면 Xplenty 연결 화면에서 [Test connection] 버튼을 클릭하여 테스트 연결이 가능한지 확인합니다. 문제가 없다면 [Save connection]버튼으로 저장합니다.
thumbnail image