本文档介绍如何使用客户管理的加密密钥 (CMEK) 通过 Cloud Key Management Service 加密和控制云服务中的静态数据。CMEK 已与 Gemini Code Assist 的代码定制集成。Gemini Code Assist 不支持使用 Cloud EKM 密钥。
在本文档中,您将执行以下操作:
- 了解如何创建 CMEK。
- 向 Gemini Code Assist 服务账号授予权限。
- 使用 CMEK 创建代码库索引。
- 移除对 CMEK 代码库的访问权限。
默认情况下,Gemini Code Assist 的代码定制功能会对静态的客户内容进行加密。代码定制功能会为您处理加密,您无需执行任何其他操作。此选项称为“Google 默认加密”。
如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括代码定制)搭配使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。此外,您还可使用 Cloud KMS 查看审核日志并控制密钥生命周期。这样您就可以在 Cloud KMS 中控制和管理用于保护数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。
使用 CMEK 设置资源后,访问代码定制资源的体验与使用 Google 默认加密功能类似。如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)。
准备工作
-
在 Google Cloud 控制台中,激活 Cloud Shell。
在您设置 gcloud CLI 的开发环境中,运行
gcloud components update命令,以确保您已将 gcloud CLI 的所有已安装组件更新到最新版本。gcloud components update
创建 CMEK 并授予权限
如需创建 CMEK 并向 Gemini Code Assist 服务账号授予密钥权限,请执行以下任务:
在您要用于管理密钥的 Google Cloud 项目中,执行以下操作:
为 Gemini Code Assist 服务账号授予 CryptoKey Encrypter/Decrypter IAM 角色 (
roles/cloudkms.cryptoKeyEncrypterDecrypter)。为您创建的密钥授予此权限。控制台
前往密钥管理。
选择您创建的密钥。
授予对 Gemini Code Assist 服务账号的访问权限:
- 点击添加主账号。
- 添加 Gemini Code Assist 服务账号。服务账号为
service-PROJECT_NUMBER@gcp-sa-cloudaicompanions.iam.gserviceaccount.com,其中 PROJECT_NUMBER 是已启用 Gemini Code Assist 的 Google Cloud 项目的项目编号。 - 在选择角色中,选择 Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter。
- 点击保存。
重复上一步,授予将使用 CMEK 创建代码库索引的账号的访问权限。
返回到密钥管理页面,然后重新选择密钥。
选择显示信息面板。您应该会在角色/成员列中看到角色。
gcloud CLI
如需向 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 项目的项目编号。
重复上一步,授予将使用 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
创建一个包含以下信息的 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 加密的代码库的访问权限:
- 使用Google Cloud 控制台或 gcloud CLI 从 Gemini Code Assist 服务账号撤消 Cloud KMS CryptoKey Encrypter/Decrypter 角色。
- 暂时停用 CMEK。
- 永久销毁 CMEK。
我们建议您先撤消 Gemini Code Assist 服务账号的权限,然后再停用或销毁密钥。权限的更改会在数秒内达成一致,因此您可以观察停用或销毁密钥造成的影响。