0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

0
Last updated at Posted at 2020-07-13

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

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

1. Direct connection

Direct Connectはユーザーとパスワードを利用してダイレクトに 接続する方法です。
opprem01_01.png

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アドレスがイントラネットワーク上にある場合(外部ネットワークアクセスがない場合)に使用されます。
image.png

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

SSH Tunnelを介してデータベースやファイルサーバに接続するためには、先にXplenty側からSSHクライアントとして顧客側にSSH接続(SSH Tunnel)を行います。このSSH接続が確立された後にデータベースやファイルサーバへの接続が行われます。

XplentyからSSH Tunnelを確立する時に必要なのがSSHキーペアであり、Xplentyが提供する公開キーを顧客側のSSHサーバーに置き、後にXplentyから秘密キーでSSH接続を確立されます。

下記の図のようにXplentyのコネクター作成画面でAccess TypeをSSH tunnel connectionを選択してから諸情報を入力します。
opprem01_02.png

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

ユニークな公開鍵はXplentyのコネクション設定画面でコネクションごとに生成されます。この公開鍵はSSHトンネルセッションの認証に使用されます。
Copyボタンをクリックして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アドレスから用意したサーバーホストおよびポートにアクセスを許可する設定を行います。

3. 接続情報を入力し、「Save Connection」をクリックする

上記が完了したら、Xplentyのコネクション設定画面で「Test connection」をクリックしてSSH Tunnelを介して正常にデータベースやFTPサーバーへ接続が確立されるかとテストします。接続のテストが成功したら「Save connection」をクリックします。
opprem01_04.png

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エンドポイントを提供します。

image.png

この方法は、下記の2つの理由でよく使われております。

  1. FirewallでSSH接続がインバウンドのみの許可になっている
  2. 顧客側のサーバー接続情報をセキュリティ・ポリシによって露出したくない

顧客のクライアントがLinux/Unixの場合、下記の手順で設定を行います。(Windowsの場合はこちらをご参考ください)

1. 顧客側でSSHクライアントを準備

こちらの手順を参考にEC2側(autosshを動かすサーバー)でSSHキーペア(PrivateキーとPublicキー)を生成し、Publicキーのファイルをダウンロードしておきます。

2. PublicキーをXplentyに保存

Xplenty側の画面でSSH Keyメニューに先ほどのPublicキーの内容をコピペで登録します。

opprem01_05.png

opprem01_06.png

注意:Publicキーをエディタからコピペする際に改行が入っていると、「Public key is invalid. It must begin with ...」エラーが表示されるのでご注意ください。改行を削除すればエラーがなくなります。
image.png

3. 接続情報を入力し、「Create Connection」をクリック

opprem01_07.png

4. Xplenty側のSSHエンドポイントを取得

以下の赤い四角にXplenty側のエンドポイント(サーバー情報)が表示されるので、それをメモする。

opprem01_08.png

5. データベースやファイルサーバーの情報を設定

EC2サーバー側で手順に沿ってSSH Server(autossh)をインストール
手順はこちらの「Reverse SSH Tunnel」の手順2を参照ください。

  • SSH疎通テスト時の注意:上記リンクにある手順6番のコマンドはそれぞれ以下の表を参考に設定ください。
    image.png
設定箇所 説明
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」ボタンにて保存します。

opprem01_09.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?