Edited at

Azure SQLDBにlinux踏み台サーバ経由で接続するには

More than 1 year has passed since last update.

Macな環境でもSQL Operations Studioが出てきたおかげで

ずいぶんAzureSQLDBを扱うことが楽になってきました。

(WindowsのVM環境を作ってSQLServer Management Studio(SSMS)使ったりしてました)

AzureSQLDBにはFirewall設定があるので職場などの作業環境のリモートIPアドレスを登録しておけばいいのですが、

リモートワークなどする際にわざわざFWに穴を開けるのも気が引けるもの・・

とかいってVPN張るにもいろいろオーバーヘッド大きすぎて辛いですしね

ということでLinuxサーバを踏み台(Bastion)サーバにしてSSHトンネル経由でAzureSQLDBに接続すれば、

毎度毎度FWに穴を開けなくてもセキュアにアクセスできるのではないかと考えた次第

(もちろんAzureSQLDBのSQLServerのFWには踏み台サーバのIPが登録されていることが前提です。)

図にするとこんな感じ

azuresqldb_portfoward.png

端的には

ssh -f -g -N -C -L 11433:AzureSQLDBのSQLServerのホスト名:1433 踏み台サーバのユーザ名@踏み台サーバIP/ホスト名 -p 22

と実行することで

・「localhost/127.0.0.1 port 11443」のアクセスは

・「AzureSQLDBのSQLServerの1433」に「SSHトンネル経由でアクセス」

されることになります。

で、SQL Operations Studio等からは以下のように設定し接続をします

スクリーンショット 2018-07-27 18.00.06.png

変わったところと言ったらServerの指定の部分で

User NameやDBのところはいつもどおりですね。

作業が終わったらpsで実行したsshをkillすることをお忘れなく・・

$ ps auxww|grep "ssh -f"

abc 12345 0.0 0.0 4287224 940 s009 S+ 6:29PM 0:00.00 grep ssh -f
abc 12346 0.0 0.0 4344356 668 ?? Ss 5:44PM 0:00.05 ssh -f -g -N -C -L 11433:xxxxxxxxxx.database.windows.net:1433 yyyyyyyy@xxx.xxx.xxx.xxx -p 22

$ kill -9 12346

$ ps auxww|grep "ssh -f"
abc 12345 0.0 0.0 4267768 896 s009 S+ 6:30PM 0:00.00 grep ssh -f

今回はAzureSQLDBで試しましたが、MySQLでもRedshiftでもHTTP通信でもなんでも応用出来ますし

いろいろ使いがいがありますのでPortfoward+Bastionってのを覚えておくといざというときに重宝します。