本頁面說明如何使用機密 Google Kubernetes Engine 節點,在節點和工作負載中強制加密使用中的資料。強制執行加密可提高工作負載的安全性。
本頁面適用於在 GKE 上導入安全防護機制的安全專家。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱常見的 GKE Enterprise 使用者角色和工作。
什麼是機密 GKE 節點?
您可以透過機密 GKE 節點或 Hyperdisk Balanced 機密模式,加密工作負載。
機密 GKE 節點
機密 GKE 節點是以 Compute Engine 機密 VM 為基礎建構而成,可透過硬體式記憶體加密機制保護使用中的資料。機密 GKE 節點支援下列機密運算技術:
- AMD 安全加密虛擬化 (SEV)
- AMD 安全加密虛擬化 - 安全巢狀分頁 (SEV-SNP)
- Intel Trust Domain Extensions (TDX)
如要進一步瞭解這些技術,並根據需求選擇最合適的技術,請參閱「機密 VM 總覽」。
機密 GKE 節點不會變更 GKE 對叢集控制層採用的安全措施。如要瞭解這些措施,請參閱「控制層安全性」。如要瞭解誰存取專案中的控制平面,請使用 Google Cloud資料存取透明化控管機制。
如要啟用機密 GKE 節點,請執行下列操作:
- 建立新叢集
- 使用節點自動佈建功能部署工作負載
- 建立節點集區
- 更新現有節點集區
您無法更新現有叢集,變更叢集層級的 Confidential GKE Nodes 設定。
下表說明啟用機密 GKE 節點時適用的 GKE 行為:
機密 GKE 節點設定 | 設定操作說明 | 行為 |
---|---|---|
叢集層級 | 建立新的 Autopilot 或 Standard 模式叢集 | 所有節點都使用機密 GKE 節點。這項操作無法復原。您無法覆寫個別節點的設定。 在 GKE Autopilot 叢集中,所有節點都會自動使用 Balanced 計算類別的預設機器系列,也就是 N2D。 |
節點集區層級 |
|
GKE 會加密該節點集區中節點的記憶體內容。只有在叢集層級停用機密 GKE 節點時,才能執行這項操作。 |
Hyperdisk Balanced 機密模式
您也可以在開機磁碟儲存空間上啟用 Hyperdisk Balanced 機密模式,這項功能會透過額外的硬體支援安全區加密資料。
執行下列任一操作時,您可以為 Hyperdisk Balanced 啟用機密模式:
- 建立新叢集
- 建立新的節點集區
您無法更新現有叢集或節點集區,變更 Hyperdisk Balanced 設定的機密模式。
下表說明在叢集層級或節點集區層級啟用 Hyperdisk Balanced 設定的機密模式時,適用的 GKE 行為:
Hyperdisk Balanced 機密模式設定 | 設定操作說明 | 行為 |
---|---|---|
叢集層級 | 建立新叢集 | 只有叢集中的預設節點集區會使用 Hyperdisk Balanced 機密模式設定。您無法執行下列操作:
|
節點集區層級 | 建立新的節點集區 | 您可以在建立任何新節點集區時,為 Hyperdisk Balanced 設定機密模式。您無法更新現有節點集區,以使用 Hyperdisk Balanced 設定的機密模式。 |
定價
適用下列價格:
Autopilot:
- 啟用機密 GKE 節點後,叢集中的預設機器系列會變更為 N2D,因此您需要根據「平衡」運算類別的定價支付費用。如需定價詳細資料,請參閱 Autopilot 定價。
- 除了 GKE Autopilot 費用,系統還會收取機密 GKE 節點費用。詳情請參閱「機密 VM 定價」一文中的「GKE Autopilot 的機密 GKE 節點定價」一節。
標準:部署機密 GKE 節點時,除了 Compute Engine 機密 VM 的費用外,不會產生額外費用。不過,機密 GKE 節點在啟動時產生的記錄資料,可能會比標準節點略多。如要瞭解記錄定價,請參閱 Google Cloud Observability 定價。
可用性
機密 GKE 節點的可用性規定如下:
- 節點必須位於支援所選機密運算技術的區域或地區。詳情請參閱「查看支援的區域」。
- Autopilot 叢集必須使用 GKE 1.30.2 以上版本。
- Standard 節點集區必須使用其中一種支援的機型,以及 Container-Optimized OS 節點映像檔。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
需求條件
- Autopilot 叢集必須使用 GKE 1.30.2 以上版本。
- Standard 節點集區必須使用支援的機型和 Container-Optimized OS 節點映像檔。
標準叢集和節點集區必須使用下列其中一個 GKE 版本,具體取決於您選擇的機密運算技術:
- AMD SEV:任何可用的 GKE 版本。
- AMD SEV-SNP:1.32.2-gke.1297000 以上版本。
- Intel TDX:1.32.2-gke.1297000 以上版本。
在 Autopilot 中使用機密 GKE 節點
您可以為整個 Autopilot 叢集啟用機密 GKE 節點,讓每個節點都成為機密節點。所有工作負載都會在機密節點上執行,且不需要變更工作負載資訊清單。啟用機密 GKE 節點後,叢集中的預設機器系列會變更為 N2D。
在新 Autopilot 叢集上啟用機密 GKE 節點
執行下列指令:
gcloud container clusters create-auto CLUSTER_NAME \
--location=LOCATION \
--enable-confidential-nodes
更改下列內容:
CLUSTER_NAME
:Autopilot 叢集的名稱。LOCATION
:叢集的 Compute Engine 位置。
叢集必須執行 1.30.2 以上版本。如要在建立叢集時設定特定版本,請參閱「設定新 Autopilot 叢集的版本和發布管道」。
在 Standard 模式下使用機密 GKE 節點
在 Standard 模式中,您可以在叢集層級或節點集區層級啟用機密 GKE 節點。
在 Standard 叢集上啟用機密 GKE 節點
建立叢集時,您可以為節點指定機密運算技術。在建立叢集時指定技術,會產生下列影響:
- 您無法在該叢集中建立不使用機密 GKE 節點的節點集區。
- 您無法更新叢集來停用機密 GKE 節點。
- 您無法在個別節點集區中覆寫叢集層級的機密運算技術。
在叢集層級設定機密運算設定後,就無法變更。 因此,請先考量下列用途,再建立叢集:
如要在叢集中使用節點自動佈建功能,您必須完成下列所有步驟:
- 使用 gcloud CLI 建立叢集,並在叢集建立指令中指定
--enable-confidential-nodes
旗標。 - 選取節點自動佈建功能支援的機密運算技術。
詳情請參閱「搭配節點自動佈建功能使用機密 GKE 節點」一節。
- 使用 gcloud CLI 建立叢集,並在叢集建立指令中指定
如要使用不同的機密運算技術加密叢集中的特定節點集區,請略過本節,並在節點集區層級指定技術。
如要建立使用 Confidential GKE 節點的標準模式叢集,請選取下列其中一個選項:
gcloud
建立新叢集時,請在 gcloud CLI 中指定 --confidential-node-type
選項:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--machine-type=MACHINE_TYPE \
--confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
更改下列內容:
CLUSTER_NAME
:叢集名稱。LOCATION
:叢集的 Compute Engine 位置。該位置必須支援您指定的機密運算技術。詳情請參閱「適用情形」一節。MACHINE_TYPE
:支援您指定的機密運算技術的機器類型。詳情請參閱「適用情形」一節。CONFIDENTIAL_COMPUTE_TECHNOLOGY
:要使用的機密運算技術。支援的值如下:sev
:AMD SEVsev_snp
:AMD SEV-SNPtdx
:Intel TDX
您也可以在叢集建立指令中使用 --enable-confidential-nodes
旗標。如果您只在指令中指定這個旗標,叢集就會使用 AMD SEV。您在指令中指定的機器類型必須支援 AMD SEV。不過,如果您在同一指令中指定 --confidential-node-type
標記,GKE 會使用您在 --confidential-node-type
標記中指定的值。
控制台
在 Google Cloud 控制台中,前往「建立 Kubernetes 叢集」頁面。
在導覽窗格的「Cluster」(叢集) 底下,按一下「Security」(安全性)。
勾選「Enable Confidential GKE Nodes」(啟用機密 GKE 節點) 核取方塊。
視需要設定叢集。
點選「建立」。
如要進一步瞭解如何建立叢集,請參閱「建立區域叢集」。
如果節點集區是使用 Hyperdisk Balanced 機密模式設定建立,則只有該節點集區中的節點會受到設定限制。在叢集中建立任何新的節點集區時,您必須在建立時設定機密模式。
在節點集區上啟用機密 GKE 節點
如果叢集層級的機密 GKE 節點已停用,您可以在特定節點集區啟用機密 GKE 節點。
您必須在節點集區建立要求中,指定 Hyperdisk Balanced 設定的機密模式。
建立新的節點集區
如要建立啟用機密 GKE 節點的新節點集區,請執行下列指令:
gcloud container node-pools create NODE_POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
更改下列內容:
NODE_POOL_NAME
:新節點集區的名稱。LOCATION
:新節點集區的位置。該位置必須支援您指定的機密運算技術。詳情請參閱「適用情形」一節。CLUSTER_NAME
:叢集名稱。MACHINE_TYPE
:支援您指定的機密運算技術的機器類型。詳情請參閱「適用情形」一節。CONFIDENTIAL_COMPUTE_TECHNOLOGY
:要使用的機密運算技術。支援的值如下:sev
:AMD SEVsev_snp
:AMD SEV-SNPtdx
:Intel TDX
您也可以在叢集建立指令中使用 --enable-confidential-nodes
旗標。如果您只在指令中指定這個旗標,叢集就會使用 AMD SEV。您在指令中指定的機器類型必須支援 AMD SEV。不過,如果您在同一指令中指定 --confidential-node-type
標記,GKE 會使用您在 --confidential-node-type
標記中指定的值。
更新現有節點集區
這項變更需要重新建立節點,可能會導致執行中的工作負載中斷。如要瞭解這項特定變更的詳細資訊,請在「手動變更,使用節點升級策略重建節點,但不遵守維護政策」表格中,找到對應的資料列。如要進一步瞭解節點更新,請參閱「規劃節點更新中斷」。
您可以更新現有節點集區,改用機密 GKE 節點,或是切換節點使用的機密運算技術。如要更新現有節點集區,改用機密 GKE 節點,請執行下列指令:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
更改下列內容:
- NODE_POOL_NAME:節點集區的名稱。
- CLUSTER_NAME:叢集名稱。
CONFIDENTIAL_COMPUTE_TECHNOLOGY:要使用的機密運算技術。支援的值如下:
sev
:AMD SEVsev_snp
:AMD SEV-SNPtdx
:Intel TDX
節點必須已使用支援機密運算技術的機器類型,才能更新節點以使用這項技術。如果節點使用的機器類型不支援所選技術 (例如,您使用搭載 AMD CPU 的機器類型,但想啟用 Intel TDX),請按照下列步驟操作:
- 如果節點集區已使用機密 GKE 節點,請停用機密 GKE 節點。
- 變更節點集區的機器類型。
- 執行上述指令,更新節點集區以使用新的機密運算設定。
搭配節點自動佈建功能使用機密 GKE 節點
您可以設定節點自動佈建,在自動佈建的節點集區中使用機密 GKE 節點。節點自動佈建支援下列機密運算技術:
- AMD SEV
- AMD SEV-SNP
如要搭配節點自動佈建功能使用 Confidential GKE 節點,請在建立叢集、建立節點集區或更新節點集區時,指定 --enable-confidential-nodes
gcloud CLI 標記。請注意以下額外考量事項:
- 建立新的自動佈建節點集區:請確認您選擇的機密運算技術支援節點自動佈建功能。
- 更新現有節點集區:請確認您選擇的機密運算技術支援節點自動佈建。
- 建立新叢集:請確認您選擇的機密運算技術支援節點自動佈建功能。這項選擇在叢集層級無法復原。
- 更新現有叢集:叢集必須已使用機密 GKE 節點。叢集使用的機密 GKE 節點技術必須支援節點自動佈建。
只將工作負載放在機密 GKE 節點集區
如果您在叢集層級啟用機密 GKE 節點,所有工作負載都會在機密節點上執行。您不需要變更資訊清單。不過,如果您只為特定 Standard 模式節點集區啟用機密 GKE 節點,就應以宣告方式表示工作負載只能在具備機密 GKE 節點的節點集區上執行。
如要規定工作負載必須透過特定機密運算技術執行,請使用含有
cloud.google.com/gke-confidential-nodes-instance-type
標籤的節點選取器,如下例所示:apiVersion: v1 kind: Pod spec: # For readability, lines are omitted from this example manifest nodeSelector: cloud.google.com/gke-confidential-nodes-instance-type: "CONFIDENTIAL_COMPUTE_SELECTOR"
將
CONFIDENTIAL_COMPUTE_SELECTOR
替換為節點集區使用的技術名稱。這個欄位支援下列值,您必須以大寫指定:SEV
:AMD SEVSEV_SNP
:AMD SEV-SNPTDX
:Intel TDX
如要讓工作負載在任何機密節點上執行 (不論機密運算技術為何),請使用節點親和性規則,如下列範例所示:
apiVersion: v1 kind: Pod spec: containers: - name: confidential-app image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-confidential-nodes-instance-type operator: Exists
如要讓工作負載在僅使用部分可用機密運算技術的節點上執行,請使用類似下列範例的節點親和性規則:
apiVersion: v1 kind: Pod spec: containers: - name: confidential-app image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-confidential-nodes-instance-type operator: In values: - SEV - SEV_SNP - TDX
在
values
欄位中,僅指定要執行工作負載的機密運算技術。
確認已啟用機密 GKE 節點
您可以檢查叢集或節點,確認是否使用機密 GKE 節點。
在 Autopilot 模式或 Standard 模式叢集上
您可以使用 gcloud CLI 或Google Cloud 控制台,確認 Autopilot 或 Standard 叢集是否使用機密 GKE 節點。
gcloud
描述叢集:
gcloud container clusters describe CLUSTER_NAME
如果啟用機密 GKE 節點,輸出內容會類似下列內容,視叢集作業模式而定。
標準模式叢集
confidentialNodes:
confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR
Autopilot 模式叢集
confidentialNodes:
enabled: true
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下要檢查的叢集名稱。
在「安全性」下方的「機密 GKE 節點」欄位中,確認機密 GKE 節點是否為「已啟用」。
在 Autopilot 模式或 Standard 模式節點上
如要確認特定 Autopilot 或標準節點是否使用機密 GKE 節點,請按照下列步驟操作:
找出節點名稱:
kubectl get nodes
描述節點:
kubectl describe NODE_NAME
將
NODE_NAME
替換為要檢查的節點名稱。
輸出結果會與下列內容相似:
Name: gke-cluster-1-default-pool-affsf335r-asdf
Roles: <none>
Labels: cloud.google.com/gke-boot-disk=pd-balanced
cloud.google.com/gke-container-runtime=containerd
cloud.google.com/gke-confidential-nodes-instance-type=CONFIDENTIAL_COMPUTE_SELECTOR
cloud.google.com/gke-nodepool=default-pool
cloud.google.com/gke-os-distribution=cos
cloud.google.com/machine-family=e2
# lines omitted for clarity
在這個輸出內容中,cloud.google.com/gke-confidential-nodes-instance-type
節點標籤表示該節點為機密節點。
標準模式節點集區
如要確認節點集區是否使用機密 GKE 節點,請執行下列指令:
gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME
如果已啟用機密 GKE 節點,輸出內容會類似於下列內容:
confidentialNodes:
cloud.google.com/gke-confidential-nodes-instance-type=CONFIDENTIAL_COMPUTE_SELECTOR
如果啟用 Hyperdisk Balanced 機密模式設定,輸出內容會類似以下內容:
enableConfidentialStorage: true
在個別標準模式節點上
如要驗證標準叢集中特定節點的機密性,請執行下列任一操作:
設定機構政策限制
您可以定義機構政策限制,確保在整個機構中建立的所有 VM 資源都是機密 VM 執行個體。如果是 GKE,您可以自訂「Restrict Non-Confidential Computing」(限制非機密運算) 限制,要求所有新叢集都必須啟用其中一種可用的機密運算技術。強制執行機構政策限制時,請將 container.googleapis.com
API 服務名稱新增至拒絕清單,如下例所示:
gcloud resource-manager org-policies deny \
constraints/compute.restrictNonConfidentialComputing compute.googleapis.com container.googleapis.com \
--project=PROJECT_ID
將 PROJECT_ID 替換為您的專案 ID。
為 Hyperdisk Balanced 機密模式建立 PersistentVolume
如需處理量或 IOPS 允許值的相關指引,請參閱「規劃 Hyperdisk 磁碟區的效能等級」。
以下範例說明如何為每種 Hyperdisk 類型建立 Hyperdisk Balanced StorageClass 的機密模式:
Hyperdisk Balanced
將下列資訊清單儲存到名為
confidential-hdb-example-class.yaml
的檔案:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" enable-confidential-storage: true disk-encryption-kms-key: "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/HSM_KEY_NAME"
更改下列內容:
KMS_PROJECT_ID
:擁有 Cloud KMS 金鑰的專案REGION
:磁碟所在的區域KEY_RING
:包含金鑰的金鑰環名稱HSM_KEY_NAME
:用於加密磁碟的 HSM 金鑰名稱
建立 StorageClass:
kubectl create -f hdb-example-class.yaml
建立 GKE 適用的 Hyperdisk 永久磁碟區要求,使用 Hyperdisk Balanced 磁碟區的機密模式。
如要找出叢集中可用的 StorageClass 名稱,請執行下列指令:
kubectl get sc
限制
機密 GKE 節點有下列限制:
- 所有 Compute Engine 機密 VM 執行個體的限制,都適用於機密 GKE 節點。
- 所有使用 CMEK 加密磁碟的限制都適用於 Hyperdisk Balanced 機密模式。
- 如果機密 GKE 節點採用 C2D 機型,則只能在 GKE 1.24 以上版本中使用節點自動佈建。
- 如果控制層執行 GKE 1.22 以上版本,機密 GKE 節點只支援由永久磁碟支援的 PersistentVolumes。如需操作說明,請參閱「使用 Compute Engine 永久磁碟 CSI 驅動程式 」。
- 機密 GKE 節點與單一租戶節點不相容。
- 機密 GKE 節點僅支援在本機 SSD 上使用臨時儲存空間,但不支援一般用途的本機 SSD。
- 僅支援 Container-Optimized OS 節點。不支援 Ubuntu 和 Windows 節點。
- 只有使用 AMD SEV 做為機密運算技術的機密 GKE 節點,才支援 Hyperdisk Balanced 機密模式。
- GKE Autopilot 叢集僅支援 AMD SEV。 不支援 AMD SEV-SNP 和 Intel TDX。
- 如要搭配機密 GKE 節點使用節點自動佈建,您必須在 Standard 模式叢集或節點集區的 gcloud CLI 指令中,使用
--enable-confidential-nodes
標記。節點自動佈建功能不支援 Intel TDX。
即時遷移限制
使用 N2D 機器類型並以 AMD SEV 做為機密運算技術的 Compute Engine 機密 VM 支援即時遷移,可將主機維護事件造成的工作負載中斷降到最低。即時遷移功能適用於下列 GKE 版本:
- 1.27.10-gke.1218000 以上版本
- 1.28.6-gke.1393000 以上版本
- 1.29.1-gke.1621000 以上版本
如果節點集區在新增即時遷移功能時,已執行支援的版本,請手動將節點集區升級至相同或不同的支援版本。升級節點會觸發節點重建作業,而新節點會啟用即時遷移功能。
如要瞭解哪些 Compute Engine 機器類型支援即時遷移,請參閱支援的設定。
如果節點發生主機維護事件,且不支援即時遷移,節點就會進入 NotReady
狀態。在節點恢復就緒狀態前,執行中的 Pod 會受到干擾。如果維護作業超過五分鐘,GKE 可能會嘗試在其他節點上重新建立 Pod。
停用機密 GKE 節點
您只能在 Standard 模式節點集區中停用機密 GKE 節點。如果節點集區位於叢集層級使用機密 GKE 節點的叢集,您就無法在節點集區層級停用這項功能。
執行下列指令,在節點集區上停用機密 GKE 節點:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-confidential-nodes
這項變更需要重新建立節點,可能會導致執行中的工作負載中斷。如要瞭解這項特定變更的詳細資訊,請在「手動變更,使用節點升級策略重建節點,但不遵守維護政策」表格中,找到對應的資料列。如要進一步瞭解節點更新,請參閱「規劃節點更新中斷」。
後續步驟
- 進一步瞭解機密 VM
- 進一步瞭解 Google Cloud 靜態加密
- 進一步瞭解 Google Cloud 傳輸中資料加密功能
- 進一步瞭解客戶管理的加密金鑰 (CMEK)
- 瞭解如何遠端驗證工作負載是否在機密 VM 上執行
- 瞭解如何在機密 GKE 節點上執行 GPU (搶先版)