適用於:開發人員 |獎賞
Azure APIM 可以部署 (插入) 於 Azure 虛擬網路 (VNet) 內部,以存取網路中的後端服務。 如需 VNet 連線選項、需求和考量,請參閱:
本文說明如何以「內部」模式設定 API 管理執行個體的 VNet 連線。 在此模式中,您只能存取下列 API 管理端點,而這些端點位於您控制其存取權的 VNet 內。
- API 閘道
- 開發人員入口網站
- 直接管理
- Git(分散式版本控制系統)
以內部模式使用 APIM,以:
- 使用 Azure VPN 連線或 Azure ExpressRoute,讓裝載於私人資料中心的 API 可供外部第三方安全地存取。
- 透過通用閘道器公開雲端式 API 和內部部署 API,以實現混合式雲端情節。
- 使用單一閘道器端點來管理多個地理位置中所裝載的 API。
如需 外部 模式的特定設定,其中可從公用因特網存取 API 管理端點,而後端服務位於網路中,請參閱 將 Azure API 管理實例部署到虛擬網路 - 外部模式。
注意
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱 安裝 Azure PowerShell。 若要瞭解如何移轉至 Az PowerShell 模組,請參閱 將 Azure PowerShell 從 AzureRM 遷移至 Az。
重要
API 管理服務基礎結構的變更(例如設定自定義網域、新增 CA 憑證、調整、虛擬網路設定、可用性區域變更和區域新增專案)可能需要 15 分鐘或更長的時間才能完成,視服務層級和部署大小而定。 預期具有較大縮放單位或多重區域配置的實例需要較長的時間。 系統會仔細執行 API 管理的輪流變更,以保留容量和可用性。
當服務正在更新時,無法進行其他服務基礎結構變更。 不過,您可以設定 API、產品、原則和用戶設定。 服務 不會 經歷閘道停機,API 管理 會繼續 服務 API 要求,而不會中斷(開發人員層除外)。
必要條件
開始之前,請先檢閱 API 管理插入虛擬網路的網路資源需求 。
- API 管理執行個體。 如需詳細資訊,請參閱 建立 Azure API 管理實例。
位於與您的 API 管理實例相同區域和訂用帳戶中的 虛擬網路和子網。
- 用來連線到 APIM 執行個體的子網路可能包含其他 Azure 資源類型。
- 子網路不應該啟用任何委派。 子網路的 [為服務委派子網路] 設定應設為 [無]。
連結至上述子網的網路安全組。 需要有網路安全性群組 (NSG),才能明確地允許輸入連線,因為 APIM 內部使用的負載平衡器預設是安全的,並拒絕所有輸入流量。 如需特定設定,請參閱本文稍後的 設定NSG規則。
在特定案例中,為子網中依賴的服務(例如 Azure 儲存體或 Azure SQL)啟用服務端點。 如需詳細資訊,請參閱本文稍後的 透過 ExpressRoute 或網路虛擬設備將通道流量強制導向至內部部署防火牆。
(選擇性) 標準 SKU 公用 IPv4 位址。
重要
- 從 2024 年 5 月開始,在內部模式的 VNet 中部署 (插入) APIM 執行個體或將內部 VNet 設定移轉到新的子網路時,「不再需要」公用 IP 位址資源。 在外部 VNet 模式中,指定公用 IP 位址是「選擇性」的;如果您未提供,則會自動設定受 Azure 管理的公用 IP 位址並將其用於執行階段 API 流量。 只有在您想要擁有並控制用於網際網路輸入或輸出通訊的公用 IP 位址時,才會提供公用 IP 位址。
若已提供,IP 位址必須位於與 APIM 執行個體及虛擬網路相同的區域與訂閱中。
建立公用 IP 位址資源時,請確定您指派其 [DNS 名稱標籤]。 一般而言,您應該使用與 APIM 執行個體相同的 DNS 名稱。 如果您變更它,請重新部署執行個體,以便套用新的 DNS 標籤。
為了獲得最佳網路效能,建議使用預設 路由喜好設定: Microsoft網路。
在計劃為 API 管理實例啟用 區域備援 的區域中建立公用 IP 位址時,請設定 區域備 援設定。
會將 IP 位址的值指派為該區域中 API 管理執行個體的虛擬公用 IPv4 位址。
針對多區域 APIM 部署,請個別為每個位置設定虛擬網路資源。
啟用 VNet 連線
使用 Azure 入口網站啟用 VNet 連線
- 移至 Azure 入口網站 以尋找您的 API 管理實例。 搜尋並選取 [API 管理服務]。
- 選擇您的 API 管理執行個體。
- 選取 [網路] > [虛擬網路]。
- 選取 [內部] 存取類型。
- 在您 API 管理平台部署的地點(區域)清單中:
- 選擇 [位置] 。
- 選取 [虛擬網络 ] 和 [ 子網]。
- VNet 清單會填入 Azure 訂閱中可用的 Resource Manager VNet,而這些訂閱設定於您所設定的區域中。
- 選擇 套用。 您的 API 管理執行個體的 [虛擬網路] 頁面會更新為新的 VNet 和子網路選項。
- 繼續為 API 管理執行個體的其餘位置設定 VNet 設定。
- 在上方導覽列中選取 [儲存]。
成功部署之後,您應該會在 [概觀] 刀鋒視窗上看到 API 管理服務的「私人」虛擬 IP 位址和「公用」虛擬 IP 位址。 如需IP位址的詳細資訊,請參閱本文中的 路由 。
在 Azure 入口網站中的公用和私人 IP 位址
注意
因為未在公用 DNS 上註冊閘道 URL,所以 Azure 入口網站上可用的測試主控台將不適用於「內部」VNet 部署服務。 請改為使用「開發人員入口網站」上所提供的測試主控台。
使用 Resource Manager 樣本啟用連線能力
Azure Resource Manager 範本 (API 版本 2021-08-01 )
設定 NSG 規則
在 API 管理子網路中設定自訂網路規則,以篩選進出 API 管理執行個體的流量。 建議使用下列「最低」NSG 規則,以確保您的執行個體能夠正常運作及存取。 請仔細檢閱您的環境,以判斷更多可能需要的規則。
重要
根據您對快取和其他功能的使用,您可能需要設定下列表格中最低規則以外的其他 NSG 規則。 如需詳細設定,請參閱 虛擬網路組態參考。
- 在大部分情況下,請使用指定的 服務標籤 ,而不是服務IP位址來指定網路來源和目的地。
- 將這些規則的優先順序設定為高於預設規則的優先順序。
方向 | 來源服務標籤 | 來源連接埠範圍 | 目的地服務標籤 | 目的地連接埠範圍 | 通訊協定 | 動作 | 目的 | VNet 類型 |
---|---|---|---|---|---|---|---|---|
連入 | 網際網路 | * | VirtualNetwork | [80], 443 | TCP | 允許 | 與 API 管理的用戶端通訊 | 僅外部 |
連入 | ApiManagement | * | VirtualNetwork | 3443 | TCP | 允許 | Azure 入口網站和 PowerShell 的管理端點 | 外部和內部 |
連入 | Azure負載平衡器 (AzureLoadBalancer) | * | VirtualNetwork | 6390 | TCP | 允許 | Azure 基礎結構負載平衡器 | 外部和內部 |
連入 | AzureTrafficManager | * | VirtualNetwork | 443 | TCP | 允許 | 適用於多區域部署的 Azure 流量管理員路由 | 僅外部 |
輸出 | VirtualNetwork | * | 儲存體 | 443 | TCP | 允許 | 核心服務功能的 Azure 儲存體相依性 | 外部和內部 |
輸出 | VirtualNetwork | * | SQL | 1433 | TCP | 允許 | 存取 Azure SQL 端點以取得核心服務功能 | 外部和內部 |
輸出 | VirtualNetwork | * | AzureKeyVault | 443 | TCP | 允許 | 存取 Azure Key Vault 以取得核心服務功能 | 外部和內部 |
輸出 | VirtualNetwork | * | AzureMonitor | 1886, 443 | TCP | 允許 | 發佈 診斷記錄和計量、 資源健康情況和 Application Insights | 外部和內部 |
DNS 組態
在內部 VNet 模式中,您必須管理自己的 DNS,以啟用對 API 管理端點的輸入存取。
我們建議:
- 設定 Azure DNS 私人區域。
- 將 Azure DNS 私人區域連結至您已部署 API 管理服務的 VNet。
瞭解如何 在 Azure DNS 中設定私人區域。
注意
API 管理服務不會接聽其 IP 位址上的要求。 其只會回應對其端點上所設定主機名稱的要求。 這些端點包括:
- API 閘道
- Azure 入口網站
- 開發人員入口網站
- 直接管理端點
- Git(分散式版本控制系統)
在預設主機名稱上存取
當您建立 API 管理服務 (例如,contosointernalvnet
) 時,預設會設定下列端點:
端點 | 端點設定 |
---|---|
API 閘道 | contosointernalvnet.azure-api.net |
開發人員入口網站 | contosointernalvnet.portal.azure-api.net |
新的開發人員入口網站 | contosointernalvnet.developer.azure-api.net |
直接管理端點 | contosointernalvnet.management.azure-api.net |
Git(分散式版本控制系統) | contosointernalvnet.scm.azure-api.net |
在自訂網域名稱上存取
如果您不想使用預設主機名存取 API 管理服務,請為所有端點設定 自訂網域名稱,如下圖所示:
設定 DNS 記錄
在 DNS 伺服器中建立記錄,以存取可從 VNet 存取的端點。 將端點記錄對應至您服務 的私人虛擬IP位址 。
基於測試目的,您可以在連線至 VNet 之子網路的虛擬機器上更新 hosts 檔案,而此 VNet 中已部署 APIM。 假設服務的私人虛擬 IP 位址是 10.1.0.5,您可以將主機檔案設定如下。 hosts 對應檔案位於 %SystemDrive%\drivers\etc\hosts
(Windows) 或 /etc/hosts
(Linux、macOS)。
內部虛擬 IP 網路 | 端點設定 |
---|---|
10.1.0.5 | contosointernalvnet.azure-api.net |
10.1.0.5 | contosointernalvnet.portal.azure-api.net |
10.1.0.5 | contosointernalvnet.developer.azure-api.net |
10.1.0.5 | contosointernalvnet.management.azure-api.net |
10.1.0.5 | contosointernalvnet.scm.azure-api.net |
然後,您可以從您已建立的虛擬機器存取所有 API 管理端點。
路由
下列虛擬 IP 位址是針對內部虛擬網路中的 API 管理執行個體所設定。
虛擬 IP 位址 | 描述 |
---|---|
私人虛擬IP位址 | API 管理執行個體子網路範圍 (DIP) 內負載平衡的 IP 位址,您可以透過此位址來存取 API 閘道、開發人員入口網站、管理和 Git 端點。 向 VNet 所使用的 DNS 伺服器註冊此位址。 |
公用虛擬IP位址 | 「僅」用於透過連接埠 3443 到管理端點的控制平面流量。 可以鎖定至 ApiManagement 服務標籤。 |
您可以在 Azure 入口網站的 [概觀] 刀鋒視窗上找到負載平衡的公用和私人 IP 位址。
如需詳細資訊和考慮,請參閱 Azure API 管理的 IP 位址。
VIP 與 DIP 位址
動態 IP (DIP) 位址將會指派給服務中的每個基礎虛擬機器,並用於存取 VNet 與對等互連 VNet 中的端點與資源。 將使用 API 管理服務的公用虛擬 IP (VIP) 位址來存取公開資源。
若 IP 限制列出 VNet 或對等互連 VNet 中的安全資源,則建議指定部署 API 管理服務的整個子網路範圍,以授與或限制服務的存取權。
深入了解 建議的子網大小。
範例
如果您在內部 VNet 的進階層中部署 1 個 API 管理的 容量單位 ,則會使用 3 個 IP 位址:1 用於私人 VIP,1 個用於兩個 VM 的 DIP。 如果您擴增為 4 個單位,則子網路中的其他 DIP 將會取用更多 IP。
如果目的地端點只允許列出一組固定的 DIP,則在您未來新增單位時,將會導致連線失敗。 基於此原因,而且因為子網路整個受您控制,所以建議允許在後端列出整個子網路。
使用 ExpressRoute 或網路虛擬設備,以強制打開通道將流量傳送至內部部署防火牆
強制通道可讓您將子網路的所有網際網路繫結流量重新導向或「強制」回到內部部署,以進行檢查與稽核。 您通常會設定及定義自己的預設路由 (0.0.0.0/0
),以強制來自 API 管理子網路的所有流量流經內部部署防火牆,或流向網路虛擬設備。 此流量流程會中斷與 API 管理的連線,因為輸出流量於內部部署遭到阻擋,或經過 NAT 變成一組無法辨識的位址,而這些位址無法再用於各種 Azure 端點。 您可以透過下列方法來解決此問題:
在部署 API 管理服務的子網上啟用 服務端點 :
- Azure SQL(只有在 API 管理服務部署到 多個區域時,才需要在主要區域中使用)
- Azure 儲存體
- Azure 事件中樞
- Azure Key Vault
如果直接從 API 管理子網路至這些服務啟用端點,則您可以使用 Microsoft Azure 骨幹網路,為服務流量提供最佳路由。 若您搭配使用服務端點與強制通道 API 管理,則上述 Azure 服務的流量不會使用強制通道。 然而,其他 API 管理服務相依性流量仍會使用強制通道。 請確定您的防火牆或虛擬設備未阻擋此流量,否則 API 管理服務可能無法正常運作。
注意
強烈建議直接從 API 管理子網路將服務端點啟用至相依的服務,例如支援服務的 Azure SQL 和 Azure 儲存體。 不過,有些組織可能需要強制傳輸來自 API 管理子網路的所有流量。 在此情況下,確定您設定防火牆或虛擬裝置以允許此流量。 您必須允許每個相依服務的完整 IP位址範圍 ,並在Azure基礎結構變更時將此設定保持在最新狀態。 您的 API 管理服務也可能因為此網路流量的強制傳輸,而遇到延遲或非預期的逾時。
從互聯網到 API 管理服務管理端點的所有控制平面流量,都是透過 API 管理主機承載的一組特定輸入 IP 路由傳送,這些 IP 包含在 ApiManagement 服務標籤中。 流量使用強制通道時,回應不會對稱地對應回這些輸入來源 IP,並會遺失管理端點的連線。 若要克服這項限制,請為 ApiManagement 服務標籤設定使用者定義的路由 (UDR),並將下一個躍點類型設定為 “Internet”,以引導流量回到 Azure。
注意
允許「API 管理」管理流量略過內部部署防火牆或網路虛擬設備,並未被視為重大安全性風險。 API 管理子網 的建議組態 只允許來自 ApiManagement 服務標籤所包含之 Azure IP 位址集的埠 3443 上的輸入管理流量。 建議的 UDR 設定僅適用於此 Azure 流量的傳回路徑。
(外部 VNet 模式) 針對用戶端嘗試從網際網路到達 API 管理閘道與開發人員入口網站,將根據預設捨棄其資料平面流量,原因是強制通道所引進的非對稱路由。 針對每個需要存取的用戶端,設定具有下一個躍點類型「網際網路」的明確 UDR,以略過防火牆或虛擬網路設備。
對於其他強制打開通道的 API 管理服務相依性,請解析主機名稱並連接端點。 包括:
- 計量和健康情況監視
- Azure 入口網站診斷
- SMTP 轉送
- 開發人員入口網站 CAPTCHA
- Azure KMS 伺服器
如需詳細資訊,請參閱 虛擬網路組態參考。
常見的網路設定問題
本節已移至其他地方。 請參閱 虛擬網路組態參考。
疑難排解
未成功將 APIM 服務初始部署至子網路
- 將虛擬機器部署至相同的子網路。
- 連線至虛擬機器,並驗證 Azure 訂閱中下列所有資源的連線:
- Azure 儲存體 Blob
- Azure SQL 資料庫
- Azure 儲存體資料表
- Azure Key Vault
重要
驗證連線之後,請先移除子網中的所有資源,再將 API 管理部署至子網。
驗證網路狀態
將 API 管理部署至子網路之後,請使用入口網站來檢查執行個體與相依性 (例如 Azure 儲存體) 的連線。
在入口網站的左側功能表中,於 [Deployment and infrastructure] \(部署與基礎結構\) 下,依序選取 [網路]>[網路狀態]。
篩選 | 描述 |
---|---|
必填 | 選取以檢閱 API 管理所需的 Azure 服務連線。 失敗指出執行個體無法執行核心作業來管理 API。 |
自選 | 選取以檢閱選用的服務連線。 失敗只是指出特定功能 (例如 SMTP) 將無法運作。 失敗可能會導致降低使用及監視 API 管理執行個體,並提供已認可的 SLA。 |
如需針對連線問題進行疑難排解的協助,請選取:
計量 - 檢閱網路連線狀態計量
診斷 - 在指定的時段內執行虛擬網路驗證器
若要解決連線問題,請檢閱 網路組態設定 並修正必要的網路設定。
累加式更新
對網路進行變更時,請參閱 NetworkStatus API ,確認 API 管理服務並未遺失對重要資源的存取權。 連線狀態應該每隔 15 分鐘更新一次。
若要使用入口網站將網路設定變更套用至 API 管理執行個體:
- 在執行個體的左側功能表中,於 [部署和基礎結構] 底下,選取 [網路]>[虛擬網路]。
- 選取 [Apply network configuration] \(套用網路設定\)。
將 APIM 執行個體重新指派給先前子網路時遇到的挑戰
- VNet 鎖定 - 將 API 管理實例移回其原始子網時,可能因為 VNet 鎖定而無法立即重新指派,這最多需要一個小時才能移除。
- 資源群組鎖定 - 另一個需要考慮的案例是資源群組層級或更高層級存在範圍鎖定,阻礙資源導覽連結刪除。 若要解決此問題,請移除範圍鎖定,並允許 APIM 服務延遲大約 4 到 6 小時,以便在移除鎖定之前從原始子網路取消連結,從而能夠部署到所需的子網路。
針對從 VNet 內到 Microsoft Graph 的連線進行疑難排解
使用者使用 Microsoft Entra 識別提供者登入開發人員入口網站等功能需要與 Microsoft Graph 的網路連線。
針對從 VNet 內到 Microsoft Graph 的連線進行疑難排解:
請確定已設定 NSG 和其他網路規則,以便從 API 管理實例輸出連線到 Microsoft Graph(使用 AzureActiveDirectory 服務標籤)。
確定從 VNet 內對
graph.microsoft.com
進行的 DNS 解析和網路存取。 例如,在 VNet 內佈建新的 VM、進行連線,並嘗試從瀏覽器或是使用 cURL、PowerShell 或其他工具來試用GET https://graph.microsoft.com/v1.0/$metadata
。
相關內容
深入了解: