本文說明如何使用客戶代管的加密金鑰 (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。
在您設定 gcloud CLI 的開發環境中,執行
gcloud components update
指令,確保已將所有已安裝的 gcloud 元件更新至最新版本。gcloud components update
建立 CMEK 並授予權限
如要建立 CMEK 並授予 Gemini Code Assist 服務帳戶金鑰權限,請執行下列工作:
在要管理金鑰的 Google Cloud 專案中,執行下列操作:
將 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 服務帳戶的權限,再停用或刪除金鑰。權限變更會在幾秒內生效,因此您可以觀察停用或刪除金鑰的影響。