はじめに
Oracle Autonomous Data warehouse(ADW)インスタンスに接続する場合は1522ポートへのアクセスが許可されている必要がありますが(ADWインスタンスへの接続に使用するポートは1522で固定、2019/9時点)、セキュリティの観点で外部へのアクセスを一部のポートに限っているケースがあります。
そのような場合においてOracle Data Visualization Desktop(DVD)からADWにアクセスするために、そのための手段の一つであるSSHトンネルを介した接続方法を記載します。
ちなみに、以下はOracle Data Visualization Desktopを例に記載してますが、他のクライアントツールを利用する場合も同様です。
事前準備
ここではADWインスタンスは作成済みであり、またOracle Cloud Infrastructure(OCI)のComputeインスタンスも作成済みで、ここにSSHサーバを配置することを前提にしています。
■ SSHクライアントのインストール
DVDを使用するクライアントPC(Windows)にSSHクライアントをインストールします。
ここでは、Git BashをインストールしSSHクライアントとします。
Git Bashのインストールは非常に簡単です。公式サイトからパッケージをダウンロードし、数回クリックするだけでインストールできます。
Git Bashをインストールしたら、[スタート]メニューの[Git Bash]アイコンをクリックして、Git Bashの使用を開始できます。 その後、bashターミナルが開き、次のコマンドを実行してbashとSSHクライアントのバージョンを確認できます。
$ bash --version
$ ssh -V
■ OCI コンピュート・インスタンスへの接続確認
このコンピュート・インスタンスは、クライアントからトラフィックを受信し、すべてのトラフィックをターゲットADWインスタンスに転送するSSHサーバーとして機能します。
以下は、コンピュート・インスタンスに接続する際に必要な情報を用意してください
- パブリックIPアドレス:OCIのWebコンソール画面を参照し取得します
- ユーザ名:デフォルトはOPC
- SSH公開鍵:インスタンス作成時に登録した秘密鍵のペアとなる公開鍵
事前の動作確認
まずポートの制限がかかっていないケースと、ポート制限があるがSSHトンネルを構成していないケースで、それぞれどのような挙動になるかチェックしてみます。
▼ ネットワークが制限されていない場合
ネットワークが制限されていない場合、ADWインスタンスへの接続は問題なく作成できるはずです。
[Oracle Autonomous Data Warehouse Cloud]を選択
[Oracle Autonomous Data Warehouse Cloud]を選択
[Client Credentials]は、ADW Webコンソールからダウンロードできるウォレットファイルです。 以下のスクリーンショットを参照してください。
[Username]は、ADWへの接続に使用するユーザーです。 ここでは、デフォルトのユーザー「admin」を使用します。
[Service Name] は、接続するデータベースサービスです。 選択方針はここにご参照ください。
▼ SSHポート22のみが開いている場合
テスト目的で、DVDに使用しているクライアントマシンは、Windows 2012 R2を備えたOCIのコンピュート・インスタンスであり、東京レジョンに配置されています。 ADWインスタンスはAshburnレジョンに配置されています。
セキュリティリストのエグレス・ルールを次のように変更して、ポート22を経由する以外のすべての送信トラフィックをブロックします。
もう一度DVDで接続を作成すると、予想どおり、「Failed to save the connection」というエラーが表示されます。
ADWインスタンスへの接続のホストとポートは、ウォレットファイルに含まれている tnsnames.ora
ファイルで指定されているため、これは驚くことではありません。
設定したエグレス・ルールに従って、ポート22への送信トラフィックのみが許可されます。 ADWインスタンスへの接続を作成しようとすると、クライアント(DVD)は tnsnames.ora
ファイルに指定されたホストとポートにクエリーを送信します。ポート1522へのリクエストがブロックされるため、明らかに失敗します。
SSHトンネルの作成し接続
それではSSHトンネルを設定してアクセスしてみましょう
■ SSHトンネルの作成
SSHトンネルはGit Bashターミナルを開き、以下のコマンドを実行するだけで開始できます。
$ ssh -i path-to-the-private-key -N -L local-port:target-host:target-port user@SSH-server-IP
上記コマンドを見ると、まだわからずらいですね。下の画像はこのコマンドの各オプションの意味を説明しています。★
-
adb.us-ashburn-1.oraclecloud.com:1522
はターゲットホストとターゲットポートです。 すべてのトラフィックがホスト(adb.us-ashburn-1.oraclecloud.com)のポート(1522)に転送されるようにします。 -
opc@SSH-server-IP
の部分は、ログオンするSSHサーバーです。 -
11522
はクライアントPC(Windows)上の空ポートです。ここではポート番号11522
を使用することにしました。
これで、SSHトンネルの準備が整いました!
クライアントPCで、localhost(127.0.0.1)のポート11522へのトラフィックがSSHサーバーに送信され、サーバーはすべてのトラフィックをターゲットホストに転送します。
尚、このコマンドを実行すると、プロンプトは返らず(ターミナルがハングしているようになる)他のコマンドを発行できなくなりますが、これは正常動作です。SSHトンネルが構築され、今すぐ使用できることを意味します。
尚、オプション -f
を使用してトンネルをバックグラウンドに置くことも可能です。
■ SSHトンネルを介したDVDの接続の作成
tnsnames.ora
をついて、以下の赤枠で示したようにhost
とport
を127.0.0.1
と11522
に更新し、クライアントPCのポート11522に対して接続するように記載します。(tnsnames.oraを編集し終わったら、再びzipでフォルダを圧縮します)
DVDの接続の作成をクリックし、先ほどZip圧縮したフォルダを指定します。
SSHトンネルを終了するには
Ctrl + C
を押すか、Git Bashターミナルウィンドウで X
をクリックします。