Linux
SSH
Azure
portforward
AzureSQLDatabase

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

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ってのを覚えておくといざというときに重宝します。