Cloud Run:適用於執行不受信任程式碼的多租戶平台

本頁提供建立多租戶架構的最佳做法,以便使用 Cloud Run 託管不受信任的程式碼。以 Google Cloud 客戶身分來說,「租戶」是指您自己的客戶,「不受信任的程式碼」是指這些租戶提供的程式碼,會在您的平台上執行。

用途

這類架構的用途包括:

  • 應用程式代管平台:您提供平台,供客戶部署程式碼。例如網頁代管平台 (客戶提供網頁伺服器),或函式即服務平台 (客戶提供函式)。
  • 代理程式代管平台:客戶使用 SDK 建構 AI 代理程式,您的平台則在背景執行這些代理程式。
  • 微調模型平台:您可以根據每位客戶的需求自訂 AI 模型。平台會視需要使用 GPU 執行這些模型。
  • 使用者定義函式:您的軟體可讓客戶使用程式碼定義自訂邏輯。舉例來說,您提供分析引擎,並想允許客戶編寫自訂函式;或是您提供 API 閘道,並想允許客戶根據自己的自訂邏輯篩選或變更要求。
  • 軟體即服務 (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 值區),您可以將專案做為安全邊界。
  • 限制較少
    • 特定專案的資源數量有限。舉例來說,Cloud Run 專案在每個區域只能建立 1,000 項服務。服務帳戶和其他相關資源的數量也有類似限制。
    • 專案數量本身就是配額,可以增加, Google Cloud 機構的專案數量沒有限制。每個帳單帳戶的專案數量軟性上限為 10 萬個,如要提高上限,請與 Google 聯絡。貴機構也可以建立多個帳單帳戶,並將這些帳戶歸入「帳戶群組」(目前為私人搶先體驗版)。
  • 簡化監控和管理作業
    • 為每個房客使用一個專案,可簡化資料刪除程序,因為刪除房客資料等同於刪除對應專案。
    • Google Cloud 監控和記錄功能可跨專案運作,方便您監控整個機群。
    • 專案層級配額可讓您為特定租戶設定 Cloud Run 資源用量上限,進而根據自己的價格層級調整限制。
    • 自訂機構政策可讓您對資料夾的所有專案套用特定限制,例如可用區域或 CPU/記憶體分配上限。

建立專案及初始化 API 和資源時可能會發生延遲,因此 Google 建議您使用預先建立的專案集區,並在需要時指派給租戶。 Google Cloud

每個 Google Cloud 專案有多個租戶 (不建議)

您可以在同一個 Google Cloud專案中代管多個租戶,但 Google 不建議採用這種架構。

許多 Google Cloud 服務都設有專案資源限制。舉例來說,Cloud Run 服務在專案中每個區域的數量上限為 1,000 個,且無法調整。因此,每個專案代管多個租戶時,您仍須管理 Google Cloud 專案機群,這會整體增加租戶管理複雜度。從安全性的角度來看,專案是設計為安全界線,在同一專案中代管兩個不同的租戶時,您必須更加謹慎地處理安全性問題。Google Cloud 舉例來說,您可以確保使用專屬服務帳戶和細部權限。

要求路徑和自訂網域

如要向終端使用者公開租戶的 Cloud Run 服務,請新增自己的網域並使用自己的路由邏輯。舉例來說,將子網域對應至代管租戶服務的 Google Cloud 專案。

您可以實作自訂路由服務,但 Google 建議使用全域外部應用程式負載平衡器搭配 Service Extensions,以進行路由邏輯。服務擴充功能可以實作外掛程式 (邏輯會與要求處理作業內嵌執行),也可以實作呼叫 (路由邏輯會委派給個別的 Cloud Run 服務,該服務可以呼叫Google Cloud的其中一個可擴充多區域資料庫,例如 Spanner)。

使用應用程式負載平衡器時,您也可以運用 Cloud CDN 新增快取層,並使用 Cloud Armor 為平台提供額外的分散式阻斷服務 (DDoS) 攻擊防護。

聲譽和濫用

任何允許執行不受信任程式碼的代管平台,都可能遭到濫用。

建議您為提供的每個信譽等級使用不同的 Cloud Billing 帳戶。舉例來說,免費層級的租戶不應附加至與高付費客戶相同的帳單帳戶。Google 會根據信譽等級,考量這些帳單帳戶。

如「整理專案 Google Cloud 」一文所述,除了依帳單帳戶區分專案,您也應使用資料夾整理專案。Google 可協助您設定資料夾層級配額,確保資料夾內的所有資源不會超過設定上限,讓您更有效管理平台的費用。

根據Google Cloud 服務條款,Google 預設會自動移除濫用工作負載。此外,Google 也會在 Cloud Logging 中記錄濫用行為偵測事件,方便您採取行動。