本文档介绍如何使用客户管理的加密密钥 (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 来提供该密钥。
为 Gemini Code Assist 服务账号授予 CryptoKey Encrypter/Decrypter IAM 角色 (
roles/cloudkms.cryptoKeyEncrypterDecrypter
)。为您创建的密钥授予此权限。控制台
前往密钥管理。
选择您创建的密钥。
授予对 Gemini Code Assist 服务账号的访问权限:
- 点击添加主账号。
- 添加 Gemini Code Assist 服务账号。服务账号为
service-PROJECT_NUMBER@gcp-sa-cloudaicompanions.
,其中 PROJECT_NUMBER 是已启用 Gemini Code Assist 的 Google Cloud 项目的项目编号。 - 在选择角色中,选择 Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter。
- 点击保存。
重复上一步,授予将使用 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 服务账号的权限,然后再停用或销毁密钥。权限的更改会在数秒内达成一致,因此您可以观察停用或销毁密钥造成的影响。