如何取得 Azure 服務 IP 範圍

  • 365
  • 0

在實務上偶而會有需要知道 Azure 上面的服務 IP ,比如說針對地端機器設定防火牆,或是服務和服務間串接,僅開放特定服務可以存取,這時候就會需要取得服務的 IP 範圍,這些 IP 範圍是公開的,微軟有提供不少方式可以取得,本文就整理了一些方式來取得服務的 IP 範圍。

前言

在實務上偶而會有需要知道 Azure 上面的服務 IP ,比如說針對地端機器設定防火牆,或是服務和服務間串接,僅開放特定服務可以存取,這時候就會需要取得服務的 IP 範圍,這些 IP 範圍是公開的,微軟有提供不少方式可以取得,本文就整理了一些方式來取得服務的 IP 範圍。

實做

實體連結

這是最簡單的一種方式,微軟有提供一個固定連結可以去下載 IP 範圍的 Json 格式檔案,底下點開 Details 也會說明檔案更新的日期,點選下載就會跳轉到下載頁面,在該頁面也可以取得一個實體檔案連結位置,可以發現檔名的部分和 Details 顯示一致,而更新的頻率也很高,像我在整理相關資料時候檔名是 ServiceTags_Public_20210726.json ,寫文章時候已經到了 ServiceTags_Public_20210802.json ,所以如果要自動化去下載檔案來更新的話,可能就比較不建議直接用這連結來使用,因為很有可能取得的不會是最新的資料。

https://download.microsoft.com/download/7/1/D/71D86715-5596-4529-9B13-DA13A5DE5B63/ServiceTags_Public_20210802.json

PowerShell

PowerShell 的話使用底下指令,指定區域就可以取得資料了,這邊輸入的區域參數並不影響到取得的資料範圍,只是參數就是得提供區域,結果還是會把所有資料中心的 IP 範圍提供回來。

Get-AzNetworkServiceTag -Location <String>

取回來的資料會在 Values 裡面,底下我用 Azure CloudShell 實際執行並下載檔案,直接連到 Azure CloudShell 或是點選右上角的 CloudShell 圖示都可以使用,輸入底下的 PowerShell 會把取得的資料存到 servicetag.json 這一個檔案裡面。

點選工具選項並選擇下載,輸入下載的檔名就會在瀏覽器下載到剛剛取得的資料了。

Rest API

再來就是直接打 Rest API,主要參數有 subscriptionIdlocation,這邊 location 一樣不影響取得的資料結果。

GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Network/locations/{location}/serviceTags?api-version=2021-02-01

Fluent SDK

另外也提供微軟的 Fluent SDK 取得的方式,畢竟是用 .NET 開發,直接用微軟包好的 SDK 最方便使用了,底下為取得的語法,因為本來就是包好 Rest API ,所以參數也一樣,因為是用 LinqPad 執行範例,所以直接用 Dump() 方法呈現資料,結果如下圖。至於更多 Fluent SDK 相關資訊可以參考前面的文章,就不重複說明了。

string subscriptionID = "{subscriptionId}";
IAzure managementAPI = Azure.Authenticate(client, tenantID).WithSubscription(subscriptionID);
managementAPI.Networks.Manager.Inner.ServiceTags.ListWithHttpMessagesAsync("eastasia").Result.Body.Values.Dump();

備註

前面說明的幾種方式,取得的檔案或是回傳格式都是一樣的,詳細欄位和說明可以參考微軟官方文件

結論

大概整理了幾種方式來取得 Azure 服務 IP 範圍,大致上傳回結果跟參數都一樣,也都會有一個區域的參數,但是並不影響到回傳的結果,回傳的資料會包含所有的資料中心以及服務的 IP 範圍,這邊就不知道為什麼微軟這樣設計了,或是實際上有什麼影響是我沒發現的,如果大家有發現的話,歡迎提出來討論。

參考資料