使用客户管理的加密密钥加密数据

本文档介绍如何使用客户管理的加密密钥 (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)

准备工作

  1. 在以下开发环境之一中,设置 gcloud CLI:

    如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  2. 在 shell 环境中,运行 gcloud components update 命令,以确保您已将 gcloud 的所有已安装组件更新到最新版本。在此步骤中,您可以安装并初始化 gcloud,也可以使用 Cloud Shell

    gcloud components update
    

创建 CMEK 并授予权限

如需创建 CMEK 并向 Gemini Code Assist 服务账号授予密钥权限,请执行以下任务:

  1. 在您要用于管理密钥的 Google Cloud 项目中,执行以下操作:

    1. 启用 Cloud Key Management Service API

    2. 使用以下选项之一创建密钥环和密钥:

  2. 为 Gemini Code Assist 服务账号授予 CryptoKey Encrypter/Decrypter IAM 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。为您创建的密钥授予此权限。

    控制台

    1. 前往密钥管理

      前往密钥管理

    2. 选择您创建的密钥。

    3. 授予对 Gemini Code Assist 服务账号的访问权限:

      1. 点击添加主账号
      2. 添加 Gemini Code Assist 服务账号。服务账号为 service-PROJECT_NUMBER@gcp-sa-cloudaicompanions.,其中 PROJECT_NUMBER 是已启用 Gemini Code Assist 的 Google Cloud 项目的项目编号
      3. 选择角色中,选择 Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter
      4. 点击保存
    4. 重复上一步,授予将使用 CMEK 创建代码库索引的账号的访问权限。

    5. 返回到密钥管理页面,然后重新选择密钥。

    6. 选择显示信息面板。您应该会在角色/成员列中看到角色。

    gcloud

    1. 如需向 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 项目的项目编号
    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 服务账号的权限,然后再停用或销毁密钥。权限的更改会在数秒内达成一致,因此您可以观察停用或销毁密钥造成的影响。