Azure API 管理 是一個用於 API 的全面 API 閘道和反向代理。 它提供許多功能,包括快取、回應模擬,以及開發人員入口網站,對於以 API 為主的應用程式很有用。 本文摘要說明適用於多租用戶解決方案之 API 管理的一些主要功能。
注意
本文著重於當您擁有裝載 API 供內部或外部使用之多租使用者應用程式時,如何使用 API 管理。
另一種多租戶式架構的形式是將 API 管理網關作為服務提供給其他小組。 例如,組織可能有多個應用程式小組部署及使用的共用 API 管理 實例。 本文不會討論這種形式的多租戶架構。 請考慮使用工作區,這可以幫助您將 API 管理實例在具有不同存取層級的多個團隊之間共用。
隔離模型
API 管理通常部署為共用元件,並通過單一實例處理多個租戶的請求。 不過,根據您的租賃模型,有多種方式可以部署 API 管理。 本文假設您使用部署戳記 來部署解決方案。
一般而言,不論隔離模型為何,您使用 API 管理 的方式都類似。 本節著重於隔離模型的成本和複雜度差異,以及每個方法如何將要求路由傳送至後端 API 應用程式。
考量 | 具有單一租戶後端服務的共享實例 | 具有共享多租戶後端的共享實例 | 每個租戶的實例 |
---|---|---|---|
支援的租用戶數目 | 多 | 幾乎無界限 | 每個實例各一個 |
成本 | 較低 | 較低 | 較高 |
部署複雜度 | 低:對每個印章而言,只需管理一個單一實例 | 低:對每個印章而言,只需管理一個單一實例 | 高:多個實例需要管理 |
路由設定複雜度 | 較高 | 較低 | 較低 |
易受干擾鄰里問題的影響 | 是的 | 是的 | 不 |
租戶層級的網路隔離 | 不 | 不 | 是的 |
範例案例 | 每個租戶的自訂網域名稱 | 具有共用應用層的大型多租用戶解決方案 | 租戶特定的部署標記 |
共用實例隔離模型
在多個租用戶之間共用 API 管理 實例很常見,這有助於降低成本和管理複雜度。 如何共用 API 管理 實例的詳細數據取決於您如何將租使用者指派給後端 API 應用程式。
單一租戶後端應用程式
如果您為每個租使用者部署不同的後端應用程式,則可以部署單一 API 管理 實例,併為每個要求將流量路由傳送至正確的租使用者後端。 此方法要求您將 API 管理設置為與每個租戶的後端主機名進行配置,或者找到另一種方式以將傳入的要求映射到正確租戶的後端。
因為需要額外的查閱,因此此方法可能無法擴展應用於大量租戶共用的單一 API 管理實例。 當您查閱租使用者後端時,也可能會有一些效能額外負荷。 不過,此效能額外負荷的大小取決於您設計這類查找的方式。
共用多租使用者後端應用程式
在租用戶共用一般後端應用程式的案例中,API 管理 路由程式會簡化,因為您可以將所有要求路由至單一後端。 如果您使用通配符網域或提供者發行的網域,您可以使用此方法達到幾乎未繫結的規模。 此外,由於要求不需要對應至租使用者的後端,因此自定義路由決策不會對效能造成影響。
每個租戶的實例
在某些情況下,您可能會為每個租使用者部署 API 管理 實例。 只有當您有少量租使用者,或有嚴格的合規性需求,限制您在租用戶之間共用任何基礎結構時,才建議您使用此方法。 例如,如果您為每個租使用者部署專用虛擬網路,您可能也需要為每個租使用者部署專用 API 管理 實例。
提示
如果您部署多個實例的唯一原因是支援不同地理區域的使用者,您可能會想要考慮 API 管理 中的多重區域部署功能是否符合您的需求。
當您部署 API 管理實例時,您必須考慮服務限制,包括可能適用於 Azure 訂閱或區域中 API 管理實例數量的任何限制。
單一租戶實例通常具有最少的路由設定,因為您可以將所有要求路由傳送至單一後端。 此案例不需要自定義路由決策,因此不會對效能造成影響。 不過,通常會產生比部署共用實例更高的資源成本。 如果您需要部署單一租戶實例,請考慮自我托管網關是否可讓您重新利用已部署的租戶專屬計算資源。
支援多租使用者 API 管理 功能
API 管理會使用原則來靈活應用。 您可以自定義當您使用原則時,如何驗證、路由和處理要求。 當您使用 API 管理 設計多租用戶解決方案時,您可以使用原則來實作其許多功能。
識別傳入要求的租戶
請考慮如何識別每個傳入請求中的適當租戶。 在多租戶解決方案中,確保清楚瞭解誰正在提出每個請求,以便您傳回該特定租戶的數據,而不給其他人。
API 管理提供可用來驗證要求的訂閱。 這些訂閱會使用唯一的訂閱金鑰,協助識別提出要求的訂閱者。 如果您選擇使用訂用帳戶,請考慮如何將 API 管理 訂用帳戶對應至您自己的租用戶或客戶標識符。 訂用帳戶已緊密整合至開發人員入口網站。 針對大部分的解決方案,最好使用訂用帳戶來識別租使用者。
或者,您可以使用其他方法來識別租使用者。 以下是在您定義之自定義原則內執行的一些方法範例:
使用 URL 的自訂元件,例如子域、路徑或查詢字串。 例如,在 URL
https://api.contoso.com/tenant1/products
中,您可能會擷取路徑的第一個部分,tenant1
,並將其視為租戶標識符。 同樣地,假設傳入 URLhttps://tenant1.contoso.com/products
,您可能會擷取子域tenant1
。 若要使用此方法,請考慮從Context.Request.Url
屬性剖析路徑或查詢字串。使用要求標頭。 例如,您的客戶端應用程式可能會向請求中新增自定義標頭。 若要使用此方法,請考慮從
Context.Request.Headers
集合讀取。從 JSON Web 令牌 (JWT) 擷取聲明。 例如,您在識別提供者所發出的 JWT 中可能有自定義
tenantId
宣告。 若要使用此方法,請使用 validate-jwt 原則並設定output-token-variable-name
屬性,讓您的原則定義可以從令牌讀取值。動態查找租用戶識別碼。 處理要求時,您可以與外部資料庫或服務通訊。 藉由採用這種方法,您可以建立自定義租用戶對應邏輯,將邏輯租使用者標識符對應至特定 URL,或取得租使用者的其他資訊。 若要使用此方法,請使用 send-request 原則。
這種方法可能會增加請求的延遲。 若要減輕此影響,最好使用快取來減少對外部 API 的呼叫數目。 您可以使用 cache-store-value 和 cache-lookup-value 原則來實施快取策略。 請務必在後端查閱受到影響的每次新增、移除或移動租戶後,使快取失效。
命名值
API 管理支援具名值,這些是您可以在整個政策中使用的自訂配置設定。 例如,您可以使用具名值來儲存租使用者的後端URL,然後在原則內的數個位置重複使用相同的值。 如果您需要更新 URL,您可以在單一位置更新它。
警告
在多租使用者方案中,當您設定具名值的名稱時,請務必小心。 如果這些設定在租用戶之間有所不同,請務必在名稱中包含租用戶標識符。 例如,您可以在確認tenantId-key:value
適合要求之後,使用類似tenantId
的模式。
包含識別碼,以降低當您處理其他租使用者的請求時,意外參考或被引導參考另一個租使用者值的可能性。
驗證傳入要求
對 API 管理 閘道提出的 API 要求通常需要經過驗證。 API 管理系統提供數種方法來驗證進入閘道的請求,包括 OAuth 2.0 和客戶端憑證。 請考慮您應該支持的認證類型,以及應驗證認證的位置。 例如,請考慮驗證應該發生在 API 管理、後端應用程式中,或兩個位置。
如需詳細資訊,請參閱 Azure API 管理中的 API 驗證和授權。
注意
如果您使用訂用帳戶密鑰或 API 金鑰,最好也使用另一個驗證方法。
單靠訂用帳戶密鑰不是強式驗證形式,但對於其他案例很有用,例如追蹤個別租使用者的 API 使用量。
路由至租戶特定的後端
當您使用 API 管理服務作為共用元件時,您可能需要將收到的 API 請求路由到不同的租戶專屬後端。 這些後端可能位於不同的部署戳記中,或可能是單一戳記內的不同應用程式。 若要自定義原則定義中的路由,請使用 set-backend-service 原則。 您必須指定要求應該重新導向至的新基底 URL。
快取回應或其他數據
API 管理 具有功能強大的快取功能,可用來快取整個 HTTP 回應或任何其他數據。 例如,如果您使用自訂邏輯,或者從外部服務查詢映射,則可以使用租戶映射的快取。
使用 cache-store-value 和 cache-lookup-value 策略來實作快取方法。
警告
在多租戶解決方案中,當您設定快取索引鍵時,請務必小心。 如果快取的數據在租用戶之間可能會有所不同,請確定您在快取密鑰中包含租使用者識別碼。
包含標識符,以降低處理另一個租使用者的請求時不小心被操控而引用到他人租使用者值的機會。
自訂網域
使用 API 管理服務為 API 閘道和開發人員入口網站設定您自己的自訂網域。 在某些層中,您可以設定萬用域名或多個完整域名(FQDN)。
您也可以將 API 管理與 Azure Front Door 等服務一起使用。 在這類設定中,Azure Front Door 經常處理自訂網域和傳輸層安全性(TLS)憑證,並使用單一網域名稱與 API 管理通訊。 如果來自用戶端的原始 URL 包含您需要傳送至 API 管理服務實例的租戶資訊以供日後處理,請考慮使用X-Forwarded-Host
要求標頭,或使用Azure Front Door規則將資訊作為HTTP標頭傳遞。
速率限制
在多租戶方案中套用配額或速率限制是很常見的。 速率限制可協助您減輕 嘈雜的鄰近問題。 您也可以使用速率限制來強制執行服務品質,並區分不同的定價層。
使用 API 管理服務來執行租戶特定的速率限制。 如果您使用特定租戶的訂用帳戶,請考慮使用 配額 原則來設定每個訂用帳戶的配額限制。 或者,請考慮使用 quota-by-key 原則,通過使用其他任何速率限制鍵來強制執行配額,例如從請求 URL 或 JWT 取得的租用戶識別碼。
創造營收
API 管理檔提供廣泛指引,教導如何讓 API 獲利,包括範例實作。 獲利方法結合了許多 API 管理 功能,讓開發人員可以根據不同的使用模式發佈 API、管理訂用帳戶和收費。
產能管理
API 管理實例支援一定數量的效能容量,代表可供要求處理的資源。 當您使用複雜原則或將更多 API 部署到實例時,您會耗用更多容量。 您可以透過數種方式來管理實例的容量,例如購買更多單位。 您也可以動態調整實例的容量。
某些多租用戶實例可能會耗用比單一租用戶實例更多的容量,例如,如果您使用許多原則將要求路由傳送至不同的租使用者後端。 請仔細考慮容量規劃,如果您看到使用量增加,請計劃擴展實例的容量。 您也應該測試解決方案的效能,以事先瞭解您的容量需求。
如需有關調整 Azure API 管理規模的詳細資訊,請參閱升級和調整 Azure API 管理實例。
多區域部署
API管理支援多區域部署功能,這表示您可以在多個 Azure 區域中部署單一邏輯的 API 管理資源,而不需要將其設定複製到不同的資源中。 當您在全球發佈或複製您的解決方案時,這項功能特別有用。 您可以有效地跨多個區域部署一組 API 管理 實例,以允許低延遲要求處理,並將其管理為單一邏輯實例。
不過,如果您需要完全隔離 API 管理 實例,您也可以選擇將獨立的 API 管理 資源部署到不同的區域。 此方法會分隔每個 API 管理 實例的管理平面。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- John Downs |首席軟體工程師
- 丹尼爾·斯科特-倫斯福德 | 合作夥伴技術策略專家,全球合作夥伴方案
其他參與者:
- 阿森·弗拉基米爾斯基 | 首席客戶工程師
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。
下一步
檢閱用於多租用戶解決方案中的整合架構策略。