Eclipse DBViewerプラグインから踏み台サーバ経由でRDSに接続する

2014.10.02

こんにちは、虎塚です。

今回は、VPC環境のRDSに開発者としてアクセスするときのお話です。

VPCを作成するとき、セキュリティ維持の観点から、内部インスタンスへのアクセスは踏み台を経由することを前提とした構成にすることがあります。インバウンドの接続元を限定したセキュリティグループをEC2やRDSに適用して、外部のインターネットから直接アクセスできないようにするわけですね。

RDSにVPC内からのアクセスだけを許可するようにセキュリティグループで設定していると、ローカルマシンからRDSに接続する際にも、踏み台サーバを経由する必要があります。今回はこのための手順を紹介します。

前提とする構成

次の図のような、よくあるVPC環境を前提とします。

踏み台サーバを経由したRDS接続

  • VPC内に踏み台EC2サーバとRDSがある
  • RDSのセキュリティグループでは、VPC内からのアクセスだけを許可している

上記の2点が、前提条件のポイントです。また、今回は例としてOracle RDSを使います。

この状況で、開発者がローカルマシンからRDSの中身を見たいというケースを考えます。上の図でいうと、開発者から踏み台サーバを経由して、RDSに伸びる赤い線に着目してください。

解決策の概要

まず、踏み台サーバからRDSへの接続を、ローカルマシンに転送(ポートフォワーディング)します。次に、EclipseのDBViewerから、そのポートを経由してDBに接続します。これによって、まるでローカルマシンから直接RDSに接続しているかのように操作できます。

以下の手順は、次の環境で確認しました。

  • Mac OS X 10.9.4 (13E28)
  • Eclipse 4.4.0 (Build id: 20140612-0600)
  • DBViewer Plugin 1.2.2.v20101009

手順

1. DBViewerプラグインのインストール

Eclipseを起動して、[Help] → [Eclipse Marketplace] → [Search]タブを開きます。[Find]テキストボックスに「DBViwer」と入力し、[Go]ボタンを押します。DBViwerが表示されるので、[Install]ボタンを押します。

DBViewerの検索

インストールする機能を選択します。「DBViwer Plugin」の左のチェックボックスをONにして、[Confirm]ボタンを押します。

インストールする機能の選択

ライセンスが表示されますので確認します。同意できる場合、「I accept the terms(略)」のラジオボタンを選択し、[Finixh]ボタンを押します。

ライセンスに同意

プラグインのインストールが始まります。次のようなアラートが表示されたら、[OK]ボタンを押します。

You will need to restart Eclipse for the changes to take effect. Would you like to restart now?

これでインストールが完了しました。

2. JDBCのダウンロード

今回はOracle RDSに接続するため、Oracle用のJDBCが必要です。OracleのWebサイトから、ローカルマシンに合ったJDBCをダウンロードします。

接続先のOracleと同じバージョンのJDBCを選択します。ダウンロードには、ライセンスへの同意と、OTNへのログインが必要です。OTNのアカウントを持っていない場合は、事前にユーザ登録をしてください。

JDBCをダウンロードしたら展開して、ローカルマシンの任意の場所に設置しておきます。

$ mv ~/Download/instantclient-jdbc-macos.x64-11.2.0.4.0.zip ~/local/ $ unzip -o instantclient-jdbc-macos.x64-11.2.0.4.0.zip

ポートフォワーディング

Macのターミナルを開き、次のようなsshコマンドを実行します。

$ ssh -i キーファイル -L 10022:RDSのエンドポイント:1521 ec2-user@踏み台サーバのElasticIP -p 22
  • 「-i キーファイル」は、踏み台サーバにログインするためのキーファイルです
  • 10022は、今回ローカルマシン側で利用するポート番号です
  • RDSのエンドポイントは、xxx.yyyyyyyy.ap-northeast-1.rds.amazonaws.comといった文字列です
    • RDSのManagement Consoleから確認できます
  • 1521は、Oracleに接続するためにデフォルトで使用するポート番号です
  • 「-p 22」は、踏み台サーバに22番ポートでアクセスすることを意味します

この時点で接続に失敗するときは、RDSに設定したセキュリティグループを見直してください。踏み台サーバからのアクセスを許可する設定を追加する必要があります。今回は冒頭の図にあるように、RDSに設定したセキュリティグループでは、VPC内からのアクセスをすべて許可しています。

3. DBViewerプラグインの利用

まず、Eclipseで[Window] → [Open Perspective] → [Other]から「DBViewer」を選択します。画面にDBツリー・ビューが表示されます。プラスマークの付いたアイコンをクリックします。

接続の追加

次に、JDBCを選択します。「データベース定義名」に任意の文字列を入力します(次の図では、仮にinstanceとしています)。[ファイルの追加]ボタンを押し、先ほど展開したJDBCのファイル群から「ojdbc6.jar」を選択します。[Next]ボタンを押します。

JDBCの選択

それから、データベースへの接続情報を入力します。今回はOracleのRDSに接続しますので、接続文字列は図のように「jdbc:oracle:thin:@localhost:ローカルポート番号:接続先RDSのSID」とします。[Next]ボタンを押します。

接続情報の入力

最後に、DBツリー・ビューのフィルタなどの接続オプションを指定します。何も指定しなくても構いません。[Finish]ボタンを押します。

接続オプションの入力

DBツリー・ビューでデータベース定義名をクリックすると、RDSの中身を見ることができます。

接続状態のDBツリー・ビュー

作業が終わったら、データベース定義名を右クリックして、接続を切断しておきましょう。

なお、SSH接続が途切れた状態でツリーを開こうとすると、次のアラートが表示されます。

エラーが発生しました

Reason: ソケットから読み込むデータはこれ以上ありません。

この場合、SSHポートフォワーディングからやり直してください。

おわりに

上記の手順によって、踏み台を経由してローカルからRDSを触ることができます。MySQLなど他のDBを使っているときも、JDBCドライバの種類と接続文字列が異なるだけで、基本的な手順は同じです。必要に応じて試してみてください。

(追記)同じことをOracle SQL Developerから行う手順を紹介しました。Oracle SQL Developerから踏み台サーバ経由でRDSに接続する | Developers.IO

それでは、また。