XplentyからMySQL（RDSやFirewall越しのDB）に接続する際の手順

今回の記事では、MySQLなどのRDSのサービスに安全に接続するための仕組みについて解説します。
Xplentyでは、データベースへアクセスする方法として以下の２種類の方法が用意されています。

**1. Direct connection**
**2. SSH Tunnel** *2020年10月新規追加*
**3. Reverse SSH Tunnel**


#1. Direct connection
Direct Connectはユーザーとパスワードを利用してダイレクトに 接続する方法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/767c5c7b-608d-c4c9-86b5-1c1dfb6451f1.png)
**SSLのオプションについて：**
Xplentyから接続する際にSSLの証明書を登録せずに、なぜRDSに接続にSSLでアクセスできてしまうのでしょうか？その理由は以下のAWSのサイトにあるように[ルート証明書](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)というのをXplenty側でもあらかじめて保有しているためです。したがって接続先がRDSの場合は、チェックをつけるだけで簡単にSSLを利用してRDSに接続することが可能です。

#2. SSH Tunnel
SSH Tunnelは、Bastionホスト（インターネットのような外部のネットワークから、プライベートネットワークへのアクセスを提供するためのサーバー）を介してXplentyをデータベースまたはファイルサーバーに接続することができます。この接続タイプは、データウェアハウスにインバウンドファイアウォールルールを追加できない場合や、データウェアハウスのIPアドレスがイントラネットワーク上にある場合（外部ネットワークアクセスがない場合）に使用されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/721e5c5f-e615-acae-cff5-a01eb73a8b06.png)


###1.Tunnel Host（Bastionホスト）側の準備
ユニークな公開鍵はXplentyのコネクション設定画面でコネクションごとに生成されます。この公開鍵はSSHトンネルセッションの認証に使用されます。
CopyボタンをクリックしてSSH公開鍵をコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/3eecb6b8-4a6d-b88e-76e5-9ad2f1cda477.png)

次に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アドレス](https://www.xplenty.com/docs/xplentys-ip-list/)から用意したサーバーホストおよびポートにアクセスを許可する設定を行います。

上記が完了したら、Xplentyのコネクション設定画面で「Test connection」をクリックし、接続が成功したら「Create connection」をクリックします。

###2.トンネルセキュリティに関する注意事項
デフォルトでは、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」をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/4eb6bba9-b68c-d633-2e9a-e7ed72775b8c.png)




#3. Reverse SSH Tunnel(Unixの場合)
注)Windowsの場合は[こちら](https://www.xplenty.com/docs/set-up-a-reverse-ssh-tunnel-from-windows/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/8830da60-0438-060d-833d-5450fa34b996.png)

###1. [こちらの手順](https://community.xplenty.com/knowledgebase/articles/468251)を参考にEC2側(autosshを動かすサーバー)でPrivateとPublic keyを生成し、publicキーのファイルをダウンロードする
###2. Xplenty側の画面でSSH KeyメニューでPublic Keyを保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/8f11148d-b31a-6ecb-5505-70a0a35abf9f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/6fcaf846-47a8-18ae-38fe-9ca27d22123b.png)
<font color="Crimson">注意：公開鍵をエディタからコピペした場合、改行が入って、「Public key is invalid. It must begin with ...」エラーが表示される場合があるので、ご注意ください。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/38189d3e-2829-b909-35a0-381cc350bf2a.png)
###3. 接続情報を入力し、「Create Connection」をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/4eba9f3f-2a0a-f1f1-0826-ebadc7db8bbb.png)

###4. 以下の青い部分にXplenty側のサーバー情報が表示されるので、以下のxxxxxのポート番号部分をメモする。
***virginia-tunnel.xplenty.com:xxxxx**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/b7bff912-1905-9e88-68b8-1aac2dd56781.png)

###5. EC2サーバー側で手順に沿ってSSH Server(autossh)をインストール
手順は[こちら](https://community.xplenty.com/knowledgebase/articles/204166-allowing-xplenty-access-to-my-server-behind-a-fire)の「Reverse SSH Tunnel」の手順２を参照ください。

SSH疎通テスト時の注意：上記リンクにある手順6番のコマンドはそれぞれ以下の表を参考に設定ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/ad2f7075-b689-93e7-18a1-cb4e5a36a253.png)

| 設定箇所      |説明 | 
|:-----------------|:------------------|
| connection port  |上記手順4でメモしたポート番号をセットください。（太字の部分の番号） |
| my server        | RDSもしくはFirewall越しにある（MySQLなど）サーバーのホスト名を指定ください。     |
| local port       | RDSもしくはFirewall越しにある（MySQLなど）サーバーのポート番号を指定ください |  
| Xplenty server   | コネクション作成時にXplentyの画面に表示されるホスト名を設定します。例）手順４の画面を例にした場合、virginia-tunnel.xplenty.comを設定します。| 
| private key file   | secret keyのパス　例）~/.ssh/id_rsa|

###6.ここまで手順が完了したら、Xplentyの接続画面にて「Test connection」ボタンをクリックし、テスト接続できることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/37c6fe7c-efee-1819-60c6-a8820e4414e5.png)