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

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

Gemini Code Assist 不支援使用 Cloud EKM 金鑰。

如果您未使用 CMEK,Google 會預設自動管理用於加密資料的金鑰。這種行為稱為「Google 預設加密」。在這種預設行為下,您無法控管加密金鑰。

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

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

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

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

使用 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. 在「Select a role」(選取角色) 中,依序選取「Cloud KMS」 >「Cloud KMS CryptoKey Encrypter/Decrypter」
      4. 按一下 [儲存]
    4. 重複執行上一個步驟,為將使用 CMEK 建立程式碼存放區索引的帳戶授予存取權。

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

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

    gcloud

    1. 如要授予 Gemini Code Assist 服務帳戶存取權,請在殼層環境中使用 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

使用 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 服務帳戶的權限。權限變更會在幾秒內生效,因此您可以觀察停用或刪除金鑰的影響。