> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

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

> Direct Connection、SSH Tunnel、Reverse SSH Tunnelの3種類の方法でRDSやFirewall越しのMySQLなどのデータベースに安全に接続する手順を解説します。

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

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

## 1. Direct connection

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-1.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=3a8afcf647698757e1926b778e8208c9" alt="onpremise-part01-jp image 1" width="1049" height="754" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-1.webp" />
</Frame>

**Connect using SSLのオプションについて**
Xplentyから接続する際にSSLの証明書を登録せずに、なぜRDSに接続にSSLでアクセスできてしまうのでしょうか？その理由は以下のAWSのサイトにあるように[ルート証明書](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)というのをXplenty側でもあらかじめて保有しているためです。したがって接続先がRDSの場合は、チェックをつけるだけで簡単にSSLを利用してRDSに接続することが可能です。

**Use custom SSL certificateのオプションについて**

Custom SSL certificateとは、データベースやファイルサーバーへ接続する際にデフォルトで提供される証明書ではなく、ユーザー自身（組織）が生成または取得した独自の証明書を使用してサーバーへの接続を暗号化する技術です。

Xplentyもこの機能を対応しているので、サーバーへの接続に該当技術を使いたい場合、このオプションをオンにしてからSSLファイルを登録後に接続してください。

## 2. SSH Tunnel

SSH Tunnelは、Bastionホスト（インターネットのような外部のネットワークから、プライベートネットワークへのアクセスを提供するためのサーバー）を介してXplentyをデータベースまたはファイルサーバーに接続することができます。この接続タイプは、データウェアハウスにインバウンドファイアウォールルールを追加できない場合や、データウェアハウスのIPアドレスがイントラネットワーク上にある場合（外部ネットワークアクセスがない場合）に使用されます。

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-2.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=454928896c2a68ebc3cb36ae421d076b" alt="onpremise-part01-jp image 2" width="2024" height="1294" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-2.webp" />
</Frame>

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

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

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

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-3.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=abd057ae850b2f9c7b5dc4fd1c8efbfc" alt="onpremise-part01-jp image 3" width="1051" height="1045" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-3.webp" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-4.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=fd74ca3d371f99245e7b679a7da858d6" alt="onpremise-part01-jp image 4" width="1053" height="1048" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-4.webp" />
</Frame>

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

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

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-5.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=37f616e45a2bbeedcba4895ca7a938ed" alt="onpremise-part01-jp image 5" width="1202" height="829" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-5.webp" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-6.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=ffe78d3c6a38ec1432519da25671f341" alt="onpremise-part01-jp image 6" width="2024" height="1294" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-6.webp" />
</Frame>

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

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

顧客のクライアントがLinux/Unixの場合、下記の手順で設定を行います。(Windowsの場合は[こちら](https://www.xplenty.com/docs/set-up-a-reverse-ssh-tunnel-from-windows/)をご参考ください)

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

[こちらの手順](https://community.xplenty.com/knowledgebase/articles/468251)を参考にEC2側(autosshを動かすサーバー)でSSHキーペア(PrivateキーとPublicキー)を生成し、Publicキーのファイルをダウンロードしておきます。

### 2. PublicキーをXplentyに保存

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-7.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=e03fc7787a078354e0a48289acc89db1" alt="onpremise-part01-jp image 7" width="1202" height="829" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-7.webp" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-8.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=f5f8ae0b1fe54c4636efba39581b3163" alt="onpremise-part01-jp image 8" width="1202" height="829" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-8.webp" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-9.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=8068c07afccf3bfe3afe6ea46f5bebf1" alt="onpremise-part01-jp image 9" width="1262" height="110" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-9.webp" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-10.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=5ca9e57d6e5814500436ab566c50d3b6" alt="onpremise-part01-jp image 10" width="1054" height="829" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-10.webp" />
</Frame>

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

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

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-11.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=319f1ef0214e1dc33570fc4d0fda17f6" alt="onpremise-part01-jp image 11" width="1053" height="829" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-11.webp" />
</Frame>

### 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番のコマンドはそれぞれ以下の表を参考に設定ください。

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-12.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=c842ce3821adbffd80569aa4982f2e8a" alt="onpremise-part01-jp image 12" width="1716" height="208" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-12.webp" />
</Frame>

| 設定箇所             | 説明                                                                                      |
| ---------------- | --------------------------------------------------------------------------------------- |
| 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のコネクター画面上で疎通テストと保存

ここまで手順が完了したら、Xplentyの接続画面にて「Test connection」ボタンをクリックしてテスト接続が通る事を確認します。
問題なければ「Save connection」ボタンにて保存します。

<Frame>
  <img src="https://mintcdn.com/integrateio/u3KZjgbItgbZsh3u/images/japanese-knowledge-base/onpremise-part01-jp/image-13.webp?fit=max&auto=format&n=u3KZjgbItgbZsh3u&q=85&s=862afc26dc65ae1729acb4e001291fc2" alt="onpremise-part01-jp image 13" width="1202" height="829" data-path="images/japanese-knowledge-base/onpremise-part01-jp/image-13.webp" />
</Frame>
