DVDからSSHトンネルを介してAutonomous Databaseに接続する方法


はじめに

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インスタンスへの接続は問題なく作成できるはずです。

[Connection]を選択

[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をついて、以下の赤枠で示したようにhostport127.0.0.111522に更新し、クライアントPCのポート11522に対して接続するように記載します。(tnsnames.oraを編集し終わったら、再びzipでフォルダを圧縮します)

DVDの接続の作成をクリックし、先ほどZip圧縮したフォルダを指定します。

接続できました!

SSHトンネルを終了するには

Ctrl + Cを押すか、Git BashターミナルウィンドウでXをクリックします。

参考資料