使用 CMEK 加密工作站資源

根據預設,Cloud Workstations 會加密靜態客戶內容。Cloud Workstations 會為您處理加密作業,您不必採取其他動作。這項做法稱為「Google 預設加密」

如要控管加密金鑰,您可以在 Cloud KMS 中使用客戶自行管理的加密金鑰 (CMEK),並搭配 Cloud Workstations 等整合 CMEK 的服務。使用 Cloud KMS 金鑰可控管保護等級、位置、輪換時間表、使用權限和存取權,以及加密範圍。 使用 Cloud KMS 還能追蹤金鑰用量、查看稽核記錄,以及控管金鑰生命週期。 您可以在 Cloud KMS 中控制及管理用來保護資料的對稱金鑰加密金鑰 (KEK),而不是由 Google 擁有及管理這些金鑰。

使用 CMEK 設定資源後,存取 Cloud Workstations 資源的體驗與使用 Google 預設加密機制類似。如要進一步瞭解加密選項,請參閱客戶管理的加密金鑰 (CMEK)

根據預設,Cloud Workstations 會使用 Google-owned and Google-managed encryption key 加密工作站資源,例如 VM 和永久磁碟,確保靜態資料安全無虞。如果您在保護資料的金鑰方面有特定的法規遵循或監管要求,可以使用 Cloud Key Management Service (Cloud KMS)客戶自行管理的加密金鑰 (CMEK)。

如要進一步瞭解 CMEK,包括啟用時機和原因,請參閱 Cloud KMS 說明文件

事前準備

建立專案

  1. 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立下列Google Cloud專案

    • 金鑰專案包含 Cloud KMS 資源,包括金鑰環和對稱加密金鑰。

    • 工作站專案包含以 CMEK 金鑰加密的工作站。

    金鑰專案和工作站專案可以合併為同一個專案,但我們建議最好還是使用兩個專案,以區隔職責

  2. 確認 Cloud 專案已啟用計費功能。詳情請參閱「驗證專案的帳單狀態」。

  3. 在每個專案中啟用必要的 API。

  4. 安裝並初始化 gcloud CLI:

    1. 如要安裝 gcloud CLI,請參閱「安裝 gcloud CLI」,然後按照作業系統的指示操作。

    2. 如要初始化 gcloud CLI,請參閱「初始化 gcloud CLI」一文,或執行下列指令:

      gcloud init
      

必要的角色

雖然您可以將 Cloud KMS 管理員和 Cloud Workstations 管理員角色授予同一人,但建議您在指派角色時遵循最小權限原則。最佳做法是將這些角色授予兩位不同人員,並請他們協調,而不是要求 Cloud KMS 管理員同時擔任 Cloud Workstations 管理員。詳情請參閱安全性最佳做法安全地使用 IAM

如要取得設定 CMEK 所需的權限,請要求管理員授予下列 IAM 角色:

  • 如果您是 Cloud KMS 管理員,請管理員授予您下列角色,以便建立及管理 Cloud KMS 資源: Cloud KMS 管理員 (roles/cloudkms.admin) 在金鑰專案中。
  • 如果您是 Cloud Workstations 管理員,請管理員授予您下列角色,以便建立及更新工作站: Cloud Workstations 管理員 (roles/workstations.admin) 在工作站專案中。

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

建立金鑰環和加密金鑰

金鑰專案中建立金鑰,並儲存金鑰的資源 ID:

  1. 建立或選取金鑰環

    金鑰環必須與工作站叢集位於相同區域。 Cloud Workstations 不支援多區域或全域 Cloud KMS 位置

    您可以在服務之間共用金鑰環,但建議為每個受保護的資源使用不同的金鑰。請參閱職責劃分

  2. 建立對稱式加密金鑰

  3. 取得金鑰的資源 ID,並儲存以供後續步驟使用。

授予加密金鑰存取權

Cloud Workstations 會使用下列服務帳戶管理資源加密作業:

  1. Cloud Workstations 服務代理程式: Cloud Workstations 會使用這個帳戶偵測金鑰何時輪替。

  2. Cloud KMS 金鑰服務帳戶:您將提供服務帳戶,供 Cloud Workstations 用於存取金鑰,以便加密及解密資源。

將 Cloud KMS 檢視者角色授予 Cloud Workstations 服務代理

Cloud Workstations 服務代理程式可讓 Cloud Workstations 在專案中執行服務工作。在工作站專案中啟用 Cloud Workstations 服務時,系統會自動建立這項服務代理程式。如要讓 CMEK 正常運作,您必須在 Cloud KMS 金鑰上,授予工作站專案的 Cloud Workstations 服務代理人 Cloud KMS 檢視者角色 (roles/cloudkms.viewer),這樣 Cloud Workstations 才能偵測金鑰輪替。

  1. 如要擷取工作站專案的 Cloud Workstations 服務代理程式,請使用下列指令:

    gcloud beta services identity create \
        --service=workstations.googleapis.com \
        --project=WORKSTATIONS_PROJECT_ID
    

    WORKSTATIONS_PROJECT_ID 替換為工作站專案的 ID。

    Cloud Workstations 服務代理人使用以下格式:
    service-$WORKSTATIONS_PROJECT_NUMBER@gcp-sa-workstations.iam.gserviceaccount.com

  2. 將 Cloud KMS 檢視者角色 (roles/cloudkms.viewer) 授予 CMEK 金鑰的 Cloud Workstations 服務代理程式。這樣一來,Cloud Workstations 就能偵測金鑰輪替並視需要在專案中重新加密資源

    gcloud kms keys add-iam-policy-binding \
        KEY_NAME \
        --keyring=KEY_RING \
        --location=LOCATION \
        --project=KMS_PROJECT_ID \
        --role=roles/cloudkms.viewer \
        --member=CLOUD_WORKSTATIONS_SERVICE_AGENT
    

    更改下列內容:

    • KEY_NAME:金鑰的名稱。
    • KEY_RING:金鑰環的名稱。
    • LOCATION:包含金鑰環的位置。
    • KMS_PROJECT_ID:包含金鑰的專案 ID。
    • CLOUD_WORKSTATIONS_SERVICE_AGENT:從上一個步驟取得的 Cloud Workstations 服務代理。

    如要瞭解所有旗標和可能的值,請執行含有 --help 旗標的指令。

設定 Cloud KMS 金鑰服務帳戶

Cloud Workstations 會使用您選擇的服務帳戶,透過客戶自行管理的金鑰執行加密和解密作業。我們將這個帳戶稱為 Cloud KMS 金鑰服務帳戶。您可以選擇建立新的服務帳戶或使用現有帳戶。這個帳戶的規定如下:

  • Cloud Workstations 管理員必須具備這個服務帳戶的權限。iam.serviceAccounts.actAs
  • 所選服務帳戶必須在 Cloud KMS 金鑰上具有 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。
  1. 如要建立新的服務帳戶,請使用下列指令:

    gcloud iam service-accounts create \
      KMS_KEY_SERVICE_ACCOUNT_NAME \
      --display-name="Service account for Cloud Workstations CMEK" \
      --project=WORKSTATIONS_PROJECT_ID
    

    更改下列內容:

    • KMS_KEY_SERVICE_ACCOUNT_NAME:服務帳戶名稱。
    • WORKSTATIONS_PROJECT_ID:工作站專案的 ID。

    您建立的服務帳戶電子郵件地址格式如下: KMS_KEY_SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    請儲存服務帳戶的電子郵件地址,以供後續步驟使用。

  2. 如要將 Cloud Workstations 管理員 IAM 服務帳戶使用者角色 (roles/iam.serviceAccountUser) 授予 Cloud KMS 金鑰服務帳戶,請執行下列指令:

    gcloud iam service-accounts add-iam-policy-binding \
        KMS_KEY_SERVICE_ACCOUNT_EMAIL \
        --member="user:CLOUD_WORKSTATIONS_ADMIN_EMAIL" \
        --project=WORKSTATIONS_PROJECT_ID \
        --role=roles/iam.serviceAccountUser
    

    更改下列內容:

    • KMS_KEY_SERVICE_ACCOUNT_EMAIL:Cloud KMS 金鑰服務帳戶的電子郵件地址。
    • CLOUD_WORKSTATIONS_ADMIN_EMAILCloud Workstations 管理員的電子郵件地址。
    • WORKSTATIONS_PROJECT_ID:工作站專案的 ID。
  3. 如要將 Cloud KMS CryptoKey 加密者/解密者角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 授予 Cloud KMS 金鑰服務帳戶,請執行下列指令:

      gcloud kms keys add-iam-policy-binding \
        KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --project KMS_PROJECT_ID \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --member serviceAccount:KMS_KEY_SERVICE_ACCOUNT_EMAIL\
    

    更改下列內容:

    • KEY_NAME:金鑰的名稱。
    • KEY_RING:金鑰環的名稱。
    • LOCATION:包含金鑰環的位置。
    • KMS_PROJECT_ID:包含金鑰的專案 ID。
    • KMS_KEY_SERVICE_ACCOUNT_EMAIL:Cloud KMS 金鑰服務帳戶的電子郵件地址。

    如要瞭解所有旗標和可能的值,請執行含有 --help 旗標的指令。

檢查工作站叢集

如果Google Cloud 控制台中沒有可用的工作站叢集,請要求 Cloud Workstations 管理員在與 Cloud KMS 金鑰環相同的區域中,為您建立工作站叢集,或確認您在專案中具備 Cloud Workstations 管理員 IAM 角色,以便自行建立這些資源。

使用客戶自行管理的加密金鑰

  1. 如果尚未建立工作站叢集,請使用 clusters create gcloud CLI 指令建立。

    gcloud workstations clusters create \
        WORKSTATIONS_CLUSTER_NAME --region=LOCATION \
        --project=WORKSTATIONS_PROJECT_ID
    

    更改下列內容:

    • WORKSTATIONS_CLUSTER_NAME:工作站叢集的名稱。
    • LOCATION:工作站叢集的區域名稱。
    • WORKSTATIONS_PROJECT_ID:工作站專案的 ID。
  2. 使用 encryption_key 設定建立工作站設定

    如要建立工作站設定,並將機器類型設為 e2-standard-2、閒置逾時設為 3600s,以及使用 CMEK 加密工作站資源,請執行下列 gcloud CLI 指令:

    gcloud workstations configs create WORKSTATIONS_CONFIG_NAME \
      --cluster=WORKSTATIONS_CLUSTER_NAME \
      --region=LOCATION \
      --machine-type="e2-standard-2" \
      --idle-timeout=3600 \
      --kms-key="projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME" \
      --kms-key-service-account="KMS_KEY_SERVICE_ACCOUNT_EMAIL" \
      --project=WORKSTATIONS_PROJECT_ID
    

    更改下列內容:

    • WORKSTATIONS_CONFIG_NAME:工作站設定的名稱。
    • WORKSTATIONS_CLUSTER_NAME:工作站叢集名稱。
    • LOCATION:叢集的區域名稱。
    • KMS_PROJECT_ID:專案 ID,這是用來區分專案與 Google Cloud中所有其他專案的專屬字串。
    • KEY_RING:金鑰環的名稱。
    • KEY_NAME:金鑰的名稱。
    • KMS_KEY_SERVICE_ACCOUNT_EMAIL:Cloud KMS 金鑰服務帳戶的電子郵件地址。
    • WORKSTATIONS_PROJECT_ID:工作站專案的 ID。

    建立工作站設定後,Cloud KMS 會使用指定的 Cloud KMS 金鑰,加密專案中的永久磁碟。

輪替客戶自行管理的加密金鑰

您在 CMEK 金鑰上授予 Cloud Workstations 服務代理 Cloud KMS 檢視者角色 (roles/cloudkms.viewer) 後,工作站服務就能偵測到金鑰輪替,並使用新的主要金鑰版本重新加密主目錄磁碟

工作站停止運作後,系統會重新加密。每次停止加密工作站時,工作站服務都會檢查金鑰是否已輪替。如果金鑰已輪替,工作站服務會建立工作站主磁碟的快照,並刪除該磁碟。下次啟動工作站時,工作站服務會使用新的主要金鑰版本,透過快照建立新的磁碟。

Cloud KMS 配額和 Cloud Workstations

在 Cloud Workstations 中使用 CMEK 時,專案可能會耗用 Cloud KMS 密碼編譯要求配額。舉例來說,每次上傳或下載 CMEK 加密存放區時,都會消耗這些配額。 只有在使用硬體 (Cloud HSM) 或外部 (Cloud EKM) 金鑰時,使用 CMEK 金鑰的加密和解密作業才會影響 Cloud KMS 配額。 詳情請參閱 Cloud KMS 配額

外部金鑰

您可以使用 Cloud External Key Manager (Cloud EKM),透過您管理的外部金鑰,加密Google Cloud 中的資料。

使用 Cloud EKM 金鑰時,Google 無法控管外部管理金鑰的供應情形。如果金鑰無法使用,工作站就無法啟動。

如要進一步瞭解使用外部金鑰時的注意事項,請參閱 Cloud External Key Manager

後續步驟