[Azure]使用 VNet 讓 Azure SQL Database 躲在防火牆後面

剛看到一個 VNet 的新功能,可以讓 Azure SQL Database 與 VM 在同一個 VNet ,剛好最近在一些狀況下會用到,就來測試一下有使用和沒有使用的差異。

今天早上看到 Azure 網站上有一篇新的文章 「VNet Service Endpoints for Azure SQL Database now generally available」,看起來目前在使用 Azure SQL Database 的時候,如果您是透過 VM 去存取的話,那麼可以做到更安全的防護了。

在以往來說,當我們在使用 Azure VM 去連接 Azure SQL Database 的時候,雖然可以設定開發只允許 Azure 的服務來存取,但這樣的狀況下,是所有在 Azure 上的服務都可以來存取,因此還是會有一點安全性的風險存在。而當目前這個可以讓 Azure SQL Database 加入到 VNet 的功能可以使用之後,那麼我們可以設定 Azure SQL Database 使用哪一個 VNet ,並且在 Azure SQL Database 的防火牆上面,將「Allow access to Azure services」給關閉,那麼這樣就會只剩下在同一個 VNet 環境下的可以存取,讓 Azure SQL Database 的安全性可以更加提升不少了。

在前面所提到的文章中,有附一個示意圖,從下圖中可以看出來,我們要先在 VNet 上面,去建立一個 Service EndPoint,就可以讓 VM 透過這樣的方式去連接到 Azure SQL Database ,也可以讓 Azure SQL Database 阻絕 Internet 的存取,也可以藉此保護其他非同一個 VNet 上其他 Azure 服物的存取了。clip_image002

因此當我們要做設定的話,首先我們在 Azure 上面的所要使用的 VNet 資源上面,選擇 「Service endpoints

進入後,應該會類似下圖,還沒有加入任何的服務端點,因此我們可以選擇上方的「Add」的選項

在新增畫面中,我們先選擇是加入的服務是 「Microsoft.Sql」,並且選擇我們 VM 目前所使用的 Subnet ,這樣等一下我們的 VM 才可以來存取這個 Azure SQL Database。雖然下方會有個提示說,建立這個 Service endpoint 可能需要十五分鐘才會生效,但我目前測試過程中,幾乎只要設定好就可以用了,因此如果您設定好之後還無法執行,或許可以先等待一下,等他內部設定完成,應該就可以執行了。

完成 VNet 的 Service endpoint 的設定之後,接著我們回到 Azure SQL Database 的 Server 上面 ( 注意是 Server 不是資料庫喔 ),選擇「Firewall / Virtual Networks

進入後拉到下方,選擇「Add existing virtual network

在設定畫面中,我們選擇剛剛所設定的 VNet ,按下 OK 後就可以完成相關設定了。


當完成這些設定之後,會有甚麼樣的改變嗎 ? 在這這我們用兩個 VM 來測試,在下面我們先用一個也都是在 Azure 上面的 VM,來存取我們的測試資料庫,從下面的圖片中可以看出來,我們連接資料庫是可以順利的連接,且是透過外部 IP 來存取 Azure SQL Database。

但是要是我們將「Allow access to Azure services」給關閉,那麼上述本來可以連線的,就會變成無法使用了。

這個時候我們建立一個 VM,並且位於同一個 VNet

從下圖中可以看出,在同一個 VNet 裡面的 VM,會透過 Private IP 的方式去連接 Azure SQL Database,即便我們現在設定是沒有允許 Azure 相關服務去存取,我們的 Azure VM 仍然是可以連接上去的。


希望透過上述的說明,大家可以了解新的 VNet 支援 Azure SQL Database 的相關設定與功用,如果對於需要更嚴謹控管 SQL Database 安全的人員,不妨試試看這樣的方式,但如果您是採用 Web App 的話,雖然 Web App 也有支援 VNet ,但變成需要設定 Point to Site VPN 才有辦法連接,設定上是會比較麻煩,但如果也要做到也應該是沒有問題的。