本頁面說明 Google Kubernetes Engine (GKE) Autopilot 的安全性功能、設定和選項。GKE Autopilot 叢集會為您實作許多安全性設定,因此建議您使用 Autopilot 執行 GKE。
本頁面適用於安全專家,可協助他們瞭解 Google 專門對 Autopilot 叢集套用的安全限制,以及 Autopilot 提供的安全功能。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱常見的 GKE Enterprise 使用者角色和工作。
閱讀本頁面之前,請先熟悉下列概念:
Autopilot 的安全措施
Autopilot 叢集預設會啟用並套用安全性最佳做法和設定,包括安全性總覽和「強化叢集安全性」中的許多建議。
如要根據用途取得建議資源,請跳至「依用途分類的安全資源」。以下各節說明 Autopilot 為您套用的安全性政策。
強制執行 Kubernetes Pod 安全性標準
Kubernetes 專案有一組名為「Pod 安全性標準」的安全指南,定義了下列政策:
- 已授權:沒有存取限制。Autopilot 不會使用這項設定。
- 基準:防止已知的權限提升路徑。可讓大多數工作負載在無須大幅變更的情況下執行。
- 權限受限的使用者:安全防護等級最高。需要大幅變更大部分工作負載。
在 Autopilot 模式下,GKE 會使用許可控制器強制執行 Pod 安全性限制。我們強制執行預設安全政策,其中包含 Pod 安全性標準基準層級的所有建議,並針對可用性進行部分修改。此外,Autopilot 的預設許可政策會強制執行 Pod 安全性標準受限制層級的許多限制,但會避免導致大多數工作負載無法執行的限制。
如要套用額外限制來遵守完整的「受限制」政策,您可以在特定命名空間中選擇使用 PodSecurity 許可控制器。
下表說明預設 Autopilot 准入政策中的控制項,與 Pod 安全性標準的 Baseline 和 Restricted 層級控制項相比,有何差異。如要瞭解下表中各項控制項的說明,請參閱 Pod 安全性標準中的對應項目。
評估是否符合規定時,我們會考量限制對您工作負載的影響。這不包括已驗證的合作夥伴工作負載,以及需要特定權限才能運作的系統工作負載。 Google Cloud
控制項 | 基本政策遵循 | 受限制的政策規範 | 其他資訊 |
---|---|---|---|
HostProcess | Autopilot 會封鎖 HostProcess。 | ||
主機命名空間 | Autopilot 會封鎖主機命名空間。部分已驗證合作夥伴的容器可使用主機命名空間。 | ||
特殊權限容器 | Autopilot 預設會封鎖特殊權限容器。 Autopilot 可讓經過驗證的合作夥伴使用具備特殊權限的容器,執行安全和監控工具等作業。 | ||
Linux 功能 | 根據預設,Autopilot 工作負載只能存取基準 Pod 安全性標準中指定的功能。 您可以手動啟用下列功能:
Autopilot 也允許部分經過驗證的合作夥伴工作負載設定捨棄的功能。 |
||
HostPath 磁碟區 | 部分符合規定 | 部分符合規定 | Autopilot 允許容器要求對 /var/log 的唯讀存取權,以進行偵錯,但會拒絕所有其他讀取或寫入存取權。 |
HostPorts | 系統不允許設定特定主機通訊埠,這有助於減輕部分排程問題,並防止服務意外或刻意直接暴露於網路上。您可以從已知範圍手動設定隨機主機通訊埠指派,支援直接連線網路應用程式,例如遊戲伺服器。 | ||
AppArmor | AppArmor docker-default 安全設定檔會自動套用至 Container-Optimized OS。 | ||
SELinux | 由於 AppArmor 已套用,因此系統不會套用 SELinux。Pod 安全性標準也未強制使用 SELinux。 | ||
/proc 支架類型 |
GKE 不會設定 ProcMountType 功能旗標。
如果 Pod securityContext 將 procMount 設為「Unmasked」,GKE 會自動將其覆寫為「Default」。 |
||
seccomp 設定檔 | Autopilot 會將 RuntimeDefault seccomp 設定檔套用至所有工作負載。如要為特定工作負載手動覆寫這項設定,請在 Pod 規格中將設定檔設為 Unconfined 。 |
||
sysctls | GKE 不會設定 --allowed-unsafe-sysctls kubelet 標記,因此含有不安全 sysctl 的 Pod 無法排程。為進一步提供保護,自 2023 年 7 月 11 日起,新的 1.27 以上叢集也將採用政策規則,強制執行 securityContext 設定,並拒絕使用不安全 sysctl 的 Pod。 | ||
磁碟區類型 | 自動駕駛模式只允許使用「受限」政策中的磁碟區類型,但有以下例外:可唯讀存取 /var/log 的 HostPath 磁碟區 (用於偵錯)、Compute Engine 永久磁碟的 gcePersistentDisk,以及網路檔案系統磁碟區的 nfs。 |
||
權限提升 | 這項設定只會保護未以根身分執行的容器。產業調查顯示,76% 的容器以超級使用者身分執行,因此 Autopilot 允許以超級使用者身分執行,以啟用大多數工作負載。目前,這項設定也可用於取消工作負載的權限,允許使用檔案系統功能來解決 Kubernetes 根功能處理作業的缺點,藉此將工作負載降級為非根層級。 | ||
以非根使用者身分執行 | 產業調查顯示,76% 的容器是以超級使用者身分執行,因此 Autopilot 允許以超級使用者身分執行,以支援大多數工作負載。 | ||
以非根使用者身分執行 | 容器可以將 runAsUser 設為 0 。
產業調查顯示,76% 的容器以超級使用者身分執行,因此 Autopilot 允許以超級使用者身分執行,以啟用大多數工作負載 |
內建安全性設定
Google 會根據業界最佳做法和專業知識,為 Autopilot 叢集套用許多內建安全設定。下表說明 Autopilot 為您套用的一些安全性設定:
設定 | 說明 |
---|---|
主辦人選項 |
|
Linux 功能 | 您可以使用下列 Linux 功能: "SETPCAP", "MKNOD", "AUDIT_WRITE", "CHOWN", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "SETGID", "SETUID", "NET_BIND_SERVICE", "SYS_CHROOT", "SETFCAP", "SYS_PTRACE" 你也可以手動啟用下列功能:
在 1.21 之前的 GKE 版本中,系統不支援 |
特殊權限容器 | 除非容器是由Google Cloud 合作夥伴部署,否則容器無法在特權模式中執行。具備權限的容器可以變更基礎節點,例如變更 kubelet。這項存取權可能會擴大 Pod 遭入侵的影響。 |
GKE 管理的命名空間 | 為確保安全性,Autopilot 不允許在 GKE 管理的命名空間 (例如 kube-system ) 中部署工作負載。 |
容器隔離 | Autopilot 會對容器強制執行下列限制,以降低容器逸出安全漏洞的影響。 Linux 功能和核心安全性
|
強制執行 Pod 層級安全性政策 | Autopilot 支援 Pod 層級安全政策的強制執行機制,例如 PodSecurity 許可控制器、Gatekeeper 或 Policy Controller。不過,如果本頁面所述的內建安全設定已符合您的需求,您可能就不需要使用任何這些設定。 |
透過 SSH 連線至節點 | Autopilot 會封鎖節點的 SSH 存取權。GKE 會處理節點的所有作業層面,包括節點健康狀態和節點上執行的所有 Kubernetes 元件。 您仍可使用 Kubernetes |
模擬使用者身分 | GKE 1.22.4-gke.1501 以上版本支援所有使用者定義的使用者和群組的使用者模擬。系統使用者和群組 (例如 kube-apiserver 使用者和 system:masters 群組) 無法模擬。 |
變更動態准入 Webhook | Autopilot 會修改變更 Webhook,排除代管命名空間 (例如 如果 Webhook 指定下列一或多項資源,以及這些資源的任何子資源,Autopilot 也會拒絕。 - group: "" resource: nodes - group: "" resource: persistentVolumes - group: certificates.k8s.io resource: certificatesigningrequests - group: authentication.k8s.io resource: tokenreviews 您無法使用 |
ValidatingAdmissionPolicies | Autopilot 會修改 如果 - group: "" resource: nodes - group: "" resource: persistentVolumes - group: certificates.k8s.io resource: certificatesigningrequests - group: authentication.k8s.io resource: tokenreviews 您無法使用 |
憑證簽署要求 | 您可以在 Autopilot 中建立 CertificateSigningRequests,藉此建立由叢集憑證授權單位簽署的憑證。為避免干擾系統元件,Autopilot 會拒絕已知特殊權限身分的 CertificateSigningRequests,例如系統群組、系統代理程式或 Google 管理的 IAM 服務代理程式。 |
GKE 安全性功能 | Autopilot 叢集會為您啟用建議的 GKE 安全性功能。如需已啟用和選用安全防護功能的清單,請參閱 Autopilot 中的安全防護功能。 |
節點作業系統 | Autopilot 叢集會使用 Container-Optimized OS,並以 containerd 做為節點作業系統。Container-Optimized OS 由 Google 建立及管理。 |
升級 GKE 版本 | Autopilot 叢集會在建立時註冊 GKE 發布版本,且自動升級功能一律會啟用。Google 會在特定時間點,自動將控制層和節點升級至發布版本中最新的合格版本。 |
Autopilot 中的安全界限
Autopilot 可存取 Kubernetes API,但會移除使用部分高權限 Kubernetes 功能的權限,例如具備高權限的 Pod。目標是限制存取、修改或直接控制節點虛擬機器 (VM) 的能力。Autopilot 會實施這些限制,避免工作負載取得節點 VM 的低階存取權,以便Google Cloud 全面管理節點,並提供 Pod 層級的SLA。
我們的目的是防止他人未經授權存取節點 VM。我們接受透過 Google 安全漏洞獎勵計畫 (VRP) 提交的相關報告,並由 Google VRP 獎勵委員會決定是否給予獎勵。
根據設計,叢集管理員等具備權限的使用者,可完全控管任何 GKE 叢集。為確保安全性,建議您避免廣泛授予強大的 GKE 或 Kubernetes 權限,並盡可能使用命名空間管理員委派,如多租戶指南所述。
Autopilot 會在專案中佈建單一用戶群 VM,供您專屬使用。在每個個別 VM 上,Autopilot 工作負載可能會一起執行,共用經過安全強化處理的 Kernel。由於共用核心代表單一安全邊界,因此我們建議您在需要嚴密隔離時 (例如高風險或不受信任的工作負載),在 GKE Sandbox Pod 上執行工作負載,以提供多層安全防護。
根據用途提供的安全性建議
以下各節提供連結和建議,協助您根據用途規劃、實作及管理 Autopilot 叢集的安全性。
規劃叢集安全性
用途 | 資源 |
---|---|
瞭解 GKE 平台如何處理安全性 | |
瞭解您在強化環境方面扮演的角色 | 瞭解共同責任模式。 |
查看 Google 針對強化措施和事件應變提供的建議 | |
瞭解 GKE 如何實作稽核記錄 |
|
驗證及授權
設定 Autopilot 叢集後,您可能需要驗證使用者和應用程式,才能使用 Kubernetes API 或 Google Cloud API 等資源。
用途 | 資源 |
---|---|
驗證使用者或應用程式是否可存取叢集 API 伺服器 | |
驗證應用程式是否可存取 Google Cloud API 和服務 | 您可以在 Autopilot 叢集使用 Workload Identity Federation for GKE,將 Kubernetes 服務帳戶設定為 IAM 服務帳戶,以安全地向 Google Cloud API 驗證工作負載。如需操作說明,請參閱「設定應用程式以使用 Workload Identity Federation for GKE」。 |
授權專案層級的動作 | 如要在專案層級授權跨叢集的操作,請使用 IAM。您可以使用 IAM 角色和權限,授予或拒絕存取特定 GKE 和 Kubernetes API 資源。如需操作說明,請參閱「建立 IAM 政策」。 |
授權叢集層級的動作 | 如要授權在特定叢集中的 Kubernetes API 資源上執行動作,請使用內建的 Kubernetes 角色式存取權控管 (RBAC) 機制。如需操作說明,請參閱「使用 RBAC 授權叢集中的動作」。 |
授權機構層級的動作 | 您可以使用 Google Cloud 機構政策服務,在整個 Google Cloud機構中,對 GKE 資源的特定作業強制執行限制。如需操作說明,請參閱「使用自訂組織政策限制對 GKE 資源執行的動作」。 |
強化叢集和工作負載
如果預設的 Autopilot 措施無法滿足您對隔離或強化的特殊需求,請參閱下列資源:
用途 | 資源 |
---|---|
限制叢集端點的公開存取權 | 設定 Autopilot 叢集的網路隔離,並停用叢集控制層的外部端點。如需操作說明,請參閱「設定控制平面存取權」。 |
限制特定網路的叢集存取權 | 使用控制層授權網路指定可存取叢集的 IP 位址範圍。 |
將機密資訊儲存在叢集外部 | 將機密資料儲存在已啟用版本控管功能的外部加密儲存空間供應商,是常見的法規遵循要求和最佳做法。使用 Secret Manager 儲存資料,並透過 GKE 適用的工作負載身分聯盟,從 Autopilot 叢集存取資料。如需操作說明,請參閱「使用 Workload Identity Federation for GKE 存取儲存在 GKE 叢集外的密碼」。 |
先驗證容器映像檔,再部署至叢集 | 在部署時,使用二進位授權檢查 Pod 資訊清單中參照的容器映像檔完整性。如需操作說明,請參閱「使用二進位授權在部署時驗證容器映像檔」。 |
監控安全防護機制
設定叢集並部署工作負載後,您應設定及配置監控和記錄功能,以便觀察叢集安全防護機制。建議您採取下列所有做法:
- 在 GKE 安全防護機制資訊主頁中註冊叢集,稽核工作負載是否有問題,例如安全設定有問題,或是容器作業系統套件中存在安全漏洞,並取得可執行的緩解資訊。
- 使用叢集通知,接收新的安全性公告和升級事件通知。
- 使用 Cloud Monitoring 中的 GKE 資訊主頁,或 GKE 中的「可觀測性」分頁,監控叢集。
- 瞭解如何在 Cloud Logging 中查看及管理 GKE 稽核記錄。