今回の記事では、MySQLなどのRDSのサービスに安全に接続するための仕組みについて解説します。
Xplentyでは、データベースへアクセスする方法として以下の2種類の方法が用意されています。
1. Direct connection
2. SSH Tunnel 2020年10月新規追加
3. Reverse SSH Tunnel
#1. Direct connection
Direct Connectはユーザーとパスワードを利用してダイレクトに 接続する方法です。
SSLのオプションについて:
Xplentyから接続する際にSSLの証明書を登録せずに、なぜRDSに接続にSSLでアクセスできてしまうのでしょうか?その理由は以下のAWSのサイトにあるようにルート証明書というのをXplenty側でもあらかじめて保有しているためです。したがって接続先がRDSの場合は、チェックをつけるだけで簡単にSSLを利用してRDSに接続することが可能です。
#2. SSH Tunnel
SSH Tunnelは、Bastionホスト(インターネットのような外部のネットワークから、プライベートネットワークへのアクセスを提供するためのサーバー)を介してXplentyをデータベースまたはファイルサーバーに接続することができます。この接続タイプは、データウェアハウスにインバウンドファイアウォールルールを追加できない場合や、データウェアハウスのIPアドレスがイントラネットワーク上にある場合(外部ネットワークアクセスがない場合)に使用されます。
###1.Tunnel Host(Bastionホスト)側の準備
ユニークな公開鍵はXplentyのコネクション設定画面でコネクションごとに生成されます。この公開鍵はSSHトンネルセッションの認証に使用されます。
CopyボタンをクリックしてSSH公開鍵をコピーします。
次に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アドレスから用意したサーバーホストおよびポートにアクセスを許可する設定を行います。
上記が完了したら、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」をクリックする
#3. Reverse SSH Tunnel(Unixの場合)
注)Windowsの場合はこちら
###1. こちらの手順を参考にEC2側(autosshを動かすサーバー)でPrivateとPublic keyを生成し、publicキーのファイルをダウンロードする
###2. Xplenty側の画面でSSH KeyメニューでPublic Keyを保存する
注意:公開鍵をエディタからコピペした場合、改行が入って、「Public key is invalid. It must begin with ...」エラーが表示される場合があるので、ご注意ください。
###3. 接続情報を入力し、「Create Connection」をクリックする
###4. 以下の青い部分にXplenty側のサーバー情報が表示されるので、以下のxxxxxのポート番号部分をメモする。
*virginia-tunnel.xplenty.com:xxxxx
###5. EC2サーバー側で手順に沿ってSSH Server(autossh)をインストール
手順はこちらの「Reverse SSH Tunnel」の手順2を参照ください。
SSH疎通テスト時の注意:上記リンクにある手順6番のコマンドはそれぞれ以下の表を参考に設定ください。
設定箇所 | 説明 |
---|---|
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の接続画面にて「Test connection」ボタンをクリックし、テスト接続できることを確認します。