架構
Cloud Run 在 Borg 上執行,與 Google 每週部署數十億個容器的環境相同,託管全球部分最大型的網站,包括 Gmail 和 YouTube。Cloud Run 元件共用相同的基礎架構,因此建構時採用與其他 Google 服務相同的安全性標準。
如要進一步瞭解我們的安全性做法,請參閱 Google 安全性總覽白皮書。
Cloud Run 架構包含許多不同的基礎架構元件。下圖顯示這些元件如何回應對服務的要求和 Cloud Run Admin API 呼叫:
服務要求
當要求透過自訂網域或直接傳送至 run.app 網址,傳送至 Cloud Run 服務時,要求會由下列元件處理:
- Google Front End (GFE):Google 全球基礎架構服務,會在您向
run.app網址提出要求時,終止 TLS 連線並套用 DoS 攻擊防護措施。Cloud Run 是區域性服務,因此透過run.app網址存取要求時,GFE 會透過適當區域中的加密通道,將要求轉送至 Cloud Run。 - Google Cloud 負載平衡器:設定 Cloud Load Balancing 來處理自訂網域時,會包含上述 GFE 功能。您也可以設定 Google Cloud負載平衡器,執行流量管理和存取控管等其他功能。
- HTTP Proxy:可用區元件,可將傳入的 HTTP 要求負載平衡至沙箱應用程式的執行個體。
- 排程器:選取應用程式伺服器,託管沙箱應用程式的執行個體。
- 應用程式伺服器:可用區和多租戶運算節點,可建立及管理沙箱,用於執行各應用程式容器的執行個體。
- 沙箱:將使用者程式碼與系統和其他客戶隔離。詳情請參閱下方的「運算安全性」一節。
- 儲存空間:為從支援的 Container Registry匯入的容器映像檔,提供檔案伺服器介面。
- 中繼資料伺服器:提供沙箱專屬憑證和中繼資料。
- 傳出網路:管理沙箱發出的傳出流量。
Cloud Run Admin API 呼叫
向 Cloud Run Admin API 發出要求時,要求會由下列元件處理:
- Google Front End (GFE):Google 全球基礎架構服務,可終止 TLS 連線並套用 DoS 攻擊防護措施。
- 控制層:驗證應用程式設定,並寫入儲存空間。
- 設定儲存空間:將應用程式設定儲存在 Spanner 和 Bigtable 中,供其他元件 (例如應用程式伺服器、排程器和網路元素) 存取。
運算安全性
執行個體是指執行已設定容器的單位。部署單一容器映像檔時,每個執行個體都會執行單一容器。部署多個容器映像檔 (sidecar) 時,每個執行個體都會包含一組容器。
每個 Cloud Run 執行個體都受到虛擬機器監視器 (VMM) 強制執行的邊界保護 (沙箱化),與其他執行個體隔離。雖然我們確實提供一定程度的容器邊界強制執行,但不如容器周圍的執行個體邊界強大。
執行環境
Cloud Run 元件在 Google 的容器管理系統 Borg 上執行。Cloud Run 提供兩種執行環境:
第一代:這個選項以 gVisor 容器安全平台為基礎,程式碼集較小,因此攻擊面也較小。每項變更都會經過安全性審查,且大多數變更都是以記憶體安全的方式編寫。使用安全運算模式 (seccomp) 系統呼叫篩選功能,可進一步強化安全性。
第二代:這個選項以 Linux 微型 VM 為基礎,可為自訂工作負載提供更高的相容性和效能。此外,我們也使用 seccomp 系統呼叫篩選和 Sandbox2 Linux 命名空間,進一步強化安全性。
這兩種執行環境都使用兩層沙箱,包括相當於個別 VM (x86 虛擬化) 的硬體支援層,以及軟體核心層,如下圖所示:
如果服務使用第三方基礎架構來保護容器,請使用第二代執行環境。
Cloud Run Threat Detection
如要持續監控 Cloud Run 資源狀態,偵測常見的執行階段攻擊 (例如可疑的二進位檔或惡意程式碼),請使用 Cloud Run Threat Detection。
資料加密和儲存
Cloud Run 執行個體為無狀態。終止執行個體會捨棄其狀態。因此,所有新執行個體都會從頭開始。
如果您有具狀態資料,可以透過下列方式管理資料:
- 將有狀態資料儲存在外部儲存空間服務,例如 Cloud SQL 或 Memorystore。
- 與 Secret Manager 整合,安全儲存 API 金鑰和密碼等機密資料。
此外,Cloud Run 還與許多其他Google Cloud 系統整合,可透過下列方式管理及存取資料:
- 服務設定資料會儲存在 Spanner 和 Bigtable。
- 監控和記錄資料會傳送至 Google Cloud Observability。
- 容器映像檔會從支援的 Container Registry匯入,並可選擇使用客戶自行管理的加密金鑰 (CMEK) 加密。
在 Google Cloud中,所有靜態資料都會加密。
Cloud Run 符合 Google Cloud全體適用的資料保護和透明度計畫,包括資料存取透明化控管機制和資料落地。
網路安全
Cloud Run 和所有其他 Google Cloud 服務都會加密所有傳輸中的流量。您可以在 Cloud Run 服務或工作中加入輸出和輸入控管機制,多增加一層限制。組織管理員也可以設定組織政策,強制執行輸出和輸入設定。
輸出 (傳出) 流量
從 Cloud Run 輸出的流量會視為傳輸層 4 (TCP 和 UDP)。
根據預設,輸出流量會透過下列其中一個路徑離開 Cloud Run:
- 目標目的地位於虛擬私有雲網路:流量會使用直連虛擬私有雲輸出或無伺服器 VPC 存取連接器,傳輸至專案中的虛擬私有雲網路或 Shared VPC 網路。連接器是直接位於虛擬私有雲網路上的區域性資源。
- 目標目的地不在虛擬私有雲網路中:流量會直接轉送至 Google 網路或公開網際網路中的目標目的地。
控管輸出
如要進一步控管輸出流量,請使用虛擬私有雲輸出設定,透過直連虛擬私有雲輸出或連接器,將所有流量轉送至虛擬私有雲網路。
流量進入虛擬私有雲網路後,您可以使用虛擬私有雲工具管理流量,例如:
組織管理員也可以設定允許的虛擬私有雲輸出設定 (Cloud Run) 清單限制,強制執行輸出設定。
輸入 (傳入) 流量
與輸出流量不同,Cloud Run 的輸入流量位於應用程式層 7 (HTTP)。
Cloud Run 接受來自下列來源的輸入流量:
公開網際網路:要求會直接從公開來源轉送至 Cloud Run 服務,並可選擇透過外部 HTTP(S) 負載平衡器轉送流量。
虛擬私有雲網路:您可以使用Private Google Access、Private Service Connect 或內部應用程式負載平衡器,將虛擬私有雲網路的流量轉送至 Cloud Run 服務。這類流量一律會留在 Google 網路中。
Google Cloud 服務:流量會直接從其他 Google Cloud 服務 (例如 BigQuery,甚至是 Cloud Run 本身) 傳送至 Cloud Run。在某些情況下,您也可以設定這些服務,透過虛擬私有雲網路轉送流量。這類流量一律會保留在 Google 網路中。
Cloud Run 的網路安全模型包含下列輸入流量屬性:
- 將流量導向預設
run.app網址:run.app網址一律需要 HTTPS,流量才能進入 Cloud Run。Google 的前端服務基礎架構會終止 TLS,然後透過加密通道將流量轉送至 Cloud Run 和容器。您可以停用預設網址。 - 傳送至與 Google Cloud 負載平衡器相關聯自訂網域的流量: 如果是 HTTPS 流量, Google Cloud 內部和外部負載平衡器會終止 TLS,並透過加密通道將流量轉送至 Cloud Run 和容器。 Google Cloud 負載平衡器也可讓您套用其他安全防護功能,例如 IAP、Cloud Armor 和 SSL 政策。
如要進一步瞭解如何設定傳送至 Cloud Run 的虛擬私有雲網路流量,請參閱「接收來自虛擬私有雲網路的要求」。
控管輸入
Cloud Run 輸入控管會管理進入 Cloud Run 的流量,確保流量僅來自受信任的來源。
如果 Cloud Run 服務僅提供內部用戶端使用,您可以設定「內部」設定,只允許下列內部來源的流量進入 Cloud Run:
- 專案或 VPC Service Controls 範圍中的虛擬私有雲網路,包括透過虛擬私有雲網路轉送所有流量的 Cloud Run 服務。
- Cloud Run 服務附加的 Shared VPC 虛擬私有雲網路。
- 專案或 VPC Service Controls 範圍內的某些 Google Cloud 服務,例如 BigQuery。
- 來自地端部署用戶端的流量,會經過虛擬私有雲網路到達 Cloud Run。
如果您使用的是外部或內部負載平衡器,可以停用預設 run.app 網址。
組織管理員也可以設定組織政策,強制執行輸入設定。
如要進一步瞭解如何控管輸入,請參閱「限制 Cloud Run 的輸入」。
存取控管
存取控管機制可用來限制哪些使用者可以存取 Cloud Run 服務和工作。
誰可以管理服務或工作
Cloud Run 會使用 IAM 授權使用者和服務帳戶,控管 Cloud Run 服務或工作的管理權限。
服務或工作可存取的內容
如要控管 Cloud Run 工作負載可透過網路連線的目標,您可以強制所有流量通過虛擬私有雲網路,並套用虛擬私有雲防火牆規則,如先前「網路安全」一節所述。
如果使用直接虛擬私有雲輸出,可以將網路標記附加至 Cloud Run 資源,並在防火牆規則中參照網路標記。如果您使用無伺服器 VPC 存取,可以對連接器執行個體套用防火牆規則。
使用 IAM 控管 Cloud Run 服務或工作可存取的資源。服務和工作預設會使用 Compute Engine 預設服務帳戶。如果是機密工作負載,請使用專屬服務帳戶,這樣就能只授予工作負載執行工作所需的權限。進一步瞭解如何使用個別服務身分管理專屬服務帳戶。如要瞭解 Cloud Run 如何提醒使用者建立專屬服務帳戶,請參閱「使用 Recommender 保護 Cloud Run 服務」。
誰可以叫用服務或執行工作
Cloud Run 提供多種選項,可控管叫用服務或執行工作的人員。
輸入控管
如要在網路層級管理 Cloud Run 服務的輸入,請參閱上一節的「控管輸入」。
Cloud Run 工作不會處理要求,因此執行工作時不會使用輸入控管。
服務的 IAM
使用 run.routes.invoke 權限,透過下列方式設定可存取 Cloud Run 服務的使用者:
將權限授予特定服務帳戶或群組,允許存取服務。所有要求都必須包含 HTTP 授權標頭,其中含有由 Google 簽署、用於其中一個授權服務帳戶的 OpenID Connect ID 權杖。
選取「允許公開存取」,停用 Cloud Run 叫用者 IAM 檢查,並允許未經驗證的存取。啟用 Cloud Run 叫用者 IAM 檢查後,Cloud Run 會對每項要求執行 IAM 檢查。
為確保只有貴組織成員可以叫用 Cloud Run 服務,組織管理員可以設定網域限定共用組織政策。組織管理員也可以選擇不使用特定 Cloud Run 服務。啟用網域限制共用功能後,請選取「Allow public access」(允許公開存取),建立公開網址。
進一步瞭解常見的驗證用途,以及 Cloud Run 如何透過 IAM 控管存取權。
為 Cloud Run 服務啟用 Identity-Aware Proxy
在 Cloud Run 啟用 IAP,將流量轉送至 IAP 進行驗證,保護傳送至 Cloud Run 服務的流量。您也可以在 Cloud Run 上搭配使用員工身分聯盟和 IAP。瞭解如何為 Cloud Run 設定 Identity-Aware Proxy。
服務的負載平衡器安全防護功能
如果您將 Cloud Run 服務設為Google Cloud 負載平衡器的後端,請使用下列方法保護這個路徑:
- 將輸入設定設為其中一個內部選項,即可封鎖從公開網際網路直接傳送至
run.app網址的流量。 - 停用預設
run.app網址。 - 您也可以選擇在 Google Cloud 負載平衡器上啟用安全防護功能,例如 Cloud Armor、IAP 和 SSL 政策。
IAM 工作應用
使用 run.jobs.run 權限,透過下列方式設定可執行 Cloud Run 工作的使用者:
將權限授予特定服務帳戶或群組,允許存取工作。如果工作是由其他服務 (例如 Cloud Scheduler) 觸發,則使用的服務帳戶必須具備該工作的
run.jobs.run權限。將權限授予已登入的使用者,以便從 Google Cloud控制台執行工作。如果工作是由其他服務 (例如 Cloud Scheduler) 觸發,則使用的服務帳戶或群組必須具備工作的
run.jobs.run權限。
為確保只有組織成員可以執行 Cloud Run 工作,組織管理員可以設定網域限制限制。組織管理員也可以選擇不採用特定 Cloud Run 工作。
VPC Service Controls
Cloud Run 服務可以納入 VPC Service Controls 範圍,以便使用 VPC Service Controls 控管存取權,並降低資料竊取風險。進一步瞭解如何使用 VPC Service Controls。
供應鏈安全性
Google Cloud 的 buildpack 代管基礎映像檔
使用 Google Cloud Buildpacks 從原始碼部署的服務,是使用 Google 提供的基本映像檔建構而成。Google 會維護這些基本映像檔,並每週提供例行修補程式。如果發生涉及重大安全漏洞的緊急情況,我們可以在幾小時內提供修補程式。
Cloud Run 內部供應鏈安全性
Cloud Run 在 Borg 上執行,因此會實作所有 Google 服務 (例如 Gmail 和 YouTube) 標準的供應鏈安全性。如要進一步瞭解 Google 內部供應鏈做法,請參閱 BeyondProd 和 Borg 適用的二進位授權白皮書。
二進位授權
Cloud Run 內建二進位授權支援,確保只有受信任的容器映像檔會部署至 Cloud Run。詳情請參閱「Cloud Run 設定總覽」。
軟體供應鏈安全性洞察
雲端管理員可以直接在 Google Cloud控制台的面板中,查看已部署容器供應鏈的安全性資訊。詳情請參閱「查看軟體供應鏈安全性洞察」。
執行環境安全性
Cloud Run 支援自動更新相容容器的基本映像檔。只要在容器基礎映像檔上執行重定基準,即可套用安全性更新,且服務不會中斷。
從來源部署的服務 (包括 Cloud Run) 會使用 Google Cloud 的 buildpack,並與自動安全性更新相容。
啟用自動安全性更新的服務,會使用 Google 提供的基礎映像檔部署。Google 會維護這些基礎映像檔,並在經過一段時間的穩定性測試後,提供例行修補程式。如果發生涉及重大安全漏洞的緊急情況,我們可以在幾小時內提供修補程式。
如要進一步瞭解執行環境安全性更新,請參閱如何設定安全性更新。
後續步驟
- 如需設定網路的端對端逐步操作說明,請參閱 Cloud Run 無伺服器網路指南。
- 瞭解如何使用 Cloud Run Threat Detection 偵測威脅。