設定輸入和輸出網路流量
Azure Machine Learning 需要存取公用網際網路上的伺服器和服務。 實作網路隔離時,您必須了解需要哪些存取權,以及如何啟用。
注意
本文中的資訊適用於設定為使用 Azure 虛擬網路的 Azure Machine Learning 工作區。 使用受控虛擬網路時,會自動套用工作區的必要輸入和輸出設定。 如需詳細資訊,請參閱 Azure Machine Learning 受控虛擬網路。
一般詞彙和資訊
本文中會使用下列詞彙和資訊:
Azure 服務標籤:服務標籤是指定 Azure 服務所使用 IP 範圍的簡單方式。 例如,
AzureMachineLearning
標籤代表 Azure Machine Learning 服務所使用的 IP 位址。重要
只有某些 Azure 服務支援 Azure 服務標籤。 如需網路安全性群組和 Azure 防火牆支援的服務標籤清單,請參閱虛擬網路服務標籤一文。
如果您使用非 Azure 解決方案,例如第三方防火牆,請下載 Azure IP 範圍和服務標籤清單。 擷取檔案並搜尋檔案內的服務標籤。 IP 位址可能定期變更。
區域:某些服務標籤可讓您指定 Azure 區域。 這可限制存取特定區域中的服務 IP 位址,通常是您的服務所在的區域。 在本文中,當您看到
<region>
時,請改用您的 Azure 區域。 例如,如果您的 Azure Machine Learning 工作區位於美國西部區域,則BatchNodeManagement.<region>
是BatchNodeManagement.uswest
。Azure Batch:Azure Machine Learning 計算叢集和計算執行個體依賴後端 Azure Batch 執行個體。 此後端服務裝載於 Microsoft 訂用帳戶中。
連接埠:本文會使用下列連接埠。 如果連接埠範圍未列在此資料表中,則表示為服務專屬,可能沒有已發佈的用途資訊:
Port 描述 80 不安全的網路流量 (HTTP) 443 安全的網路流量 (HTTPS) 445 SMB 流量,用來存取 Azure 檔案儲存體中的檔案共用 8787 在計算執行個體上連線至 RStudio 時使用 18881 用來連線到語言伺服器,以在計算執行個體上啟用筆記本的 IntelliSense。 通訊協定:除非另有說明,否則本文所述的所有網路流量都會使用 TCP。
基本設定
此設定假設:
- 您使用您提供的容器登錄所提供的 Docker 映像,且不會使用 Microsoft 提供的映像。
- 您使用的是私人 Python 套件存放庫,而且不會存取公用套件存放庫,例如
pypi.org
、*.anaconda.com
或*.anaconda.org
。 - 私人端點可以直接在 VNet 內彼此通訊。 例如,所有服務在相同的 VNet 中都有私人端點:
- Azure Machine Learning 工作區
- Azure 儲存體帳戶 (Blob、檔案、資料表、佇列)
輸入流量
來源 | 來源 連接埠 |
Destination | 目的地連接埠 | 目的 |
---|---|---|---|---|
AzureMachineLearning |
任意 | VirtualNetwork |
44224 | 輸入至計算執行個體/叢集。 只有在執行個體/叢集設定為使用公用 IP 位址時才需要。 |
提示
預設會為此流量建立網路安全性群組 (NSG)。 如需詳細資訊,請參閱預設安全性規則。
輸出流量
服務標籤 | 連接埠 | 目的 |
---|---|---|
AzureActiveDirectory |
80、443 | 使用 Microsoft Entra ID 進行驗證。 |
AzureMachineLearning |
443、8787、18881 UDP: 5831 |
使用 Azure Machine Learning 服務。 |
BatchNodeManagement.<region> |
443 | 通訊 Azure Batch。 |
AzureResourceManager |
443 | 使用 Azure Machine Learning 建立 Azure 資源。 |
Storage.<region> |
443 | 存取儲存在計算叢集和計算實例 Azure 儲存體帳戶中的資料。 此輸出可用來外流資料。 如需詳細資訊,請參閱 Data 外流保護。 |
AzureFrontDoor.FrontEnd * 在由 21Vianet 營運的 Microsoft Azure 中不需要。 |
443 | Azure Machine Learning 工作室全域進入點。 儲存 AutoML 的映像和環境。 |
MicrosoftContainerRegistry |
443 | 存取 Microsoft 提供的 Docker 映像。 |
Frontdoor.FirstParty |
443 | 存取 Microsoft 提供的 Docker 映像。 |
AzureMonitor |
443 | 用來將監視和計量記錄至 Azure 監視器。 只有在您尚未針對工作區保護 Azure 監視器時,才需要此項目。 * 此輸出也可用來記錄支援事件的資訊。 |
VirtualNetwork |
443 | 當虛擬網路或對等的虛擬網路中存在私人端點時,則為必要項目。 |
重要
如果計算執行個體或計算叢集設定為沒有公用 IP,則預設無法存取網際網路。 如果仍然可以將輸出流量傳送至網際網路,這是因為 Azure 預設輸出存取,而且您有一個允許輸出到網際網路的 NSG。 我們不建議使用預設輸出存取。 如果您需要網際網路的輸出存取,建議您使用下列其中一個選項,而不是預設輸出存取:
- 具有公用 IP 的 Azure 虛擬網路 NAT:如需使用虛擬網路 NAT 的詳細資訊,請參閱虛擬網路 NAT 文件。
- 使用者定義的路由和防火牆:在包含計算的子網路中建立使用者定義的路由。 路由的下一個躍點應該參考防火牆的私人 IP 位址,位址前置詞為 0.0.0.0/0。
如需詳細資訊,請參閱 Azure 中的預設輸出存取一文。
定型和部署模型的建議設定
輸出流量
服務標籤 | 連接埠 | 目的 |
---|---|---|
MicrosoftContainerRegistry 和 AzureFrontDoor.FirstParty |
443 | 允許使用 Microsoft 提供的 Docker 映像進行定型和推斷。 同時設定 Azure Kubernetes Service 的 Azure Machine Learning 路由器。 |
若要允許安裝 Python 套件以進行定型和部署,請允許流量輸出至下列主機名稱:
注意
這不是網際網路上所有 Python 資源所需的完整主機清單,只是最常使用的主機。 例如,如果您需要存取 GitHub 存放庫或其他主機,則必須識別並新增該情節所需的主機。
主機名稱 | 用途 |
---|---|
anaconda.com *.anaconda.com |
用來安裝預設封裝。 |
*.anaconda.org |
用來取得存放庫資料。 |
pypi.org |
用來列出來自預設索引的相依性 (如果有的話),而且使用者設定不會覆寫索引。 如果覆寫索引,您也必須允許 *.pythonhosted.org 。 |
pytorch.org *.pytorch.org |
由基於 PyTorch 的一些範例使用。 |
*.tensorflow.org |
由基於 Tensorflow 的一些範例使用。 |
案例:在計算執行個體上安裝 RStudio
若要允許在計算執行個體上安裝 RStudio,防火牆必須允許向外存取用來提取 Docker 映像的網站。 將下列應用程式規則新增至您的 Azure 防火牆原則:
- 名稱:AllowRStudioInstall
- 來源類型:IP 位址
- 來源 IP 位址:您要在其中建立計算執行個體的子網路 IP 位址範圍。 例如:
172.16.0.0/24
。 - 目的地類型:FQDN
- 目標 FQDN:
ghcr.io
、pkg-containers.githubusercontent.com
- 通訊協定:
Https:443
若要允許安裝 R 套件,請允許流量輸出至 cloud.r-project.org
。 此主機用於安裝 CRAN 套件。
注意
如果您需要存取 GitHub 存放庫或其他主機,則必須識別並新增該情節所需的主機。
案例:搭配公用 IP 使用計算叢集或計算執行個體
重要
沒有公用 IP 的計算執行個體或計算叢集不需要來自 Azure Batch 管理和 Azure Machine Learning 服務的輸入流量。 不過,如果您有多個計算,而其中有些計算使用公用 IP 位址,則必須允許此流量。
使用 Azure Machine Learning 計算執行個體或計算叢集 (具有公用 IP 位址) 時,請允許來自 Azure Machine Learning 服務的輸入流量。 沒有公用 IP 的計算執行個體或計算叢集 (預覽) 不需要此輸入通訊。 系統會為您動態建立允許此流量的網路安全性群組,不過,如果您有防火牆,則可能也需要建立使用者定義的路由 (UDR)。 建立此流量的 UDR 時,您可以使用 IP 位址或服務標籤來路由流量。
針對 Azure Machine Learning 服務,您必須為主要和次要區域都新增 IP 位址。 若要尋找次要區域,請參閱 Azure 中的跨區域複寫。 例如,如果 Azure Machine Learning 服務在美國東部 2,而次要地區是美國中部。
若要取得 Azure Machine Learning 服務的 IP 位址清單,請下載 Azure IP 範圍和服務標籤,並在檔案中搜尋 AzureMachineLearning.<region>
,其中 <region>
是您的 Azure 區域。
重要
IP 位址可能隨著時間而變更。
建立 UDR 時,請將 [下一個躍點類型] 設定為 [網際網路]。 這表示來自 Azure 的輸入通訊會跳過防火牆,使用計算執行個體和計算叢集的公用 IP 來存取負載平衡器。 由於計算執行個體和計算叢集會在建立時取得隨機的公用 IP,且建立前也無法先得知公用 IP 並登錄於防火牆,因此必須使用 UDR,讓計算執行個體和計算叢集的 Azure 輸入使用特定 IP。 下圖顯示 Azure 入口網站中以 IP 位址為基礎的 UDR 範例:
如需設定 UDR 的相關資訊,請參閱使用路由表來路由傳送網路流量。
案例:Azure Machine Learning 與 Azure 儲存體端點之間的防火牆
您也必須允許在連接埠 445 上對 Storage.<region>
的輸出存取。
案例:已啟用 hbi_workspace
旗標建立的工作區
您也必須允許對 Keyvault.<region>
的輸出存取。 此輸出流量可用來存取後端 Azure Batch 服務的金鑰保存庫執行個體。
如需 hbi_workspace
旗標的詳細資訊,請參閱資料加密一文。
案例:使用 Kubernetes 計算
在輸出 Proxy 伺服器或防火牆後方執行的 Kubernetes 叢集需要額外的輸出網路設定。
- 針對具有 Azure Arc 連線的 Kubernetes,請設定 Azure Arc 代理程式所需的 Azure Arc 網路需求。
- 針對沒有 Azure Arc 連線的 AKS 叢集,請設定 AKS 延伸模組網路需求。
除了上述需求,Azure Machine Learning 也需要下列輸出 URL。
輸出端點 | Port | 描述 | 訓練 | 推斷 |
---|---|---|---|---|
*.kusto.windows.net *.table.core.windows.net *.queue.core.windows.net |
443 | 將系統記錄上傳至 Kusto 時所需。 | ✓ | ✓ |
<your ACR name>.azurecr.io <your ACR name>.<region>.data.azurecr.io |
443 | Azure 容器登錄,提取用於機器學習工作負載的 Docker 映像時所需。 | ✓ | ✓ |
<your storage account name>.blob.core.windows.net |
443 | Azure Blob 儲存體,擷取機器學習專案指令碼、資料或模型及上傳作業記錄/輸出時所需。 | ✓ | ✓ |
<your workspace ID>.workspace.<region>.api.azureml.ms <region>.experiments.azureml.net <region>.api.azureml.ms |
443 | Azure Machine Learning 服務 API。 | ✓ | ✓ |
pypi.org |
443 | Python 封裝索引,用於安裝訓練工作環境初始化所用的 pip 封裝。 | ✓ | N/A |
archive.ubuntu.com security.ubuntu.com ppa.launchpad.net |
80 | 下載必要安全性修補程式時所需。 | ✓ | N/A |
注意
- 使用您的工作區識別碼來取代
<your workspace workspace ID>
。 您可以在 Azure 入口網站 - Machine Learning 資源頁面 - 屬性 - 工作區識別碼中找到識別碼。 - 使用儲存體帳戶名稱取代
<your storage account>
。 - 將
<your ACR name>
取代為工作區的 Azure Container Registry 名稱。 - 將
<region>
取代為您工作區的區域。
叢集內通訊需求
若要在 Kubernetes 計算上安裝 Azure Machine Learning 延伸模組,所有 Azure Machine Learning 相關元件都會部署在 azureml
命名空間中。 需要下列叢集內通訊,以確保 ML 工作負載在 AKS 叢集中運作良好。
azureml
命名空間中的元件應該能夠與 Kubernetes API 伺服器通訊。azureml
命名空間中的元件應該能夠彼此通訊。azureml
命名空間中的元件應該能夠和kube-system
命名空間中的kube-dns
和konnectivity-agent
通訊。- 如果叢集用於即時推斷,
azureml-fe-xxx
POD 應該能夠在其他命名空間的 5001 連接埠上與已部署的模型 POD 通訊。azureml-fe-xxx
POD 應該開啟 11001、12001、12101、12201、20000、8000、8001、9001 連接埠以進行內部通訊。 - 如果叢集用於即時推斷,已部署模型 POD 應該能夠和 9999 連接埠上的
amlarc-identity-proxy-xxx
POD 通訊。
案例:Visual Studio Code
Visual Studio Code 依賴特定主機和連接埠來建立遠端連線。
主機
本節中的主機用來安裝 Visual Studio Code 封裝,以在 Visual Studio Code 和 Azure Machine Learning 工作區的計算執行個體之間建立遠端連線。
注意
這不是網際網路上所有 Visual Studio Code 資源所需的完整主機清單,只是最常使用的主機。 例如,如果您需要存取 GitHub 存放庫或其他主機,則必須識別並新增該情節所需的主機。 如需主機名稱的完整清單,請參閱 Visual Studio Code 中的網路連線。
主機名稱 | 用途 |
---|---|
*.vscode.dev *.vscode-unpkg.net *.vscode-cdn.net *.vscodeexperiments.azureedge.net default.exp-tas.com |
存取 vscode.dev (Web 版 Visual Studio Code) 時所需。 |
code.visualstudio.com |
下載及安裝 VS Code 桌面版時所需。 VS Code Web 不需要此主機。 |
update.code.visualstudio.com *.vo.msecnd.net |
用來擷取透過安裝指令碼安裝在運算執行個體上的 VS Code 伺服器位元。 |
marketplace.visualstudio.com vscode.blob.core.windows.net *.gallerycdn.vsassets.io |
下載及安裝 VS Code 延伸模組時所需。 這些主機會使用適用於 VS Code 的 Azure Machine Learning 延伸項目,對運算執行個體啟用遠端連線。 如需詳細資訊,請參閱在 Visual Studio Code 中連線至 Azure Machine Learning 運算執行個體 |
https://github.com/microsoft/vscode-tools-for-ai/tree/master/azureml_remote_websocket_server/* |
用來擷取安裝在運算執行個體上的 websocket 伺服器位元。 Websocket 伺服器用來將 Visual Studio Code 用戶端 (桌面應用程式) 的要求,傳輸至運算執行個體上執行的 Visual Studio Code 伺服器。 |
vscode.download.prss.microsoft.com |
用於下載 Visual Studio Code 下載 CDN |
連接埠
您必須允許連接埠 8704 到 8710 的網路流量。 VS Code 伺服器會動態選取此範圍內的第一個可用連接埠。
案例:沒有服務標籤的第三方防火牆或 Azure 防火牆
本節為通用指導,因為每個防火牆有自己的術語和特定設定。 如有任何問題,請參閱您所用防火牆的相關文件。
提示
如果您使用 Azure 防火牆,而且想要使用本節所列的 FQDN,而不是使用服務標籤,請使用下列指導:
- 使用 HTTP/S 連接埠 (80 和 443) 的 FQDN 應設定為應用程式規則。
- 使用其他連接埠的 FQDN 應設定為網路規則。
如需詳細資訊,請參閱應用程式規則與網路規則之間的差異。
未正確設定防火牆可能導致使用工作區時發生問題。 Azure Machine Learning 工作區使用各種主機名稱。 下列各節列出 Azure Machine Learning 所需的主機。
相依性 API
您也可以使用 Azure Machine Learning REST API 來取得必須允許輸出流量的主機和連接埠清單。 若要使用此 API,請使用下列步驟:
取得驗證權杖。 下列命令示範如何使用 Azure CLI 來取得驗證權杖和訂用帳戶識別碼:
TOKEN=$(az account get-access-token --query accessToken -o tsv) SUBSCRIPTION=$(az account show --query id -o tsv)
呼叫 API。 在下列命令中,取代下列值:
- 將
<region>
換成您的工作區所在的 Azure 區域。 例如:westus2
。 - 將
<resource-group>
換成您的工作區所在的資源群組。 - 將
<workspace-name>
換成您的工作區名稱。
az rest --method GET \ --url "https://<region>.api.azureml.ms/rp/workspaces/subscriptions/$SUBSCRIPTION/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/outboundNetworkDependenciesEndpoints?api-version=2018-03-01-preview" \ --header Authorization="Bearer $TOKEN"
- 將
API 呼叫的結果是 JSON 文件。 下列程式碼片段是此文件的摘錄:
{
"value": [
{
"properties": {
"category": "Azure Active Directory",
"endpoints": [
{
"domainName": "login.microsoftonline.com",
"endpointDetails": [
{
"port": 80
},
{
"port": 443
}
]
}
]
}
},
{
"properties": {
"category": "Azure portal",
"endpoints": [
{
"domainName": "management.azure.com",
"endpointDetails": [
{
"port": 443
}
]
}
]
}
},
...
Microsoft 主機
下列表格中的主機由 Microsoft 擁有,提供工作區正常運作所需的服務。 表格列出 Azure 公用、Azure Government 和由 21Vianet 營運的 Microsoft Azure 區域的主機。
重要
Azure Machine Learning 使用您的訂用帳戶中和 Microsoft 受控訂用帳戶中的 Azure 儲存體帳戶。 本節視情況使用下列說法來區別兩者:
- 您的儲存體:您的訂用帳戶中的 Azure 儲存體帳戶,用於儲存您的資料和成品,例如模型、定型資料、定型記錄和 Python 指令碼。>
- Microsoft 儲存體:Azure Machine Learning 計算執行個體和計算叢集依賴 Azure Batch,而且必須存取位於 Microsoft 訂用帳戶中的儲存體。 此儲存體僅用於管理計算執行個體。 您的所有資料都不會儲存在這裡。
一般 Azure 主機
必要項目 | 主控件 | 通訊協定 | 連接埠 |
---|---|---|---|
Microsoft Entra ID | login.microsoftonline.com |
TCP | 80、443 |
Azure 入口網站 | management.azure.com |
TCP | 443 |
Azure Resource Manager | management.azure.com |
TCP | 443 |
Azure Machine Learning 主機
重要
在下表中,請將 <storage>
換成您的 Azure Machine Learning 工作區的預設儲存體帳戶名稱。 將 <region>
取代為您工作區的區域。
必要項目 | 主控件 | 通訊協定 | 連接埠 |
---|---|---|---|
Azure Machine Learning Studio | ml.azure.com |
TCP | 443 |
API | *.azureml.ms |
TCP | 443 |
API | *.azureml.net |
TCP | 443 |
模型管理 | *.modelmanagement.azureml.net |
TCP | 443 |
整合式筆記本 | *.notebooks.azure.net |
TCP | 443 |
整合式筆記本 | <storage>.file.core.windows.net |
TCP | 443、445 |
整合式筆記本 | <storage>.dfs.core.windows.net |
TCP | 443 |
整合式筆記本 | <storage>.blob.core.windows.net |
TCP | 443 |
整合式筆記本 | graph.microsoft.com |
TCP | 443 |
整合式筆記本 | *.aznbcontent.net |
TCP | 443 |
AutoML NLP,視覺 | automlresources-prod.azureedge.net |
TCP | 443 |
AutoML NLP,視覺 | aka.ms |
TCP | 443 |
注意
目前只有 Azure 公用區域支援 AutoML NLP,視覺。
Azure Machine Learning 計算執行個體和計算叢集主機
提示
- 只在以啟用 hbi_workspace 旗標建立工作區時,才需要 Azure Key Vault 的主機。
- 只有當 Azure Machine 工作區有私人端點時,才需要計算執行個體的連接埠 8787 和 18881。
- 在下表中,請將
<storage>
換成您的 Azure Machine Learning 工作區的預設儲存體帳戶名稱。 - 在下表中,請將
<region>
取代為包含 Azure Machine Learning 工作區的 Azure 區域。 - 必須允許計算執行個體的 WebSocket 通訊。 若封鎖 WebSocket 流量,Jupyter Notebook 將無法正常運作。
必要項目 | 主控件 | 通訊協定 | 連接埠 |
---|---|---|---|
計算叢集/執行個體 | graph.windows.net |
TCP | 443 |
計算執行個體 | *.instances.azureml.net |
TCP | 443 |
計算執行個體 | *.instances.azureml.ms |
TCP | 443、8787、18881 |
計算執行個體 | <region>.tundra.azureml.ms |
UDP | 5831 |
計算執行個體 | *.<region>.batch.azure.com |
ANY | 443 |
計算執行個體 | *.<region>.service.batch.azure.com |
ANY | 443 |
Microsoft 儲存體存取 | *.blob.core.windows.net |
TCP | 443 |
Microsoft 儲存體存取 | *.table.core.windows.net |
TCP | 443 |
Microsoft 儲存體存取 | *.queue.core.windows.net |
TCP | 443 |
您的儲存體帳戶 | <storage>.file.core.windows.net |
TCP | 443、445 |
您的儲存體帳戶 | <storage>.blob.core.windows.net |
TCP | 443 |
Azure Key Vault | *.vault.azure.net | TCP | 443 |
由 Azure Machine Learning 維護的 Docker 映像
必要項目 | 主控件 | 通訊協定 | 連接埠 |
---|---|---|---|
Microsoft Container Registry | mcr.microsoft.com *.data.mcr.microsoft.com |
TCP | 443 |
提示
- 任何自訂 Docker 映像都需要 Azure Container Registry。 這包括 Microsoft 所提供基礎映像的小幅修改 (例如其他封裝)。 Azure Machine Learning 的內部定型作業提交程序也需要。 此外,不論案例為何, Microsoft Container Registry 一律是必要項目。
- 如果您打算使用同盟身分識別,請遵循保護 Active Directory 同盟服務的最佳做法一文。
此外,請使用使用公用 IP 進行計算一節的資訊來新增 BatchNodeManagement
和 AzureMachineLearning
的 IP 位址。
如需針對部署至 AKS 的模型限制存取的相關資訊,請參閱在 Azure Kubernetes Service 中限制輸出流量。
監視、計量和診斷
如果您尚未針對工作區保護 Azure 監視器,您必須允許輸出流量至下列主機:
如果您尚未針對工作區保護 Azure 監視器,您必須允許輸出流量至下列主機:
注意
Microsoft 支援服務也會使用記錄到這些主機的資訊,以診斷您在工作區遇到的任何問題。
dc.applicationinsights.azure.com
dc.applicationinsights.microsoft.com
dc.services.visualstudio.com
*.in.applicationinsights.azure.com
如需這些主機的 IP 位址清單,請參閱 Azure 監視器使用的 IP 位址。
下一步
本文是關於保護 Azure Machine Learning 工作流程系列文章的一部分。 請參閱本系列的其他文章:
如需有關設定 Azure 防火牆的詳細資訊,請參閱教學課程:使用 Azure 入口網站部署和設定 Azure 防火牆。