Google Kubernetes Engine (GKE) 安全核心模組載入功能可讓您在安全的 Container-Optimized OS 映像檔上,執行需要簽署的樹外 (OOT) 核心模組的工作負載。安全核心模組載入功能可讓您進一步控管 CPU 或 TPU 節點上的模組載入作業,並驗證簽章,進而提升叢集和節點集區的安全防護機制。
安全核心模組載入的運作方式
根據節點類型,GKE 節點預設會使用不同的 Container-Optimized OS 映像檔,以及不同的安全性設定:
- CPU 和 TPU 節點:使用已啟用 Linux 安全性模組 (LSM) Loadpin 的 Container-Optimized OS 映像檔。Loadpin 會限制載入任何 OOT 核心模組。這項設定很安全,但會禁止載入 OOT 模組。
- GPU 節點:使用已停用 Loadpin 的 Container-Optimized OS 映像檔。這項設定可載入 OOT 模組,例如安裝 NVIDIA 驅動程式,但預設安全性較低。
如要啟用安全核心模組載入功能,請在節點集區的 LinuxNodeConfig 中使用 NodeKernelModuleLoading.Policy 設定,或在建立/更新叢集或節點集區時傳遞 --enable-kernel-module-signature-enforcement 標記。如果將政策設為 ENFORCE_SIGNED_MODULES,系統會在 CPU 或 TPU 節點集區中啟用 Loadpin,但會設定為允許從根檔案系統外部載入核心模組。模組必須經過簽署,且系統只允許 Google 簽署的模組。
安全核心模組載入的使用時機
如要在任何 GKE 節點類型上載入 Google 簽署的 OOT 核心模組 (例如自訂驅動程式或 Lustre 等檔案系統),請使用安全核心模組載入功能。這項功能可讓您使用這些模組,同時維持節點的安全性狀態。舉例來說,您可以在 CPU 節點上載入必要驅動程式,不必使用限制較少的 GPU 映像檔類型。
需求條件和限制
在節點集區啟用安全核心模組載入功能時,須遵守下列規定和限制:
- 支援的模組:僅允許 Google 簽署的 OOT 模組。
- cgroup v2:節點集區必須使用 cgroup v2。如果節點集區使用 cgroup v1,Google Kubernetes Engine API 會拒絕啟用這項政策的要求。詳情請參閱 Kubernetes cgroup 說明文件。
- GKE 版本:這項功能適用於 GKE 叢集 1.34.1-gke.2364000 以上版本。
- GPU 映像檔類型:只有 CPU 和 TPU 映像檔支援載入安全核心模組。不支援 GPU。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
設定安全核心模組載入政策
您可以在個別叢集上設定安全核心模組載入政策,也可以將其設為節點集區設定。可用的政策如下:
ENFORCE_SIGNED_MODULES:強制規定任何樹狀結構外的核心模組都必須由 Google 簽署。這項政策規定節點集區必須使用 cgroup v2。DO_NOT_ENFORCE_SIGNED_MODULES:允許載入任何已簽署或未簽署的核心模組。這是預設行為。
如果您未指定政策,GKE 會使用預設行為,不會強制執行簽署模組。
在叢集上啟用安全核心模組載入功能
如要為叢集啟用安全核心模組載入功能,請完成下列任一步驟:
如要在新叢集上啟用這項功能,請執行下列指令:
標準
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementAutopilot
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement更改下列內容:
CLUSTER_NAME:新叢集的名稱。LOCATION:叢集所在的區域或可用區。PROJECT_ID:您的專案 ID。
如要在現有叢集上啟用這項功能,請執行下列指令:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement更改下列內容:
CLUSTER_NAME:叢集名稱。LOCATION:叢集所在的區域或可用區。PROJECT_ID:您的專案 ID。
更新現有叢集時,系統會在下次有機會時重新建立節點,除非維護期間阻止了這項作業。
在節點集區上啟用安全核心模組載入功能
如要在節點集區上啟用安全的核心模組載入功能,請完成下列任一步驟:
如要在新的節點集區上啟用這項功能,請執行下列指令:
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement更改下列內容:
NODEPOOL_NAME:新節點集區的名稱。CLUSTER_NAME:叢集名稱。LOCATION:叢集所在的區域或可用區。PROJECT_ID:您的專案 ID。
如要在現有節點集區中啟用這項功能,請執行下列指令:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement更改下列內容:
NODEPOOL_NAME:要更新的節點集區名稱。CLUSTER_NAME:叢集名稱。LOCATION:叢集所在的區域或可用區。PROJECT_ID:您的專案 ID。
確認已設定安全核心模組政策
如要確認叢集是否已設定政策,請執行下列指令:
gcloud container node-pools describe NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID
在輸出內容中,查看 linuxNodeConfig 區段。「kernelModuleLoading」欄位會顯示目前的政策:
...
config:
linuxNodeConfig:
kernelModuleLoading:
policy: ENFORCE_SIGNED_MODULES
cgroupMode: CGROUP_MODE_V2
停用安全核心模組載入功能
如要停用安全核心模組載入功能,請完成下列任一步驟:
如要在叢集上停用,請執行下列指令:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcement如要停用現有節點集區的自動升級功能,請執行下列指令:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcement
後續步驟
- 瞭解如何強化叢集安全性。