使用客戶管理的加密金鑰 (CMEK)

本主題介紹如何在 Google Kubernetes Engine (GKE) 上使用客戶代管的加密金鑰 (CMEK)。如果您需要控制金鑰的管理權限,可以使用Cloud Key Management Service 和 CMEK 來保護 GKE 叢集中的永久磁碟。

總覽

根據預設,Google Cloud Platform 加密靜態的客戶內容,而 GKE 會為您管理加密作業,您不必進行任何操作。

如果要自己控制和管理加密金鑰的輪換作業,則可以使用客戶代管加密金鑰 (CMEK)。這些金鑰是用來對加密您資料的資料加密金鑰進行加密。詳情請參閱金鑰管理一節。

CMEK 加密的磁碟會在 GKE 中做為動態佈建的 PersistentVolume 提供。

在 GKE 中,CMEK 可保護連結到叢集中節點的永久磁碟上的資料。無法以 CMEK 保護開機磁碟和控制層磁碟。

事前準備

請按照以下說明來加密新建的永久磁碟。您可以使用新的或現有的 Cloud KMS 金鑰,在新叢集或現有叢集上啟用 CMEK。

以下說明需要在每個 GKE 叢集上完成一遍,會建立以下項目:

  1. 如有必要,請建立 GKE 群集。
  2. 將 Compute Engine 永久磁碟 CSI 驅動程序部署到您的叢集上。
  3. 如要啟用 Cloud KMS API,請按照以下步驟,完成使用 Cloud KMS 金鑰保護資源內「事前準備」一節中的所有指示。

    1. 在與 GKE 叢集相同的地區中建立金鑰環。
    2. 將 Cloud KMS CryptoKey 加密器/解密器角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 分配給 Compute Engine 服務代理人 ((service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com))。如此 GKE 即可存取金鑰。

建立參照新 KMS 金鑰的 StorageClass

  1. 將以下內容複製到 YAML 檔案中。在本頁面的接下來的部分,會將其稱為 gcepd-sc.yaml。這項設定能夠動態佈建加密磁碟區。

    apiVersion: storage.k8s.io/v1beta1
    kind: StorageClass
    metadata:
      name: csi-gce-pd
    provisioner: pd.csi.storage.gke.io
    parameters:
      type: pd-standard
      disk-encryption-kms-key: projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]
    
    • disk-encryption-kms-key 必須是金鑰的完整資源識別碼,該金鑰會用來加密新磁碟。視需要替換方括號內的項目,以參照 KMS 金鑰。
    • disk-encryption-kms-key 中的值 (例如:keyRingscryptoKeys) 需區分大小寫。如果使用不正確的值來佈建新磁碟區,會導致 invalidResourceUsage 錯誤。
    • 您可以將 StorageClass 設為預設值
  2. 使用 kubectl 在 GKE 叢集上部署 StorageClass

    kubectl apply -f gcepd-sc.yaml
  3. 最後,請確認您的 StorageClass 使用了 Compute Engine Persistent Disk CSI 驅動程式,且附有金鑰 ID。

在指令的輸出結果中,確認以下項目:

  • 佈建工具已設為 pd.csi.storage.gke.io
  • 您金鑰的 ID 在 disk-encryption-kms-key 後方。

    kubectl describe storageclass csi-gce-pd
    Name:                  csi-gce-pd
    IsDefaultClass:        No
    Annotations:           None
    Provisioner:           pd.csi.storage.gke.io
    Parameters:
    **disk-encryption-kms-key=projects/my-project/locations/my-location/keyRings/my-keyring/cryptoKeys/my-key,type=pd-standard**
    AllowVolumeExpansion:  unset
    MountOptions:          none
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                none
    

在 GKE 中建立加密永久磁碟

在本節中,要使用新的 StorageClass 和 Cloud KMS 金鑰來動態佈建加密的 Kubernetes 儲存磁碟區。

動態佈建加密的 Compute Engine 永久磁碟

  1. 將下面的內容複製到名為 pvc.yaml 的新檔案內,並以新建的 StorageClass 名稱來更新 storageClassName
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: csi-gce-pd
  resources:
    requests:
      storage: 6Gi
  1. 使用 kubectl 在您的 GKE 叢集上套用 PersistentVolumeClaim (PVC):

    kubectl apply -f pvc.yaml
  2. 取得您叢集的 PersistentVolumeClaim 狀態,以此方式確認 PVC 已建立並繫結到新佈建的 PersistentVolume

    kubectl get pvc
    NAME      STATUS    VOLUME
    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    podpvc     Bound     pvc-e36abf50-84f3-11e8-8538-42010a800002   10Gi
        RWO            csi-gce-pd     9s
    

現在可以將 CMEK 保護的永久磁碟與 GKE 叢集搭配使用。

從永久磁碟中移除 CMEK 保護

如要移除永久磁碟中的 CMEK 保護,請按照 Compute Engine 說明文件中的操作說明進行。

後續步驟

如要進一步瞭解 CMEK,請參閱:

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件