API 在公司與客戶在內部和外部存取服務的方式中越來越突出。 在內部,API 可用來存取企業營運應用程式、家用解決方案和第三方整合。 從外部看,更多的公司希望更具生產力,並使其 API 獲利。 考慮到這一趨勢,API 管理 成為管理、治理和發佈 API 給內部和外部物件之標準方法的核心元件。
在 Azure 應用程式閘道的説明下,現在可以保護及限制透過 Azure API 管理 提供服務的 API 存取。 本文說明一個解決方案,您可以在其中透過單一 API 管理 實例來管理內部和外部 API。 您可以維護安全狀態,使其無法透過因特網直接公開,但會透過 應用程式閘道 加以存取。
注意
此架構是 雲端採用架構 中 Azure 登陸區域中 Azure API 管理 指引的基礎。
架構
此架構圖的開頭是代表訂用帳戶範圍、將解析私人網域的 私用 DNS 區域,以及虛擬網路名稱APIM-CS VNet的範圍。 訂用帳戶頂端是一個方塊,表示它是內部部署工作負載。 方塊內有伺服器圖示。 管道表示站對站連線,或 Azure ExpressRoute 會連線到 Azure 訂用帳戶中的 API 管理 實例。 另外七個較小的方塊位於顯示 Azure 訂用帳戶的大方塊內。 其中四個方塊位於頂端數據列,而底部數據列有三個。 每個個別方塊都代表具有連結網路安全組的個別子網。 從最左邊,頂端數據列最左邊方塊上有一個連結至 Azure 應用程式閘道的公用IP位址。 應用程式閘道 也位於七個小方塊中的一個,子網名為App GW子網。 右側是另一個方塊,其中包含 API 管理 實例,其子網名為APIM子網。 旁邊是頂端數據列的第三個方塊,其中包含名為PE子網之子網中 Azure Functions 實例的私人端點。 頂端數據列最右邊的方塊是包含 Azure Function Apps 的後端子網、函式 Azure App 服務 方案,以及與函式應用程式相關聯的記憶體帳戶。 從左開始,底部數據列是一個方塊,其中包含 Bastion 子網中的 Azure Bastion。 第二個方塊包含 Jump Box 子網中的管理 jumbox VM。 底部數據列的最後一個方塊是 DevOps 子網中包含的 DevOps 代理程式。 在影像右下角,有三個共享資源及其各自的圖示。 從左至右,有下列方塊:密鑰保存庫、Application Insights 和 Log Analytics 工作區。 有兩組工作流程。 第一個工作流程以黑色圓圈表示,另一個工作流程則以藍色圓圈表示,稍後會說明。 黑色工作流程表示可從外部取得的 API 存取。 流程會從存取公用IP位址的用戶開始。 箭號接著會指向 應用程式閘道的方向、從 應用程式閘道 到私人端點,以及從私人端點指向函式應用程式。 藍色工作流程會從內部部署伺服器開始,其箭號指向 API 管理 實例,透過指出站對站連線或透過 ExpressRoute 的管線圖示。 流程的其餘部分與上述相同:從 API 管理 到私人端點,以及從私人端點到 Azure Function。
此架構假設原則已從 Azure 登陸區域加速器 就緒,且結構會從管理群組向下驅動。
下載此架構的 Visio 檔案。
工作流程
混合式案例 (藍色圓圈)
此案例需要站對站或 Azure ExpressRoute 連線至內部部署環境。
- 內部部署應用程式需要存取透過 Azure API 管理 提供的內部 API。
- API 管理 連線到裝載在 Azure Functions 上的後端 API。 此連線是透過私人端點,可透過 Azure Functions Premium 方案取得,且裝載於自己的子網中。
- 私人端點可安全地存取裝載在 Azure Functions 上的內部 API。
外部存取案例 (黑色圓圈)
- 外部應用程式會存取附加至 Azure 應用程式閘道 的公用IP位址或自定義FQDN。
- 應用程式閘道 做為 Web 應用程式防火牆,這需要 PFX 憑證進行 SSL 終止。
- API 管理 會透過私人端點連線到裝載在 Azure Functions 上的後端 API。 此端點可透過 Azure Functions Premium 方案取得,並裝載在自己的子網中。
- 私人端點可安全地存取 Azure Functions 上裝載的外部可用 API。
元件
架構會使用下列元件:
Azure API 管理 是一項受控服務,可讓您跨混合式和多雲端環境管理服務。 API 管理可作為抽象後端架構的外觀,它可為內部和外部使用者提供 API 可觀察性和取用性的控制和安全性。
Azure Functions 是無伺服器解決方案,可讓您更專注於可使用最少基礎結構管理來執行的程式碼區塊。 函式可以裝載於 各種主控方案中,而此參考架構會使用進階方案,因為使用私人端點。
Azure 應用程式閘道 是受控服務,可作為第 7 層負載平衡器和 Web 應用程式防火牆。 在此案例中,應用程式閘道會保護內部APIM實例,這可讓您使用內部和外部模式。
Azure DNS 私用 DNS 區域可讓您管理及解析虛擬網路內的功能變數名稱,而不需要實作自定義 DNS 解決方案。 私用 DNS 區域可以透過虛擬網路連結,對齊一或多個虛擬網路。 由於 Azure Functions 會透過此參考架構所使用的私人端點公開,因此您必須使用私人 DNS 區域。
Azure 監視器Application Insights 可協助開發人員偵測異常狀況、診斷問題,以及瞭解使用模式。 Application Insights 具有可擴展的應用程式效能管理和即時 Web 應用程式監視功能。 支援各種平台,包括 .NET、Node.js、Java 和 Python。 它支援裝載於 Azure、內部部署、混合式環境或其他公用雲端的應用程式。 Application Insights 包含在此參考架構中,以監視已部署應用程式的行為。
Azure 監視器Log Analytics 可讓您使用 Azure 監視器記錄中的數據編輯和執行記錄查詢,選擇性地從 Azure 入口網站 內執行。 開發人員可以針對一組記錄執行簡單的查詢,或使用Log Analytics來執行進階分析。 然後,他們可以視覺化結果。 Log Analytics 已設定為此參考架構的一部分,以匯總所有監視記錄,以取得更多分析和報告。
Azure 虛擬機器 是一種運算資源,可用來裝載許多不同的工作負載。 在此參考架構中,虛擬機可用來提供管理 Jumpbox 伺服器,以及 DevOps 代理程式或 GitHub 執行器的主機。
Azure Key Vault 是一種雲端服務,可安全地儲存和存取秘密,範圍從 API 金鑰和密碼到憑證和密碼編譯金鑰。 此參考架構會使用 Azure 金鑰保存庫 來儲存 應用程式閘道 所使用的 SSL 憑證。
Azure Bastion 是在開發人員虛擬網路內佈建的平台即服務。 它透過 TLS 從 Azure 入口網站提供到開發人員虛擬機器的安全性 RDP/SSH 連線。 使用 Azure Bastion 時,虛擬機器不再需要公用 IP 位址,就能透過 RDP/SSH 進行連接。 此參考架構會使用 Azure Bastion 來存取 DevOps 代理程式或 GitHub 執行器伺服器或管理跳板伺服器。
如果您使用 DevOps 工具,例如 Azure DevOps 或 GitHub,則雲端裝載的代理程式或執行器會透過公用因特網運作。 由於此架構中的 API 管理設定為內部網路,因此您必須使用可存取 VNet 的 DevOps 代理程式。 DevOps 代理程式可協助您將原則和其他變更部署至架構中的 API。 這些 可用來將程式分開,並讓您的開發小組根據API部署變更。 它們是由DevOps執行者所執行。
替代項目
針對 API 管理 實例所連線的後端服務,除了此參考實作中所使用的 Azure Functions 之外,還有數個替代專案可供使用:
- Azure App 服務 是完全受控的 HTTP 型服務,可建置、部署及調整 Web 應用程式。 支援 .NET、.NET Core、Java、Ruby、Node.js、PHP 和 Python。 應用程式可以在 Windows 或 Linux 環境中執行和調整。
- Azure Kubernetes Service 提供完全受控的 Kubernetes 叢集,以提供整合式持續整合和持續傳遞 (CI/CD) 體驗、治理和安全性。
- Azure Logic Apps 是雲端式平臺,可建立和執行自動化工作流程。 您可以在 Azure 上的基本企業整合中找到範例參考架構。
- Azure Container Apps 可讓您在無伺服器平台上執行微服務和容器化應用程式。
針對多區域部署,請考慮使用 Azure Front Door 來提供使用者與應用程式靜態和動態 Web 內容之間的快速、可靠且安全的存取。
若要查看 應用程式閘道 如何保護 API 的其他範例,請參閱使用 應用程式閘道 和 API 管理 保護 API。
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
可靠性
可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱可靠性支柱的概觀 (部分機器翻譯)。
- 為每個區域部署至少兩個分散在兩個可用性區域的 API 管理 縮放單位。 此方法可最大化您的可用性和效能。
- VNet 對等互連可在區域中提供絕佳的效能,但其延展性限制上限為 500 個網路。 如果您需要連線更多工作負載,請使用中 樞輪輻設計 或 Azure vWAN。
安全性
安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性支柱的概觀。
- API 管理 驗證原則可用來驗證對 OpenAPI 架構的 API 要求和回應。 這些功能不是 Web 應用程式防火牆 的替代專案,但它們可以提供對某些威脅的額外保護。 新增驗證原則可能會影響效能,因此我們建議您使用效能負載測試來評估其對API輸送量的影響。
- 在 API 管理 前面部署 Azure Web 應用程式防火牆 (WAF),以針對常見的 Web 應用程式惡意探索和弱點提供保護。
- 套用具有 金鑰保存庫 秘密的具名值,以保護APIM原則中的敏感性資訊。
- 使用 應用程式閘道 來存取內部APIM實例,以保護APIM實例並啟用混合式連線。
- 在 VNet 中部署 API 管理 閘道,以支援混合式連線和提高安全性。
- VNet 對等互連可在區域中提供絕佳的效能,但其延展性限制上限為 500 個網路。 如果您需要連線更多工作負載,請使用中 樞輪輻設計 或 Azure vWAN。
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化支柱的概觀。
- 由於可用性區域和虛擬網路支援的需求,我們選取了 API 管理的進階層,並遵循每個區域的定價。 此外,在此工作負載中,Azure Functions 會裝載於進階方案上,因為需要 VNet 存取。
- 如需概念證明或原型,建議您使用其他 API 管理 層(例如開發人員或標準)。
卓越營運
卓越營運涵蓋部署應用程式並使其持續在生產環境中執行的作業流程。 如需詳細資訊,請參閱卓越營運支柱的概觀 (部分機器翻譯)。
- API 管理 組態應以ARM樣本表示,而且您應該採用基礎結構即程式代碼思維。
- 使用 CI/CD 程式來管理、版本和更新 API 管理 組態。
- 建立自定義健康情況探查,以協助驗證 API 管理實例的狀態。 使用 URL
/status-0123456789abcdef
為應用程式閘道中的 APIM 服務建立一般健康情況端點。 - 密鑰保存庫中更新的憑證會在 API 管理 自動輪替,這會在 4 小時內更新。
- 為每個區域部署至少兩個分散在兩個可用性區域的 API 管理 縮放單位。 此方法可最大化可用性和效能。
部署此案例
此架構可在 GitHub 上取得。 其中包含所有必要的基礎結構即程式代碼檔案和 部署指示。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。
下一步
- 雲端採用架構 指導方針Azure 登陸區域中的 Azure API 管理
- 使用 Azure Resource Manager 範本的 API 管理 CI/CD
- API 管理 簡介
- 使用APIM管理 API
- API 管理 開始使用的資源
請參閱下列重要資源:
了解有關這些關鍵服務的更多資訊:
- Azure Functions 概觀
- Azure 私用 DNS 區域
- Azure 應用程式 深入解析概觀
- Azure Log Analytics 概觀
- Azure 虛擬機器概觀
- Azure Key Vault 概念
- Azure Bastion 概觀