本頁面提供最佳做法,說明如何建立多用戶群架構,以便透過 Cloud Run 託管不受信任的程式碼。對 Google Cloud 客戶而言,「租戶」是指您自己的客戶,「不受信任的程式碼」則是指這些租戶提供、要在您平台上執行的程式碼。
用途
這類架構的用途包括:
- App Hosting 平台:您提供平台,讓客戶部署程式碼。例如網站代管平台 (客戶提供網路伺服器) 或函式即服務平台 (客戶提供函式)。
- 代理託管平台:客戶使用 SDK 建構 AI 代理,您的平台則在背景執行這些代理。
- 微調模型平台:您可為每位客戶自訂 AI 模型。 您的平台會利用 GPU 視需求執行這些模型。
- 使用者定義函式:軟體允許客戶使用程式碼定義自訂邏輯。舉例來說,您提供分析引擎,並希望允許客戶編寫自訂函式,或者您提供 API Gateway,並希望允許客戶根據自己的自訂邏輯篩選或變更要求。
- 軟體式服務 (SaaS) 擴充性:您可能提供 SaaS,並希望允許客戶使用擴充功能擴充其功能。這些擴充功能可能由客戶或合作夥伴編寫。
Google Cloud 客戶已成功在正式環境中,將 Cloud Run 用於這些用途。
多租戶平台的挑戰
建立這類架構時,通常會面臨下列挑戰:
- 安全性:無法掃描或清理提供的程式碼。不可信任的程式碼可能包含惡意動作或有安全漏洞的依附元件。如果未妥善隔離,不受信任的程式碼可能會存取其他租戶的機密資料。單純將程式碼封裝在容器中,並不足以構成強大的安全邊界。此外,也必須套用最小權限原則,限制程式碼可執行的操作。
- 成本效益:如果每個租戶都會產生平台固定成本,這類架構的費用可能會很高。
- 租戶管理:管理數十萬個租戶可能相當困難,尤其是在刪除資料時。
Cloud Run 的優點
採用 Cloud Run 架構的解決方案可解決常見難題,並帶來許多好處,例如安全性、成本效益和租戶管理。
安全性
Cloud Run 提供與此架構相關的現成安全防護功能:
- 運算隔離:Cloud Run 可確保容器執行個體之間嚴格隔離,無論是相同服務,還是不同專案的不同服務,皆是如此。如要進一步瞭解容器安全性和執行環境,請參閱「安全性設計總覽」。
- 安全性更新:您可以啟用基本映像檔的自動安全性更新,讓已部署工作負載的作業系統和執行階段保持最新狀態,並套用修補程式,而不必大規模重新部署。
- 網路隔離:Cloud Run 不僅會對容器進行沙箱處理,還會提供多租戶網路堆疊。
- 服務身分:Cloud Run 工作負載可設為具有受限制權限的專屬身分。
具成本效益
- 將資源調度率降至零,並按用量計費:Cloud Run 執行個體在閒置時會自動將資源調度率降至零,確保託管的工作負載只有在需要執行時才會產生費用。與採用「全天候運作」虛擬機器的架構相比,資源使用效率極高。
- 按要求計費:除了將資源調度率降至零,您還能享有更精細的計費模式,只在處理要求時收費,進一步提高成本效益。
- 隨選且快速啟動:縮減後,Cloud Run 服務可以快速擴充,因此部署應用程式的使用者幾乎不會察覺到延遲。
- 自動費用標籤:Cloud Run 回報的所有費用都會加上標籤,讓您自動歸因及追蹤租戶費用。
- 承諾使用合約可降低總費用:在帳單帳戶層級,您可以使用彈性承諾使用折扣,將任何基準 Cloud Run 用量的支出最佳化。
租戶管理
由於 Cloud Run 具備隨選特性,因此使用多個 Google Cloud 專案時,費用不會增加,可讓您按照「整理 Google Cloud 專案」一文所述的方式管理租戶。
多租戶平台的目標架構
以下是建議的架構概略說明:
整理 Google Cloud 專案
您必須設定 Google Cloud 組織、離線帳單,並與帳戶團隊聯絡,告知您是經銷商帳戶。Google Cloud 可能會與您合作,確保建立適當的溝通管道,以減少濫用行為。
您必須使用資料夾來整理 Google Cloud 專案,特別是,您必須將執行第一方程式碼的專案,與執行租戶不受信任程式碼的專案,放在不同的資料夾中。您需要自動化租戶新手上路流程,這樣建立租戶的專案和資源時,就不需要人工介入迴路。
Google 建議每個租戶使用一個 Google Cloud 專案。您也可以在同一個專案中託管多個租戶,但這會帶來額外的限制:
每個 Google Cloud 專案一個租戶 (建議)
在這個架構中,平台的每個租戶都託管在專屬的Google Cloud 專案中,這有許多好處:
- 更簡單的安全防護機制: Google Cloud 專案是其中所有資源的嚴格邊界。也就是說,如果租戶需要存取多個Google Cloud 資源 (例如多個 Cloud Run 服務、Cloud Storage bucket),您可以使用專案做為安全 perimeter。
- 限制較少:
- 特定專案中的資源數量有限。舉例來說,Cloud Run 僅允許在專案中,每個區域建立 1,000 項服務。服務帳戶和其他相關資源的數量也有類似限制。
- 專案數量本身就是一項配額,可以增加, Google Cloud 組織的專案數量沒有限制。每個帳單帳戶的專案數量軟性限制為 100,000 個,與 Google 洽談後可提高。貴組織也可以建立多個帳單帳戶,並將這些帳戶歸入「帳戶群組」(目前為不公開預先發布版)。
- 簡化監控和管理作業:
- 為每個租戶使用一個專案,可簡化資料刪除程序,刪除租戶的資料就等於刪除對應的專案。
- Google Cloud Monitoring 和 Logging 可跨專案運作,讓您監控整個機群。
- 專案層級配額可讓您限制特定租戶的 Cloud Run 資源使用率,並根據自己的定價級別調整限制。
- 您可以透過自訂組織政策,對資料夾的所有專案套用特定限制,例如可用區域或 CPU/記憶體配置上限。
建立 Google Cloud 專案並初始化 API 和資源時,可能會發生延遲,因此 Google 建議您使用預先建立的專案集區,並在需要時指派給租戶。
每項 Google Cloud 專案有多個租戶 (不建議)
您可以在同一個 Google Cloud專案中託管多個租戶,但 Google 不建議採用這種架構。
許多 Google Cloud 服務都有專案資源限制。舉例來說,Cloud Run 的限制是每項專案在每個區域最多只能有 1,000 項 Cloud Run 服務,這項限制無法調整。因此,每個專案託管多個租戶仍需要您管理 Google Cloud 專案群,這會增加租戶管理的複雜度。從安全性的角度來看,Google Cloud 專案是安全邊界,在同一個專案中託管兩個不同的租戶,需要更謹慎地處理安全性問題。例如,確保使用專屬服務帳戶和精細權限。
部署至多個區域
為確保可靠性和擴充性,Google 建議將租戶部署作業分散到多個 Google Cloud 區域。每個租戶應用程式都會部署至單一區域,但您可以為不同租戶使用不同區域。系統可以隨機選取區域,也可以考量租戶的位置,盡可能縮短延遲時間。
要求轉送和自訂網域
如要向使用者公開租戶的 Cloud Run 服務,請新增自己的網域,並使用自己的轉送邏輯。例如,將子網域對應至託管租戶服務的 Google Cloud 專案。
您可以實作自訂轉送服務,但 Google 建議使用全域外部應用程式負載平衡器搭配 Service Extensions 處理轉送邏輯。Service Extensions 可做為外掛程式 (邏輯會與要求處理作業一併執行) 或呼叫 (轉送邏輯會委派給獨立的 Cloud Run 服務,該服務可呼叫Google Cloud的可擴充多區域資料庫,例如 Spanner)。
使用應用程式負載平衡器,還能透過 Cloud CDN 新增快取層,並使用 Cloud Armor 為平台提供額外的分散式阻斷服務 (DDoS) 攻擊防護。
信譽和濫用
任何允許執行不受信任程式碼的代管平台,都可能遭到濫用。
建議您為提供的每個信譽層級使用不同的 Cloud Billing 帳戶。舉例來說,免費方案租戶不應與高付費客戶連結至同一個帳單帳戶。Google 可能會將這些帳單帳戶視為具有不同的信譽等級。
如「整理 Google Cloud 專案」一文所述,除了依帳單帳戶區分專案外,您也應使用資料夾整理專案。Google 可協助您設定資料夾層級配額,確保資料夾內的所有資源都不會超過設定的上限,讓您更妥善管理平台成本。
根據Google Cloud 服務條款,Google 預設會自動移除濫用工作負載,並在 Cloud Logging 記錄濫用偵測事件,方便您採取行動。