安全性設計總覽

瞭解 Cloud Run 如何實作安全性最佳做法來保護資料,並探索如何使用這些功能來滿足安全性需求。

架構

Cloud Run 會在 Borg 上執行,在 Google 每週部署數十億個容器的相同環境中,託管 Gmail 和 YouTube 等全球最大網站。由於 Cloud Run 元件共用相同的基礎架構,因此會根據與其他 Google 服務相同的安全標準建構。

如要進一步瞭解我們的安全性做法,請參閱 Google 安全性總覽白皮書。

Cloud Run 架構包含許多不同的基礎架構元件。下圖顯示這些元件如何回應對服務的請求Cloud Run 管理員 API 呼叫

Cloud Run 基礎架構元件圖表
圖 1. Cloud Run 基礎架構元件圖表。

對服務提出的要求

當您透過自訂網域或直接傳送至 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 要求。
  • Scheduler:選取應用程式伺服器,以便代管沙箱應用程式的執行個體。
  • 應用程式伺服器:區域性和多租戶運算節點,可建立及管理用於執行各個應用程式容器執行個體的沙箱。
  • 沙箱:將使用者程式碼與系統和其他客戶隔離開來。詳情請參閱下方的「運算安全性」一節。
  • 儲存空間:為從支援的容器登錄項匯入的容器映像檔,公開檔案伺服器介面。
  • 中繼資料伺服器:提供沙箱專屬的憑證和中繼資料。
  • 傳出網路:管理沙箱啟動的傳出流量。

Cloud Run Admin API 呼叫

Cloud Run Admin API 提出要求時,要求會由下列元件處理:

  • Google Front End (GFE):Google 全球基礎架構服務,可終止 TLS 連線並套用防範阻斷服務攻擊的保護措施。
  • 控制層:驗證應用程式設定,並將設定寫入儲存空間。
  • 設定儲存空間:將應用程式設定儲存在 SpannerBigtable 中,供其他元件 (例如應用程式伺服器、排程器和網路元素) 存取。

運算安全性

Cloud Run 元件會在 Google 的容器管理系統 Borg 上執行。Cloud Run 提供兩種執行環境供容器使用:

  • 第一代:這個選項以 gVisor 容器安全平台為基礎,因此程式碼庫較小,可減少攻擊面。每項變更都會經過安全性審查,且大多數變更都會以記憶體安全的方式編寫。使用安全運算模式 (seccomp) 系統呼叫篩選功能,可進一步強化安全性。

  • 第二代:這個選項以 Linux microVM 為基礎,可為自訂工作負載提供更高的相容性和效能。您可以使用 seccomp 系統呼叫篩選器和 Sandbox2 Linux 命名空間,進一步強化安全性。

這兩個執行環境都使用兩層沙箱,其中硬體支援層相當於個別 VM (x86 虛擬化),而軟體核心層則如以下圖表所示:

在兩個執行環境中,使用者容器會透過兩層沙箱與其他工作負載隔離。
圖 2. 在兩個執行環境中,使用者容器會透過兩層沙箱與其他工作負載隔離。

如果您的服務會使用第三方基礎架構來保護容器,請使用第二代執行環境。

資料加密和儲存

Cloud Run 執行個體為無狀態。終止執行個體會捨棄其狀態。因此,所有新的例項都是從全新狀態開始。

如果您有具狀態的資料,可以透過下列方式管理資料:

此外,Cloud Run 還可整合許多其他Google Cloud 系統,以以下方式管理及存取您的資料:

在 Across Google Cloud中,所有資料都會加密

Cloud Run 遵循 Google Cloud的資料保護和透明度相關計畫,包括資料存取透明化資料落地

網路安全

Cloud Run 和所有其他 Google Cloud 服務都會加密所有傳輸中的流量。您可以將傳出和傳入控管機制整合至 Cloud Run 服務或工作,以便再加上一層限制。機構管理員也可以設定機構政策,強制執行輸入和輸出。

輸出流量

從 Cloud Run 離開的輸出流量會視為傳輸層 4 (TCP 和 UDP)。

根據預設,輸出流量會在退出 Cloud Run 時採用下列路徑之一:

  • 目標目的地位於虛擬私有雲網路:流量會使用直接虛擬私有雲出口無伺服器虛擬私有雲存取連接器,前往專案中的虛擬私有雲網路或共用虛擬私有雲網路。連接器是直接位於 VPC 網路上的區域性資源。
  • 目標目的地不在虛擬私人雲端網路中:流量會直接轉送至 Google 網路或公用網際網路中的目標目的地。
Cloud Run 基礎架構元件圖表
圖 3. 輸出流量可透過連接器轉送至虛擬私有雲網路。也可以直接前往虛擬私有雲或非虛擬私有雲網路 (預先發布版)。

控管輸出

如要進一步控制輸出流量,請使用虛擬私有雲輸出設定,透過直接虛擬私有雲輸出或連接器,將所有流量路由至虛擬私有雲網路。

一旦在虛擬私有雲網路中,您就可以使用 VPC 工具管理流量,例如:

機構管理員也可以設定允許的虛擬私有雲輸出設定 (Cloud Run) 清單限制,強制執行輸出。

輸入 (傳入) 流量

與輸出流量不同,Cloud Run 的輸入流量位於應用程式第 7 層 (HTTP)。

Cloud Run 會接受來自下列來源的傳入流量:

  • 公開網際網路:要求會直接從公開來源路由至 Cloud Run 服務,並可選擇透過外部 HTTP(S) 負載平衡器轉送流量。

  • 虛擬私有雲網路:您可以使用私人 Google 存取權私人服務連線內部應用程式負載平衡器,將流量從虛擬私有雲網路路由至 Cloud Run 服務。這類流量一律會留在 Google 的網路內。

  • Google Cloud 服務:流量直接從其他 Google Cloud 服務 (例如 BigQuery,甚至是 Cloud Run 本身) 傳送至 Cloud Run。在某些情況下,您也可以將這些服務設為透過虛擬私有雲網路傳送。這類流量一律會留在 Google 的網路內。

Cloud Run 基礎架構元件圖表
圖 4. 將第 7 層 HTTP 網路輸入 (入站) 流量傳送至 Cloud Run。

Cloud Run 的網路安全性模型包含下列入站流量屬性:

  • 將流量導向預設 run.app 網址:run.app 網址一律需要 HTTPS,才能讓流量進入 Cloud Run。Google 的前端服務基礎架構會終止 TLS,然後透過加密管道將流量轉送至 Cloud Run 和容器。您可以停用預設網址
  • 與 Google Cloud 負載平衡器相關聯的自訂網域流量: 針對 HTTPS 流量, Google Cloud 內部和外部負載平衡器會終止 TLS,並透過加密通道將流量轉送至 Cloud Run 和您的容器。 Google Cloud 負載平衡器還可讓您套用其他安全性功能,例如 IAPGoogle Cloud ArmorSSL 政策

如要進一步瞭解如何設定 Cloud Run 的 VPC 網路流量,請參閱「接收來自 VPC 網路的要求」。

控管輸入

Cloud Run 輸入控制項可管理進入 Cloud Run 的流量,確保流量只來自可信來源。

如果 Cloud Run 服務只服務內部用戶端,您可以設定「內部」設定,讓只有來自下列內部來源的流量才能進入 Cloud Run:

  • 專案或 VPC Service Controls 範圍內的虛擬私有雲網路,包括將所有流量重新導向至虛擬私有雲網路的 Cloud Run 服務。
  • Cloud Run 服務連結的共用虛擬私有雲網路。
  • 部分 Google Cloud 服務 (例如 BigQuery) 位於專案或 VPC Service Controls 範圍內。
  • 來自內部部署用戶端的流量,會經過您的虛擬私有雲網路,才能到達 Cloud Run。

如果您使用的是外部或內部負載平衡器,可以停用預設 run.app 網址

機構管理員也可以設定機構政策,強制執行入站規則。

如要進一步瞭解如何控管輸入,請參閱「限制 Cloud Run 的輸入」。

存取權控管

存取控制可用於限制哪些人可以存取 Cloud Run 服務和工作。

誰可以管理您的服務或工作

如要控管 Cloud Run 服務或工作負責人,Cloud Run 會使用 IAM 授權使用者和服務帳戶。

服務或工作可存取的內容

如要控管 Cloud Run 工作負載可透過網路存取的資源,您可以強制所有流量都經由 VPC 網路,並套用 VPC 防火牆規則,如「網路安全性」一節所述。

如果您使用的是直接 VPC 出口,可以將網路標記附加至 Cloud Run 資源,並在防火牆規則中參照網路標記。如果您使用無伺服器虛擬私有雲存取,可以將防火牆規則套用至連接器執行個體。

使用 IAM 控管 Cloud Run 服務或工作可存取的資源。服務和工作會根據預設使用 Compute Engine 預設服務帳戶。針對機密工作負載,請使用專屬的服務帳戶,這樣您就能只授予工作負載執行工作所需的權限。進一步瞭解如何使用個別服務身分管理專屬服務帳戶。如要瞭解 Cloud Run 如何提醒使用者建立專屬服務帳戶,請參閱「使用推薦工具保護 Cloud Run 服務」。

誰可以叫用您的服務或執行工作

Cloud Run 提供多種不同的選項,可控管誰可以叫用您的服務或執行工作。

輸入控管

如要在網路層級管理 Cloud Run 服務的入站流量,請參閱上一節的「控管入站流量」一節。

Cloud Run 工作不會提供要求,因此在執行工作時不會使用入口控管。

服務的 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.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 內部供應鍊做法,請參閱 BeyondProdBorg 適用的二進位授權 白皮書。

二進位授權

Cloud Run 內建支援二進位授權,可確保系統只會在 Cloud Run 上部署可信任的容器映像檔。如需進一步瞭解,請參閱「設定 Cloud Run 總覽」。

軟體供應鏈安全性洞察

Cloud 管理員可以直接在 Google Cloud控制台的面板中,查看已部署容器的供應鍊安全資訊。如需瞭解詳情,請參閱「查看軟體供應鏈安全性洞察」。

執行環境安全性

Cloud Run 支援使用相容容器自動更新基本映像檔。在容器基本映像檔上執行重構作業,即可套用安全性更新,且不會造成服務停機。

從來源部署的服務 (包括 Cloud Run) 會使用 Google Cloud 的 Buildpack,並支援自動安全性更新。

啟用自動安全性更新的服務會使用 Google 提供的基本映像檔部署。Google 會維護這些基本映像檔,並在經過一段時間的穩定性測試後提供例行性修補程式。在涉及重大安全漏洞的緊急情況下,我們可以在幾小時內提供修補程式。

如要進一步瞭解執行環境安全性更新,請參閱如何設定安全性更新

後續步驟

如需有關如何設定網路的完整逐步操作說明,請參閱 Cloud Run 的無伺服器網路指南