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

本文說明如何使用客戶代管的加密金鑰 (CMEK),透過 Cloud Key Management Service 加密及控管雲端服務中的靜態資料。CMEK 已與程式碼自訂功能整合。Gemini Code Assist 不支援使用 Cloud EKM 金鑰。

在本文件中,您將執行下列操作:

  • 瞭解如何建立 CMEK。
  • 將權限授予 Gemini Code Assist 服務帳戶。
  • 使用 CMEK 建立程式碼存放區索引。
  • 移除 CMEK 存放區的存取權。

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

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

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

事前準備

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. 在 Shell 環境中執行 gcloud components update 指令,確保已將所有已安裝的 gcloud CLI 元件更新至最新版本。在這個步驟中,您可以安裝並初始化 gcloud CLI,也可以使用 Cloud Shell

    gcloud components update
    

建立 CMEK 並授予權限

如要建立 CMEK 並授予 Gemini Code Assist 服務帳戶金鑰權限,請執行下列工作:

  1. 在要管理金鑰的 Google Cloud 專案中,執行下列操作:

    1. 啟用 Cloud Key Management Service API

    2. 使用下列其中一種方式建立金鑰環和金鑰:

  2. CryptoKey Encrypter/Decrypter IAM 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 授予 Gemini Code Assist 服務帳戶。在您建立的金鑰上授予這項權限。

    主控台

    1. 前往「金鑰管理」

      前往「金鑰管理」

    2. 選取您建立的金鑰。

    3. 授予 Gemini Code Assist 服務帳戶存取權:

      1. 按一下「新增主體」
      2. 新增 Gemini Code Assist 服務帳戶。服務帳戶為 service-PROJECT_NUMBER@gcp-sa-cloudaicompanions.iam.gserviceaccount.com,其中 PROJECT_NUMBER 是啟用 Gemini Code Assist 的 Google Cloud 專案專案編號
      3. 在「選取角色」中,依序選取「Cloud KMS」 >「Cloud KMS 加密編譯金鑰加密者/解密者」
      4. 按一下 [儲存]
    4. 重複上一個步驟,將存取權授予將使用 CMEK 建立程式碼存放區索引的帳戶。

    5. 返回「金鑰管理」頁面,然後再次選取金鑰。

    6. 選取「顯示資訊面板」。您應該會在「角色/成員」欄中看到角色。

    gcloud CLI

    1. 如要授予 Gemini Code Assist 服務帳戶存取權,請在 Shell 環境中使用 kms keys add-iam-policy-binding 指令

      gcloud kms keys add-iam-policy-binding KEY_NAME \
          --project=PROJECT_ID \
          --location=LOCATION \
          --keyring=KEYRING_NAME \
          --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudaicompanion.iam.gserviceaccount.com" \
          --role="roles/cloudkms.cryptoKeyEncrypterDecrypter"
      

      更改下列內容:

      • KEY_NAME:金鑰名稱。
      • PROJECT_ID:包含金鑰的專案 ID。
      • LOCATION:金鑰位置。
      • KEYRING_NAME:金鑰環名稱。
      • PROJECT_NUMBER:已啟用 Gemini Code Assist 的 Google Cloud 專案專案編號
    2. 重複上一個步驟,將存取權授予將使用 CMEK 建立程式碼存放區索引的帳戶。

    如要進一步瞭解這個指令,請參閱 gcloud kms keys add-iam-policy-binding 說明文件

您現在可以使用 API 建立含有 CMEK 的程式碼存放區索引,並指定用於加密的金鑰。

使用 CMEK 建立程式碼存放區索引

如要建立受 CMEK 保護的新存放區,請執行下列其中一項操作:

gcloud CLI

使用 gemini code-repository-indexes create 指令

gcloud gemini code-repository-indexes create CODE_REPOSITORY_INDEX_NAME \
    --location=LOCATION \
    --kms-key="projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME"

更改下列內容:

  • CODE_REPOSITORY_INDEX_NAME:您要建立的新程式碼存放區索引名稱。
  • LOCATION:金鑰位置。
  • KEY_PROJECT_ID:主要專案 ID。
  • KEYRING_NAME:金鑰環名稱。
  • KEY_NAME:金鑰名稱。

API

  1. 建立包含下列資訊的 JSON 檔案:

      {
        "kmsKey": "projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME"
      }
    

    更改下列內容:

    • KEY_PROJECT_ID:金鑰專案 ID
    • KEY_LOCATION:金鑰位置
    • KEYRING_NAME:金鑰環名稱
    • KEY_NAME:金鑰名稱
  2. 使用 cURL 指令呼叫 projects.locations.codeRepositoryIndexes.create 方法

    curl -X POST --data-binary @JSON_FILE_NAME \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://cloudaicompanion.googleapis.com/v1/projects/PROJECT_ID/locations/KEY_LOCATION/codeRepositoryIndexes?codeRepositoryIndexId=CODE_REPOSITORY_INDEX_NAME"

    更改下列內容:

    • JSON_FILE_NAME:您在上一個步驟中建立的 JSON 檔案路徑。
    • PROJECT_ID:要在其中建立存放區的專案 ID。
    • KEY_LOCATION:要在其中建立存放區的位置,必須與 CMEK 所在位置相符。
    • CODE_REPOSITORY_INDEX_NAME:您要建立的新程式碼存放區索引名稱。例如:zg-btf-0001

回應會傳回一組記錄項目。

移除 CMEK 存放區的存取權

Google Cloud

您可以透過下列幾種方式移除 CMEK 加密存放區的存取權:

建議您先撤銷 Gemini Code Assist 服務帳戶的權限,再停用或刪除金鑰。權限變更會在幾秒內生效,因此您可以觀察停用或刪除金鑰的影響。