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

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

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

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

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

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

事前準備

  1. 在下列任一開發環境中設定 gcloud CLI:

    如果您使用外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  2. 在 Shell 環境中執行 gcloud components update 指令,確保所有已安裝的 gcloud 元件都已更新至最新版本。在這個步驟中,您可以安裝並初始化 gcloud,也可以使用 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.,其中 PROJECT_NUMBER 是啟用 Gemini Code Assist 的 Google Cloud 專案專案編號
      3. 在「選取角色」中,依序選取「Cloud KMS」 >「Cloud KMS 加密編譯金鑰加密者/解密者」
      4. 按一下 [儲存]
    4. 重複上一個步驟,將存取權授予將使用 CMEK 建立程式碼存放區索引的帳戶。

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

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

    gcloud

    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." \
          --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

使用 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 存放區的存取權

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

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