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