在實務上偶而會有需要知道 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,主要參數有 subscriptionId
和 location
,這邊 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 範圍,這邊就不知道為什麼微軟這樣設計了,或是實際上有什麼影響是我沒發現的,如果大家有發現的話,歡迎提出來討論。