將 Azure APIM 執行個體部署到虛擬網路 - 內部模式

適用於:開發人員 |進階版

Azure APIM 可以部署 (插入) 於 Azure 虛擬網路 (VNet) 內部,以存取網路中的後端服務。 如需 VNet 連線選項、需求和考慮,請參閱:

本文說明如何以「內部」模式設定 API 管理執行個體的 VNet 連線。 在此模式中,您只能存取下列 API 管理端點,而這些端點位於您控制其存取權的 VNet 內。

  • API 閘道
  • 開發人員入口網站
  • 直接管理
  • Git

注意

  • 公用 DNS 上未註冊任何 API 管理端點。 除非您針對 VNet 設定 DNS,否則仍然無法存取端點。
  • 若要在此模式中使用自我載入閘道,也請啟用自我裝載閘道設定端點的私人連線。

以內部模式使用 APIM,以:

  • 使用 Azure VPN 連線或 Azure ExpressRoute,讓裝載於私人資料中心的 API 可供外部第三方安全地存取。
  • 透過通用閘道器公開雲端式 API 和內部部署 API,以實現混合式雲端情節。
  • 使用單一閘道器端點來管理多個地理位置中所裝載的 API。

連線 至內部 VNet

如需可從公用網際網路存取 APIM 端點且後端服務位於網路中的「外部」模式特有設定,請參閱將 Azure APIM 執行個體部署到虛擬網路 - 外部模式

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

必要條件

開始之前,請先檢閱 API 管理 插入虛擬網路的網路資源需求。

依據裝載 API 管理執行個體的運算平台版本 (stv2stv1),有些必要條件會不同。

提示

當您使用入口網站來建立或更新現有 API 管理執行個體的網路連線時,會將執行個體裝載於 stv2 運算平台上。

  • 與您 API 管理執行個體位於相同區域與訂閱中的虛擬網路與子網路

    • 用來連線到 APIM 執行個體的子網路可能包含其他 Azure 資源類型。
    • 子網路不應該啟用任何委派。 子網路的 [為服務委派子網路] 設定應設為 [無]
  • 連結至上述子網路的網路安全性群組。 需要有網路安全性群組 (NSG),才能明確地允許輸入連線,因為 APIM 內部使用的負載平衡器預設是安全的,並拒絕所有輸入流量。 如需特定設定,請參閱本文稍後的設定 NSG 規則

  • 某些情況下,請在子網路中啟用服務端點以依賴服務,例如 Azure 儲存體或 Azure SQL。 如需詳細資訊,請參閱本文稍後的使用 ExpressRoute 或網路虛擬設備,以強制打開通道將流量傳送至內部部署防火牆

  • 標準 SKU 公用 IPv4 位址。 設定外部或內部存取的虛擬網路時,需要公用 IP 位址資源。 使用內部虛擬網路時,公用 IP 位址只會用於管理作業。 深入了解 API 管理的 IP 位址

    • IP 位址必須位於與 API 管理執行個體和虛擬網路相同的區域和訂用帳戶中。

    • 建立公用 IP 位址資源時,請確定您指派其 [DNS 名稱標籤]。 一般而言,您應該使用與 API 管理 實例相同的 DNS 名稱。 如果您變更它,請重新部署實例,以便套用新的 DNS 標籤。

    • 為了獲得最佳網路效能,建議使用預設路由喜好設定Microsoft 網路

    • 當您計劃為 API 管理執行個體啟用區域備援的區域中建立公用 IP 位址時,請設定 [區域備援] 設定。

    • 會將 IP 位址的值指派為該區域中 API 管理執行個體的虛擬公用 IPv4 位址。

    • 從外部變更為內部虛擬網路 (或反之亦然)、變更網路中子網路或更新 API 管理執行個體的可用性區域時,您必須設定不同的公用 IP 位址。

啟用 VNet 連線

使用 Azure 入口網站啟用 VNet 連線能力 (stv2 平台)

  1. 移至 Azure 入口網站,以尋找您的 API 管理執行個體。 搜尋並選取 [API 管理服務]

  2. 選擇您的 API 管理執行個體。

  3. 選取 [網路] > [虛擬網路]

  4. 選取 [內部] 存取類型。

  5. 在佈建 API 管理服務的位置 (區域) 清單中:

    1. 選擇 [位置]
    2. 選取 [虛擬網路]、[子網路] 與 [IP 位址]
      • VNet 清單會填入 Azure 訂閱中可用的 Resource Manager VNet,而這些訂閱設定於您所設定的區域中。
  6. 選取套用。 您的 API 管理執行個體的 [虛擬網路] 頁面會更新為新的 VNet 和子網路選項。 在 Azure 入口網站 中設定內部 VNet

  7. 繼續為 API 管理執行個體的其餘位置設定 VNet 設定。

  8. 在頂端瀏覽列中,選取 [儲存],然後選取 [Apply network configuration] \(套用網路設定\)

    更新 API 管理執行個體可能需要 15 到 45 分鐘的時間。 開發人員層會在此程序期間停機。 基本和更高的 SKU 在流程期間沒有停機時間。

成功部署之後,您應該會在 [概觀] 刀鋒視窗上看到 API 管理服務的「私人」虛擬 IP 位址和「公用」虛擬 IP 位址。 如需 IP 位址的詳細資訊,請參閱本文中的路由

Azure 入口網站 中尋址的公用和私人IP

注意

因為未在公用 DNS 上註冊閘道 URL,所以 Azure 入口網站上可用的測試主控台將不適用於「內部」VNet 部署服務。 請改為使用「開發人員入口網站」上所提供的測試主控台。

使用 Resource Manager 範本啟用 VNet 連線能力 (stv2 平台)

  • Azure Resource Manager 範本 (API 2021-08-01 版)

    將 Resource Manager 範本部署至 Azure 的按鈕。

使用 Azure PowerShell Cmdlet (stv1 平台) 啟用連線

在 VNet 中建立更新 API 管理執行個體。

設定 NSG 規則

在 API 管理子網路中設定自訂網路規則,以篩選進出 API 管理執行個體的流量。 建議使用下列「最低」NSG 規則,以確保您的執行個體能夠正常運作及存取。 請仔細檢閱您的環境,以判斷更多可能需要的規則。

重要

根據您對快取和其他功能的使用,您可能需要設定下列表格中最低規則以外的其他 NSG 規則。 如需詳細設定,請參閱虛擬網路設定參考

  • 在大部分的情況下,請使用所指出的服務標籤,而非指定網路來源與目的地的服務 IP 位址。
  • 將這些規則的優先順序設定為高於預設規則的優先順序。
來源 / 目的地連接埠 方向 傳輸通訊協定 服務標籤
來源 / 目的地
目的 VNet 類型
* / [80]、443 傳入 TCP Internet / VirtualNetwork 與 API 管理的用戶端通訊 僅外部
* / 3443 傳入 TCP ApiManagement / VirtualNetwork Azure 入口網站和 PowerShell 的管理端點 外部和內部
* / 6390 輸入 TCP AzureLoadBalancer / VirtualNetwork Azure 基礎結構負載平衡器 外部和內部
* / 443 傳入 TCP AzureTrafficManager / VirtualNetwork 適用於多區域部署的 Azure 流量管理員路由 僅外部
* / 443 輸出 TCP VirtualNetwork / Storage 核心服務功能的相依性 Azure 儲存體 外部和內部
* / 1433 輸出 TCP VirtualNetwork / SQL 存取 Azure SQL 端點以取得核心服務功能 外部和內部
* / 443 輸出 TCP VirtualNetwork / AzureKeyVault 針對核心服務功能存取 Azure 金鑰保存庫 外部和內部
* / 1886、443 輸出 TCP VirtualNetwork / AzureMonitor 發佈診斷記錄和計量資源健康狀態Application Insights 外部和內部

DNS 組態

在內部 VNet 模式中,您必須管理自己的 DNS,以啟用對 API 管理端點的輸入存取。

我們建議:

  1. 設定 Azure DNS 私人區域
  2. 將 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

在自訂網域名稱上存取

如果您不想要以預設主機名稱存取 APIM 服務,請為您的所有端點設定自訂網域名稱,如下圖所示:

設定自定義功能變數名稱

設定 DNS 記錄

在 DNS 伺服器中建立記錄,以存取可從 VNet 存取的端點。 將端點記錄對應至您服務的私人虛擬 IP 位址

基於測試目的,您可以在連線至 VNet 之子網路的虛擬機器上更新 hosts 檔案,而此 VNet 中已部署 APIM。 假設服務的私人虛擬 IP 位址是 10.1.0.5,則您可以對應 hosts 檔案,如下所示。 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,而兩部 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 (在 stv2 平台上部署 API 管理時為必要項目)

    如果直接從 API 管理子網路至這些服務啟用端點,則您可以使用 Microsoft Azure 骨幹網路,為服務流量提供最佳路由。 若您搭配使用服務端點與強制通道 API 管理,則上述 Azure 服務的流量不會使用強制通道。 然而,其他 API 管理服務相依性流量仍會使用強制通道。 請確定您的防火牆或虛擬設備未阻擋此流量,否則 API 管理服務可能無法正常運作。

    注意

    強烈建議直接從 API 管理子網路將服務端點啟用至相依的服務,例如支援服務的 Azure SQL 和 Azure 儲存體。 不過,有些組織可能需要強制傳輸來自 API 管理子網路的所有流量。 在此情況下,確定您設定防火牆或虛擬裝置以允許此流量。 您必須允許每個相依服務的完整 IP 位址範圍,並在 Azure 基礎結構變更時讓此組態保持最新狀態。 您的 API 管理服務也可能因為此網路流量的強制傳輸,而遇到延遲或非預期的逾時。

  • 從網際網路到 APIM 服務管理端點的所有控制平面流量,都會透過一組特定輸入 IP 進行路由傳送,這組 IP 是由 APIM 所裝載且受到 ApiManagement服務標籤包圍。 流量使用強制通道時,回應不會對稱地對應回這些輸入來源 IP,並會遺失管理端點的連線。 若要克服此限制,針對下一個躍點類型設定為「網際網路」的 ApiManagement 服務標籤設定使用者定義的路由 (UDR),以將流量引導回 Azure。

    注意

    允許「API 管理」管理流量略過內部部署防火牆或網路虛擬設備,並未被視為重大安全性風險。 API 管理子網路的建議設定只允許來自 ApiManagement 服務標籤所包含 Azure IP 位址集且位於連接埠 3443 的輸入管理流量。 建議的 UDR 設定僅適用於此 Azure 流量的傳回路徑。

  • (外部 VNet 模式) 針對用戶端嘗試從網際網路到達 API 管理閘道與開發人員入口網站,將根據預設捨棄其資料平面流量,原因是強制通道所引進的非對稱路由。 針對每個需要存取的用戶端,設定具有下一個躍點類型「網際網路」的明確 UDR,以略過防火牆或虛擬網路設備。

  • 對於其他強制打開通道的 API 管理服務相依性,請解析主機名稱並連接端點。 包括:

    • 計量和健康情況監視
    • Azure 入口網站診斷
    • SMTP 轉送
    • 開發人員入口網站 CAPTCHA
    • Azure KMS 伺服器

如需詳細資訊,請參閱虛擬網路設定參考

常見的網路設定問題

本節已移至其他地方。 請參閱虛擬網路設定參考

疑難排解

未成功將 APIM 服務初始部署至子網路

  • 將虛擬機器部署至相同的子網路。
  • 連線至虛擬機器,並驗證 Azure 訂閱中下列所有資源的連線:
    • Azure 儲存體 Blob
    • Azure SQL Database
    • Azure 儲存體資料表
    • Azure Key Vault (適用於 stv2 平台上所裝載的 API 管理執行個體)

重要

驗證連線之後,請先移除子網路中的所有資源,再將 API 管理部署至子網路 (在 stv1 平台上裝載 API 管理時為必要項目)。

驗證網路狀態

  • 將 API 管理部署至子網路之後,請使用入口網站來檢查執行個體與相依性 (例如 Azure 儲存體) 的連線。

  • 在入口網站的左側功能表中,於 [Deployment and infrastructure] \(部署與基礎結構\) 下,依序選取 [網路]>[網路狀態]

    在入口網站中確認網路連線狀態的螢幕快照。

篩選 描述
必要 選取以檢閱 API 管理所需的 Azure 服務連線。 失敗指出執行個體無法執行核心作業來管理 API。
選擇性 選取以檢閱選用的服務連線。 失敗只是指出特定功能 (例如 SMTP) 將無法運作。 失敗可能會導致降低使用及監視 API 管理執行個體,並提供已認可的 SLA。

如需針對連線問題進行疑難排解的協助,請選取:

  • 計量 - 檢閱網路連線狀態計量

  • 診斷 - 在指定期間內執行虛擬網路驗證器

若要解決連線問題,請檢閱網路組態設定,並修正必要的網路設定。

累加式更新

對您的網路進行變更時,請參閱 NetworkStatus API,以確認 APIM 服務並未遺失對重要資源的存取權。 連線狀態應該每隔 15 分鐘更新一次。

若要使用入口網站將網路設定變更套用至 API 管理執行個體:

  1. 在執行個體的左側功能表中,於 [部署和基礎結構] 底下,選取 [網路]>[虛擬網路]
  2. 選取 [Apply network configuration] \(套用網路設定\)

部署至 Resource Manager VNet 子網路時,stv1 計算平台上裝載的 APIM 執行個體會建立資源導覽連結來保留子網路。 如果子網路已包含來自不同提供者的資源,部署將會失敗。 同樣地,當您刪除 API 管理服務或將其移至不同的子網路時,也會移除資源導覽連結。

將 APIM 執行個體重新指派給先前子網路時遇到的挑戰

  • VNet 鎖定 - 將 APIM 執行個體移回其原始子網路時,可能會因為 VNet 鎖定而無法立即重新指派,最多需要六個小時才能移除鎖定。 如果原始子網路有其他 stv1 平台型 APIM 服務 (雲端服務型),則刪除它們後需要等待 6 小時,才能在相同的子網路中部署 stv2 平台型服務。
  • 資源群組鎖定 - 另一個要考慮的案例是在資源群組層級或更高層級上存在範圍鎖定,進而阻礙資源導覽連結刪除流程。 若要解決此問題,請移除範圍鎖定,並允許 APIM 服務延遲大約 4 到 6 小時,以便在移除鎖定之前從原始子網路取消連結,從而能夠部署到所需的子網路。

針對從 VNet 內到 Microsoft Graph 的連線進行疑難排解

使用者使用 Microsoft Entra 識別提供者登入開發人員入口網站等功能需要與 Microsoft Graph 的網路連線。

針對從 VNet 內到 Microsoft Graph 的連線進行疑難排解:

  • 確定 NSG 和其他網路規則已設定為從您的 APIM 執行個體輸出連線到 Microsoft Graph (使用 AzureActiveDirectory 服務標籤)。

  • 確定從 VNet 內對 graph.microsoft.com 進行的 DNS 解析和網路存取。 例如,在 VNet 內佈建新的 VM、進行連線,並嘗試從瀏覽器或是使用 cURL、PowerShell 或其他工具來試用 GET https://graph.microsoft.com/v1.0/$metadata

下一步

深入了解: