控制層安全性


本頁說明 Google Kubernetes Engine (GKE) 如何保護叢集控制層元件。瞭解 GKE 內建的安全防護功能,包括強化安全性的作業系統、強大的架構和隔離機制、安全的控制層存取權、etcd 或 Spanner 型叢集狀態資料庫的安全防護、憑證授權單位和叢集信任,以及安全漏洞和修補程式管理。

本頁面適用於安全性專家,可協助您瞭解 Google 如何管理 GKE 控制層元件,以及採取的安全措施,以便有效評估風險並確保 GKE 部署作業的安全性。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud

共同責任模式下,Google 會為您管理 GKE 控制層元件。控制層包括 Kubernetes API 伺服器、Kubernetes API 物件儲存空間和其他控制器。儘管您可以依自己的需求設定某些選項,但 Google 會負責保護控制層。您則負責保護節點、容器和 Pod。

強化的作業系統

GKE 控制層元件是在 Container-Optimized OS 上執行,這是一個由 Google 設計的安全強化作業系統。如要詳細瞭解 Container-Optimized OS 內建的安全功能,請參閱 Container-Optimized OS 安全性總覽

架構與隔離

在 GKE 叢集中,控制層元件在 Google 代管的專案中,並在 Google 所擁有的 Compute Engine 執行個體上執行。每個執行個體僅為一個叢集執行這些元件。

如要進一步瞭解叢集元件如何相互驗證,請參閱「叢集信任」。

控制層存取專案的權限

GKE 會使用名為 Kubernetes Engine 服務代理程式的服務代理程式,代表您啟動叢集資源,例如節點、磁碟和負載平衡器。系統會自動將專案的 Kubernetes Engine 服務代理程式角色 (roles/container.serviceAgent) 授予服務帳戶。

Kubernetes Engine 服務代理程式的電子郵件地址如下:

service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com

這個電子郵件地址中的 PROJECT_NUMBER 是您的專案編號

對叢集的管理存取權限

Google Site Reliability Engineers 的 SSH 工作階段是透過 Google 的內部稽核基礎架構進行稽核紀錄,該架構可用於識別和安全性應變。詳情請請參閱 Google Security 白皮書中的管理存取權限

叢集狀態資料庫安全性

在 Google Cloud中,客戶內容預設會在檔案系統層級加密。這項加密作業包括託管 etcd 或 Spanner 型資料庫的基礎架構,該資料庫會儲存叢集中 Kubernetes API 物件的狀態。如要進一步瞭解叢集狀態資料庫,請參閱 GKE 叢集架構

叢集狀態資料庫會將叢集中每個 Kubernetes API 物件的設定儲存為鍵/值組合。GKE 會在控制平面 VM 上使用特定 TCP 連接埠,與叢集狀態資料庫進行下列類型的通訊:

  • etcd API 用戶端:GKE 會在每個控制層 VM 上提供 etcd API。控制層中的 etcd API 用戶端 (例如 Kubernetes API 伺服器) 會使用下列其中一個通訊埠:

    • 通訊埠 2379:如果 GKE 將叢集狀態儲存在每個控制層 VM 中執行的 etcd 資料庫執行個體,就會使用這個通訊埠。
    • 通訊埠 3379:如果 GKE 將叢集狀態儲存在與控制層不同的 Spanner 資料庫中,就會使用這個通訊埠。

    etcd API 用戶端使用的通訊埠會繫結至本機迴路網路介面,且只能從執行 Kubernetes API 伺服器的控制層 VM 存取。

  • etcd 資料庫執行個體:如果控制層 VM 執行 etcd 資料庫執行個體,每個 VM 上的 etcd API 伺服器會使用通訊埠 2380 彼此通訊。多個控制層 VM (例如區域叢集) 上的 etcd 資料庫執行個體之間,通訊埠 2380 的流量會透過雙向 TLS 加密。使用雙向 TLS 時,每個伺服器都必須向另一個伺服器證明自己的身分。

    如果叢集將叢集狀態儲存在 Spanner 資料庫中,就不會使用通訊埠 2380,因為資料庫不會在控制平面 VM 中執行。

憑證授權單位和叢集信任

每個叢集都有自己的根憑證授權單位 (CA)。這個 CA 的根金鑰是由內部 Google 服務管理,這個 CA 的根金鑰會分送到執行 Kubernetes API 伺服器的 VM 上的中繼資料。節點與 Kubernetes API 伺服器之間的通訊是受 TLS 保護。每個叢集也擁有其用於 etcd API 的 CA,以及用於 etcd 執行個體之間流量的 CA (如果叢集執行 etcd 資料庫執行個體)。詳情請參閱「叢集信任」。

安全漏洞和修補程式管理

GKE 會遵循 Google 標準以進行測試、合格鑑定,並逐步推行對控制層的變更。這將大幅降低控制層元件無法使用的風險。GKE 會遵循服務水準協議,該協議定義了可用性的許多層面。

GKE 控制層元件是由 Google 的網站可靠性工程師團隊進行管理,並與最新的安全性修補程式保持同步。這包括主機作業系統的修補程式,Kubernetes 元件以及在控制層 VM 上執行的容器。

GKE 會立即將新的核心、作業系統和 Kubernetes 等級的修正套用到控制層 VM。當這些包含已知安全漏洞的修補程式時,GKE 安全性公告中也提供了其他資訊。GKE 會使用 Artifact Analysis 掃描所有 Kubernetes 系統和 GKE 特定容器的安全漏洞,並持續對容器進行修補,從而使整個 Kubernetes 生態系統受益。

Google 工程師會參與尋找、修復和揭露 Kubernetes 安全漏洞。Google 也會透過 Google 服務漏洞獎勵計畫向外部安全研究人員付費,以尋找安全性漏洞。在某些情況下,(例如 2017 年 10 月的 Dnsmasq 安全漏洞) GKE 可在安全漏洞公開之前修補所有正在執行的叢集。

Google 所提供的安全性監控和設定功能

本主題將討論前述的安全功能,此安全性功能是由 Google 所管理。本節和接下來的章節將討論可以監控和設定的安全性功能。

  • 稽核記錄稽核記錄預設為啟用。這提供了對 Kubernetes API 伺服器進行呼叫的詳細記錄 (可在 Google Cloud Observability 中取得)。您可以在Google Cloud 控制台的記錄探索器中查看記錄項目。您也可以使用 BigQuery 檢視和分析這些記錄。
  • 控制層 VM 映像檔完整性:GKE 會將節點 VM 建立和啟動事件的詳細記錄新增至 Cloud Logging。此外,我們會在 GitHub 上發布與控制層和工作站節點機器映像檔對應的 SLSA VSA。您可以確認 VM 使用的 OS 映像檔具有對應的 VSA,並驗證每個控制層 VM 的啟動完整性。

    如要執行 VM 完整性驗證,請參閱「驗證 GKE 控制層 VM 完整性」。

你可以設定的部分

雖然 GKE 會代為管理大部分的控制層,但您可以控制下列項目:

  • 控制層存取權:控制層有兩種叢集存取端點:

    • 以 DNS 為基礎的端點
    • 以 IP 為準的端點

    預設情況下,Kubernetes API 伺服器會使用外部 IP 位址。您可以啟用以 DNS 為基礎的端點,存取控制層,藉此保護 Kubernetes API 伺服器。您可以使用 VPC Service Controls 控管 DNS 端點的存取權,為專案中的所有 Google API 定義一項安全參數。如果使用以 IP 為基礎的端點存取控制層,建議您使用授權網路,並停用控制層外部端點的存取權。如要進一步瞭解網路隔離,請參閱「關於自訂網路隔離」。

  • 驗證:您可使用 IAM 做為識別資訊提供者,以處理 GKE 中的叢集驗證。為提升驗證安全性,系統預設會停用基本驗證和用戶端憑證核發功能。

  • 憑證輪替:定期執行憑證輪替,輪替叢集憑證授權單位 (CA) 和傳輸層安全標準 (TLS) 憑證。在此程序中,GKE 也會輪替 Kubernetes API 伺服器的 IP 位址。詳情請參閱憑證輪替

此外,如果貴機構對控制層有嚴格的法規遵循或政策規定,GKE 控制層授權可提供一系列功能,讓您進一步掌握及控管控制層的特定層面,包括:

  • 使用 Cloud KMS 和 CA Service 執行自己的 CA 和金鑰,以核發身分識別。
  • 使用 Cloud KMS 中的自有金鑰,加密 etcd 和控制層開機磁碟。

如要瞭解使用這些功能的原因和所有可用功能,請參閱「關於 GKE 控制層授權」。

後續步驟