ども、cloudpackかっぱ (@inokara) です。

はじめに

Amazon VPC 内の Amazon RDS に VPC 外から接続する方法の一つとして SSH のポートフォワードを利用して接続するメモ。(特に RDS に限らずオンプレにて同様に外部から閉ざされた MySQL に接続する場合にも同じ方法でいけるはずです。)


参考


メモ

RDS が VPC 外にある場合には…

Amazon RDS が VPC 外にある場合の構成図
ちょっと話は脱線しますが RDS が VPC 外にある場合には上図にある Client の IP アドレスをセキュリティグループに定義するだけで接続することはできずはずです。ただ、クライアントの接続拠点が増える度にセキュリティグループの設定変更を行うのはあまりスマートではないです。そもそも、RDS に Public な IP アドレスを付与する必要がありセキュリティ的にもよろしくありません。

そこで VPC 内なのですが…

Amazon RDS が VPC 内にある場合の構成図
上記のように一度 EC2 インスタンスに SSH でアクセスして RDS にアクセスするように Client で以下のように実行します。

ポート転送モードで EC2 インスタンスに接続する

ssh -f -N -L 3307:hogehoge.xxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306 -i /path/to/key.pem user@${InstanceIP}

上記のようにポート転送モード(この呼び方が正しいかは解りませんが…)で EC2 インスタンスに接続します。これで EC2 の向こう側にいる(上図的に)RDS に対してトンネルを開通しました。

SSH の各オプションは下記の通りです。

オプション 意味 備考
-f SSH をバックグラウンドで動作させる
-N リモートコマンドを実行しない
-L バインドするホスト、ポートとリモートホストとポートを指定する 設定例:
3307:hogehoge.xxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306
${local_host}:${local_port}:${source_host}]${source_port}

開通した状態で下記のように普通に RDS に接続します。

mysql -u${user} -h 127.0.0.1 -P 3307

以下のように Windows のコマンドプロンプトからも接続出来ました。(事前に MySQL クライアントをインストールしておきましょう)
Amazon VPC 内の RDS(MySQL) に SSH のポートフォワードを利用して接続: コマンドプロンプトから動作確認

GUI クライアントからの接続

MySQL Workbenchから接続してみたいと思います。

上図のように設定して接続出来ました。
Amazon VPC 内の RDS(MySQL) に SSH のポートフォワードを利用して接続: GUIクライアント(MySQL Workbench) から動作確認
他の GUI ツールのポートフォワード転送も試してみたいなあ。


ということで…

冒頭でも書きましたが、この方法は RDS に限ったことではなく、オンプレでも社内の開発環境からデータセンター内の MySQL に一時的に接続する際に利用することができますよねー。一時的な利用に限定するべきかと思いますが、社内のクライアントから手軽に VPC 内の RDS に接続する方法の一つの選択肢として覚えておきたいですな。

元記事はこちらです。
VPC 内の RDS(MySQL) に SSH のポートフォワードを利用して接続するメモ