今回の記事では、MySQLなどのRDSのサービスに安全に接続するための仕組みについて解説します。
Xplentyでは、データベースへアクセスする方法として以下の2種類の方法が用意されています。
1. Direct connection
2. SSH Tunnel
3. Reverse SSH Tunnel
1. Direct connection
Direct Connectはユーザーとパスワードを利用してダイレクトに 接続する方法です。

Connect using SSLのオプションについて
Xplentyから接続する際にSSLの証明書を登録せずに、なぜRDSに接続にSSLでアクセスできてしまうのでしょうか?その理由は以下のAWSのサイトにあるようにルート証明書というのをXplenty側でもあらかじめて保有しているためです。したがって接続先がRDSの場合は、チェックをつけるだけで簡単にSSLを利用してRDSに接続することが可能です。
Use custom SSL certificateのオプションについて
Custom SSL certificateとは、データベースやファイルサーバーへ接続する際にデフォルトで提供される証明書ではなく、ユーザー自身(組織)が生成または取得した独自の証明書を使用してサーバーへの接続を暗号化する技術です。
Xplentyもこの機能を対応しているので、サーバーへの接続に該当技術を使いたい場合、このオプションをオンにしてからSSLファイルを登録後に接続してください。
2. SSH Tunnel
SSH Tunnelは、Bastionホスト(インターネットのような外部のネットワークから、プライベートネットワークへのアクセスを提供するためのサーバー)を介してXplentyをデータベースまたはファイルサーバーに接続することができます。この接続タイプは、データウェアハウスにインバウンドファイアウォールルールを追加できない場合や、データウェアハウスのIPアドレスがイントラネットワーク上にある場合(外部ネットワークアクセスがない場合)に使用されます。

1.Databaseコネクターの事前準備
SSH Tunnelを介してデータベースやファイルサーバに接続するためには、先にXplenty側からSSHクライアントとして顧客側にSSH接続(SSH Tunnel)を行います。このSSH接続が確立された後にデータベースやファイルサーバへの接続が行われます。
XplentyからSSH Tunnelを確立する時に必要なのがSSHキーペアであり、Xplentyが提供する公開キーを顧客側のSSHサーバーに置き、後にXplentyから秘密キーでSSH接続を確立されます。
下記の図のようにXplentyのコネクター作成画面でAccess TypeをSSH tunnel connectionを選択してから諸情報を入力します。

Create connectionをクリックしたら、XplentyのSSH公開キーが表示されます。

ユニークな公開鍵はXplentyのコネクション設定画面でコネクションごとに生成されます。この公開鍵はSSHトンネルセッションの認証に使用されます。
CopyボタンをクリックしてSSH公開鍵をコピーします。
2.Tunnel Host(Bastionホスト)側の準備
次にBastionホスト側で以下を実行します。
-
xplentyというグループを作成します
sudo groupadd xplenty -
xplentyというユーザーとHomeディレクトリを作成します
sudo useradd -m -g xplenty xplenty -
ユーザーをxplentyにスイッチします
sudo su - xplenty -
.sshディレクトリを作成し、パーミッションを変更します
mkdir ~/.ssh && chmod 700 ~/.ssh -
authorization_keysファイルを作成し、パーミッションを変更します。
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys -
テキストエディタ等を使用して、先ほどコピーしておいた公開鍵をauthorized_keysに追加します
-
XplentyのIPアドレスから用意したサーバーホストおよびポートにアクセスを許可する設定を行います。
3. 接続情報を入力し、「Save Connection」をクリックする
上記が完了したら、Xplentyのコネクション設定画面で「Test connection」をクリックしてSSH Tunnelを介して正常にデータベースやFTPサーバーへ接続が確立されるかとテストします。接続のテストが成功したら「Save connection」をクリックします。

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. Reverse SSH Tunnel(Unixの場合)
Reverse SSH Tunnelは、下記の図のようにSSH接続の確率がSSH Tunnelとは真反対です。顧客がSSHクライアントになってSSH接続を行い、それによって確立されたSSHトンネルを介してXplenty側が顧客のデータベースやファイルサーバーを利用します。
つまり、Xplenty側がSSHサーバーになって顧客側のSSH接続を待つ必要があるので、Xplenty側からSSHエンドポイントを提供します。
この方法は、下記の2つの理由でよく使われております。
- FirewallでSSH接続がインバウンドのみの許可になっている
- 顧客側のサーバー接続情報をセキュリティ・ポリシによって露出したくない
顧客のクライアントがLinux/Unixの場合、下記の手順で設定を行います。(Windowsの場合はこちらをご参考ください)
1. 顧客側でSSHクライアントを準備
こちらの手順を参考にEC2側(autosshを動かすサーバー)でSSHキーペア(PrivateキーとPublicキー)を生成し、Publicキーのファイルをダウンロードしておきます。
2. PublicキーをXplentyに保存
Xplenty側の画面でSSH Keyメニューに先ほどのPublicキーの内容をコピペで登録します。
注意:Publicキーをエディタからコピペする際に改行が入っていると、「Public key is invalid. It must begin with ...」エラーが表示されるのでご注意ください。改行を削除すればエラーがなくなります。

3. 接続情報を入力し、「Create Connection」をクリック
4. Xplenty側のSSHエンドポイントを取得
以下の赤い四角にXplenty側のエンドポイント(サーバー情報)が表示されるので、それをメモする。
5. データベースやファイルサーバーの情報を設定
EC2サーバー側で手順に沿ってSSH Server(autossh)をインストール
手順はこちらの「Reverse SSH Tunnel」の手順2を参照ください。
| 設定箇所 | 説明 |
|---|---|
| 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」ボタンにて保存します。






