【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題

路邊兩盞燈發表於2021-06-28

問題描述

使用 Azure 虛擬網路,Azure APIM 可以管理無法通過 Internet 訪問的 API,達到以保護企業內部的後端API的目的。在虛擬網路中,啟用網路安全組(NSG:Network Security Group)來控制出站,入站的埠,我們可以形象的把它比喻成一道門,需要滿足條件的流量才能通過這道安全的大門。

通過安全大門以後,我們就需要有路,才能達到目的。而預設的網路路徑由Azure的骨幹網路控制,如果需要通過公司自己的防火牆(Azure Firewall或企業自己的防火牆)。在虛擬網路中,通過路由表(Route Table)來指定下一跳(Next Pod),通過使用0.0.0.0/0的配置方式(UDRs:user-defined routes),把虛擬網路中的所有流量都匯入並經過防火牆。實現企業級的安全保護。

以上兩句總結起來就是:NSG是門,UDR是路。解決方案架構圖為:

【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題

但是,在搭建APIM VNET時候,卻遇見了各種各樣的錯誤。

1)因為NSG的緣故,必須的埠不通。導致APIM的網路連線狀態“Network connectivity status”頁面中狀態顯示為 Error

【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題

 

2)因為配置了自定義路由(UDR), 導致了APIM頁面中的APIs,Repository等頁面錯誤,且門戶一直彈出Failed to connect to management endpoint錯誤訊息

【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題

 

問題分析

首先:以上的兩個問題,都可以在" 如何將 Azure API 管理與虛擬網路配合使用:常見網路配置問題 "一文中找到答案。

問題一埠問題:新增上文件中所列出的所有必要埠,就可以實現網路連線狀態全部Success的狀態。

API 管理所需的埠:可以使用 網路安全組控制其中部署了 API 管理的子網的入站和出站流量。 如果其中的任一埠不可用,API 管理可能無法正常工作且不可訪問。 將 API 管理與 VNET 配合使用時,另一個常見的錯誤配置問題是阻止了這些埠中的一個或多個。

VNET 中託管 APIM服務例項時,將使用下表中的埠。

源/目標埠方向傳輸協議服務標記
源/目標
目的 (*)虛擬網路型別
* / [80], 443 入站 TCP INTERNET/VIRTUAL_NETWORK 客戶端與 API 管理的通訊 外部
* / 3443 入站 TCP ApiManagement / VIRTUAL_NETWORK Azure 門戶和 PowerShell 的管理終結點 外部和內部
* / 443 出站 TCP VIRTUAL_NETWORK / Storage 與 Azure 儲存的依賴關係 外部和內部
* / 443 出站 TCP VIRTUAL_NETWORK / AzureActiveDirectory Azure Active Directory 和 Azure KeyVault 依賴項 外部和內部
* / 1433 出站 TCP VIRTUAL_NETWORK / SQL 訪問 Azure SQL 終結點 外部和內部
* / 443 出站 TCP VIRTUAL_NETWORK / AzureKeyVault 訪問 Azure KeyVault 外部和內部
* / 5671, 5672, 443 出站 TCP VIRTUAL_NETWORK / EventHub 事件中心策略日誌和監視代理的依賴項 外部和內部
* / 445 出站 TCP VIRTUAL_NETWORK / Storage 與適用於 GIT 的 Azure 檔案共享的依賴關係 外部和內部
* / 443, 12000 出站 TCP VIRTUAL_NETWORK / AzureCloud 執行狀況和監視擴充套件 外部和內部
* / 1886、443 出站 TCP VIRTUAL_NETWORK / AzureMonitor 釋出診斷日誌和指標資源執行狀況和 Application Insights 外部和內部
* / 25、587、25028 出站 TCP VIRTUAL_NETWORK/INTERNET 連線到 SMTP 中繼以傳送電子郵件 外部和內部
* / 6381 - 6383 入站和出站 TCP VIRTUAL_NETWORK/VIRTUAL_NETWORK 訪問 Redis 服務以獲取計算機之間的快取策略 外部和內部
* / 4290 入站和出站 UDP VIRTUAL_NETWORK/VIRTUAL_NETWORK 同步用於計算機之間的速率限制策略的計數器 外部和內部
* / * 入站 TCP AZURE_LOAD_BALANCER/VIRTUAL_NETWORK Azure 基礎結構負載均衡器 外部和內部

配置完成NSG後,一定要記住,在APIM中去Apply Network Configration,以實現網路配置雙邊同步。 

【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題

 

問題二自定義路由問題:情況要複雜一些。需要開啟服務終結點,在路由表中放行所在中國區的IP地址(控制平面 IP 地址

 使用 Express Route 或網路虛擬裝置強制隧道流量發往本地防火牆:客戶的常用配置是定義自己的預設路由 (0.0.0.0/0),強制來自 API 管理所委託子網的所有流量流經本地防火牆或流向網路虛擬裝置。 此流量流一定會中斷與 Azure API 管理的連線,因為出站流量會在本地被阻止,或者通過“網路地址轉換”功能傳送到不再與各種 Azure 終結點一起工作的一組無法識別的地址。 

此解決方案要求執行以下三項操作:

第一項:在部署 API 管理服務的子網上啟用服務終結點。 需為 Azure SQL、Azure 儲存、Azure 事件中心和 Azure 服務匯流排啟用服務終結點。 直接從 API 管理委託的子網啟用這些服務的終結點可以讓它們使用 Azure 主幹網路,為服務流量提供優化的路由。 如果將服務終結點與強制隧道 API 管理配合使用,則不會將上述 Azure 服務流量進行強制隧道傳輸。 其他 API 管理服務依賴項流量會通過強制隧道重定向,不能丟失,否則 API 管理服務會功能失常。

【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題


第二項:所有控制平面流量(從 Internet 到 API 管理服務的管理終結點)都會通過特定的一組由 API 管理託管的入站 IP 進行路由。 當流量被強制進行隧道傳輸時,響應不會對稱地對映回這些入站源 IP。 為了克服此限制,我們需要新增以下使用者定義的路由 (UDR),通過將這些主機路由的目標設定為“Internet”來將流量傳回 Azure。 用於控制平面流量的入站 IP 集是記錄在案的控制平面 IP 地址

【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題

 

第三項:對於被強制進行隧道傳輸的其他 API 管理服務依賴項,應該有一種方法來解析主機名並訪問該終結點。 其中包括:

  • 指標和執行狀況監視到 Azure 監視終結點的出站網路連線,可在內網中解析,這些 URL 在 AzureMonitor 服務標記下表示,用於網路安全組。
        1. mooncake.warmpath.chinacloudapi.cn
        2. global.prod.microsoftmetrics.com(新增)
        3. shoebox2.prod.microsoftmetrics.com(新增)
        4. shoebox2-red.prod.microsoftmetrics.com
        5. shoebox2-black.prod.microsoftmetrics.com
        6. shoebox2-red.shoebox2.metrics.nsatc.net
        7. shoebox2-black.shoebox2.metrics.nsatc.net
        8. prod3.prod.microsoftmetrics.com(新增)
        9. prod3-red.prod.microsoftmetrics.com
        10. prod5.prod.microsoftmetrics.com
        11. prod5-black.prod.microsoftmetrics.com
        12. prod5-red.prod.microsoftmetrics.com
        13. gcs.prod.warm.ingestion.monitoring.azure.cn
  • Azure 門戶診斷若要在從虛擬網路內部使用 API 管理擴充套件時從 Azure 門戶啟用診斷日誌流,需要允許在埠 443 上對 dc.services.visualstudio.com 進行出站訪問。 
  • SMTP 中繼  :在主機 smtpi-co1.msn.comsmtpi-ch1.msn.comsmtpi-db3.msn.comsmtpi-sin.msn.comies.global.microsoft.com 下解析的 SMTP 中繼的出站網路連線
  • 開發人員門戶驗證碼:在主機 client.hip.live.com 和 partner.hip.live.com 下解析的開發人員門戶 CAPTCHA 的出站網路連線。

 

問題解決

對比NSG列表,新增缺少的埠。特別是:1433,5671, 5672,12000,1886,25028, 6381 - 6383等不常配置的埠。

在Route Table中新增中國區兩個被標記為全球的IP地址。這是必須的地址,也是在配置中常常忽略的問題。也是產生此問題的根源。

【Azure API 管理】APIM整合內網虛擬網路後,啟用自定義路由管理外出流量經過防火牆(Firewall),遇見APIs載入不出來問題

 

 

參考資料

 

在內部虛擬網路中使用 Azure API 管理服務:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet

APIM常見網路配置問題:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-vnet#common-network-configuration-issues

 

相關文章