以機密 GKE 節點加密工作負載資料


本頁面說明如何使用機密 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。

節點集區層級
  • 建立新的標準節點集區
  • 更新現有的 Standard 節點集區
GKE 會加密該節點集區中節點的記憶體內容。只有在叢集層級停用機密 GKE 節點時,才能執行這項操作。

Hyperdisk Balanced 機密模式

您也可以在開機磁碟儲存空間上啟用 Hyperdisk Balanced 機密模式,這項功能會透過額外的硬體支援安全區加密資料。

執行下列任一操作時,您可以為 Hyperdisk Balanced 啟用機密模式:

  • 建立新叢集
  • 建立新的節點集區

您無法更新現有叢集或節點集區,變更 Hyperdisk Balanced 設定的機密模式。

下表說明在叢集層級或節點集區層級啟用 Hyperdisk Balanced 設定的機密模式時,適用的 GKE 行為:

Hyperdisk Balanced 機密模式設定 設定操作說明 行為
叢集層級 建立新叢集 只有叢集中的預設節點集區會使用 Hyperdisk Balanced 機密模式設定。您無法執行下列操作:
  • 為叢集中的現有節點集區停用 Hyperdisk Balanced 設定的機密模式
  • 在現有叢集上啟用 Hyperdisk Balanced 設定的機密模式
節點集區層級 建立新的節點集區 您可以在建立任何新節點集區時,為 Hyperdisk Balanced 設定機密模式。您無法更新現有節點集區,以使用 Hyperdisk Balanced 設定的機密模式。

定價

適用下列價格:

  • Autopilot:

    1. 啟用機密 GKE 節點後,叢集中的預設機器系列會變更為 N2D,因此您需要根據「平衡」運算類別的定價支付費用。如需定價詳細資料,請參閱 Autopilot 定價
    2. 除了 GKE Autopilot 費用,系統還會收取機密 GKE 節點費用。詳情請參閱「機密 VM 定價」一文中的「GKE Autopilot 的機密 GKE 節點定價」一節。
  • 標準:部署機密 GKE 節點時,除了 Compute Engine 機密 VM 的費用外,不會產生額外費用。不過,機密 GKE 節點在啟動時產生的記錄資料,可能會比標準節點略多。如要瞭解記錄定價,請參閱 Google Cloud Observability 定價

可用性

機密 GKE 節點的可用性規定如下:

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 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 節點」一節。

  • 如要使用不同的機密運算技術加密叢集中的特定節點集區,請略過本節,並在節點集區層級指定技術。

如要建立使用 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 SEV
    • sev_snp:AMD SEV-SNP
    • tdx:Intel TDX

您也可以在叢集建立指令中使用 --enable-confidential-nodes 旗標。如果您只在指令中指定這個旗標,叢集就會使用 AMD SEV。您在指令中指定的機器類型必須支援 AMD SEV。不過,如果您在同一指令中指定 --confidential-node-type 標記,GKE 會使用您在 --confidential-node-type 標記中指定的值。

控制台

  1. 在 Google Cloud 控制台中,前往「建立 Kubernetes 叢集」頁面。

    前往「建立 Kubernetes 叢集」

  2. 在導覽窗格的「Cluster」(叢集) 底下,按一下「Security」(安全性)

  3. 勾選「Enable Confidential GKE Nodes」(啟用機密 GKE 節點) 核取方塊。

  4. 視需要設定叢集。

  5. 點選「建立」

如要進一步瞭解如何建立叢集,請參閱「建立區域叢集」。

如果節點集區是使用 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 SEV
    • sev_snp:AMD SEV-SNP
    • tdx: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 SEV
    • sev_snp:AMD SEV-SNP
    • tdx:Intel TDX

節點必須已使用支援機密運算技術的機器類型,才能更新節點以使用這項技術。如果節點使用的機器類型不支援所選技術 (例如,您使用搭載 AMD CPU 的機器類型,但想啟用 Intel TDX),請按照下列步驟操作:

  1. 如果節點集區已使用機密 GKE 節點,請停用機密 GKE 節點
  2. 變更節點集區的機器類型
  3. 執行上述指令,更新節點集區以使用新的機密運算設定。

搭配節點自動佈建功能使用機密 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 SEV
    • SEV_SNP:AMD SEV-SNP
    • TDX: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

控制台

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往 Google Kubernetes Engine

  2. 按一下要檢查的叢集名稱。

  3. 在「安全性」下方的「機密 GKE 節點」欄位中,確認機密 GKE 節點是否為「已啟用」

在 Autopilot 模式或 Standard 模式節點上

如要確認特定 Autopilot 或標準節點是否使用機密 GKE 節點,請按照下列步驟操作:

  1. 找出節點名稱:

    kubectl get nodes
    
  2. 描述節點:

    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

  1. 將下列資訊清單儲存到名為 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 金鑰名稱
  2. 建立 StorageClass:

    kubectl create -f hdb-example-class.yaml
    
  3. 建立 GKE 適用的 Hyperdisk 永久磁碟區要求,使用 Hyperdisk Balanced 磁碟區的機密模式。

如要找出叢集中可用的 StorageClass 名稱,請執行下列指令:

kubectl get sc

限制

機密 GKE 節點有下列限制:

即時遷移限制

使用 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

這項變更需要重新建立節點,可能會導致執行中的工作負載中斷。如要瞭解這項特定變更的詳細資訊,請在「手動變更,使用節點升級策略重建節點,但不遵守維護政策」表格中,找到對應的資料列。如要進一步瞭解節點更新,請參閱「規劃節點更新中斷」。

後續步驟