本文說明如何使用客戶代管的加密金鑰 (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)。
事前準備
在下列任一開發環境中設定 gcloud CLI:
Cloud Shell:如要使用已設定 gcloud CLI 的線上終端機,請啟動 Cloud Shell 編輯器。
如果您使用外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
在 Shell 環境中執行
gcloud components update
指令,確保所有已安裝的 gcloud 元件都已更新至最新版本。在這個步驟中,您可以安裝並初始化 gcloud,也可以使用 Cloud Shell。gcloud components update
建立 CMEK 並授予權限
如要建立 CMEK 並授予 Gemini Code Assist 服務帳戶金鑰權限,請執行下列工作:
在要管理金鑰的 Google Cloud 專案中,執行下列操作:
使用下列其中一種方式建立金鑰環和金鑰:
- 直接在 Cloud KMS 中建立金鑰環和金鑰。
- 使用外部代管金鑰。 建立外部金鑰,然後建立 Cloud EKM 金鑰,透過 Cloud KMS 提供金鑰。
將 CryptoKey Encrypter/Decrypter IAM 角色 (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) 授予 Gemini Code Assist 服務帳戶。在您建立的金鑰上授予這項權限。主控台
前往「金鑰管理」。
選取您建立的金鑰。
授予 Gemini Code Assist 服務帳戶存取權:
- 按一下「新增主體」。
- 新增 Gemini Code Assist 服務帳戶。服務帳戶為
service-PROJECT_NUMBER@gcp-sa-cloudaicompanions.
,其中 PROJECT_NUMBER 是啟用 Gemini Code Assist 的 Google Cloud 專案專案編號。 - 在「選取角色」中,依序選取「Cloud KMS」 >「Cloud KMS 加密編譯金鑰加密者/解密者」。
- 按一下 [儲存]。
重複上一個步驟,將存取權授予將使用 CMEK 建立程式碼存放區索引的帳戶。
選取「顯示資訊面板」。您應該會在「角色/成員」欄中看到角色。
gcloud
如要授予 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 專案專案編號。
重複上一個步驟,將存取權授予將使用 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
建立包含下列資訊的 JSON 檔案:
{ "kmsKey": "projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME" }
更改下列內容:
KEY_PROJECT_ID
:金鑰專案 IDKEY_LOCATION
:金鑰位置KEYRING_NAME
:金鑰環名稱KEY_NAME
:金鑰名稱
使用
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 加密存放區的存取權:
- 使用 API 控制台或 gcloud,從 Gemini Code Assist 服務帳戶撤銷 Cloud KMS CryptoKey Encrypter/Decrypter 角色。
- 暫時停用 CMEK。
- 永久銷毀 CMEK。
建議您先撤銷 Gemini Code Assist 服務帳戶的權限,再停用或刪除金鑰。權限變更會在幾秒內生效,因此您可以觀察停用或刪除金鑰的影響。