客户管理的加密密钥 (CMEK)

默认情况下,Google Cloud 会使用 Google 管理的加密密钥自动加密静态数据。如果您对保护数据的密钥有特定的合规性或监管要求,则可以将客户管理的加密密钥 (CMEK) 用于资源。

您可以在本指南的以下部分中详细了解将 CMEK 用于 Vertex AI 资源的具体好处。如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud Key Management Service 文档

本指南介绍了将 CMEK 用于 Vertex AI 资源的一些好处,并逐步介绍了如何将训练作业配置为使用 CMEK。

适用于 Vertex AI 资源的 CMEK

以下部分介绍了在为作业配置 CMEK 之前必须了解的适用于 Vertex AI 资源的 CMEK 的基本信息。

CMEK 的优势

一般来说,如果您需要完全控制用于加密数据的密钥,则 CMEK 最有用。借助 CMEK,您可以在 Cloud KMS 中管理密钥。例如,您可以轮替或停用密钥,也可以使用 Cloud KMS API 设置轮替时间表。如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud KMS 文档

当您运行 AutoML自定义 训练作业时,您的代码会在由 Vertex AI 管理的一个或多个虚拟机 (VM) 实例上运行。为 Vertex AI 启用 CMEK 后,您指定的密钥(而不是由 Google 管理的密钥)将用于加密这些虚拟机的启动磁盘上的数据。CMEK 密钥会加密以下类型的数据:

  • 虚拟机上代码的副本。
  • 由代码加载的所有数据。
  • 由代码保存到本地磁盘的所有临时数据。
  • AutoML 训练的模型。
  • 上传到媒体数据集中的媒体文件(数据)。

一般来说,CMEK 密钥不会加密与您的操作关联的元数据,例如作业的名称和区域,或数据集的显示名。与操作关联的元数据始终使用 Google 的默认加密机制进行加密。

对于数据集,当用户将数据导入到数据集中时,数据项和注释均采用 CMEK 加密。数据集显示名不采用 CMEK 加密。

对于模型,存储系统中存储的模型(例如磁盘)均经过 CMEK 加密。所有模型评估结果都采用 CMEK 加密。

对于端点,端点下的模型部署使用的所有模型文件都经过 CMEK 加密。这不包括任何内存数据。

对于批量预测,用于执行批量预测作业的任何临时文件(例如,模型文件、日志、虚拟机磁盘)均采用 CMEK 加密。批量预测结果存储在用户提供的目标位置中。因此,Vertex AI 会遵循目标加密配置的默认值。否则,结果也将使用 CMEK 加密。

对于数据标签,任何输入文件(图片、文本、视频、表格)、临时讨论(例如问题、反馈)和输出(标签结果)都经过 CMEK 加密。注释规范显示名不经过 CMEK 加密。

外部密钥

您可以使用 Cloud External Key Manager (Cloud EKM) 创建您管理的外部密钥来加密 Google Cloud 中的数据。

当您使用 Cloud EKM 密钥时,Google 无法控制外部管理的密钥的可用性。如果您请求访问使用外部管理的密钥加密的资源,但该密钥不可用,则 Vertex AI 将拒绝该请求。密钥可用后,最多可能有 10 分钟的延迟您才能访问该资源。

如需了解使用外部密钥的更多注意事项,请参阅 Cloud External Key Manager

将 CMEK 用于其他 Google Cloud 产品

为 Vertex AI 资源配置 CMEK 时,不会自动为与 Vertex AI 一起使用的其他 Google Cloud 产品配置 CMEK。如需使用 CMEK 加密其他 Google Cloud 产品中的数据,需要进行额外配置。例如:

当前 CMEK 支持的资源

CMEK 涵盖的当前 Vertex AI 资源如下。CMEK 对预览版功能的支持也处于预览版状态。

资源 已加密材料 文档链接
数据集
  • DataItemsAnnotations 的所有用户导入的数据(例如文本内容或视频)。
  • 用户创建的内容,例如 AnnotationSpecsColumnSpecs
模型
  • 已上传模型文件。
  • 已训练模型的评估结果。
端点
  • 用于端点下部署的模型的所有模型文件。这不包括任何内存数据,但停用密钥后,模型会自动取消部署。
CustomJob(不包括使用 TPU 虚拟机的资源)
  • 用于运行该操作的虚拟机上的代码副本。
  • 由代码加载的所有数据。
  • 由代码保存到本地磁盘的所有临时数据。
HyperparameterTuningJob(不包括使用 TPU 虚拟机的资源)
  • 用于运行该操作的虚拟机上的代码副本。
  • 由代码加载的所有数据。
  • 由代码保存到本地磁盘的所有临时数据。
TrainingPipeline(不包括使用 TPU 虚拟机的资源)
  • 用于运行该操作的虚拟机上的代码副本。
  • 由代码加载的所有数据。
  • 由代码保存到本地磁盘的所有临时数据。
  • AutoML 训练的模型。
BatchPredictionJob(不包括 AutoML image batchPrediction)
  • 作业中用于执行批量预测作业的任何临时文件(例如,模型文件、日志、虚拟机磁盘)。
  • 如果 BatchPrediction 的写入结果存储在用户提供的目标位置中,则它会遵守默认值的加密配置。否则,它也会使用 CMEK 加密。
ModelDeploymentMonitoringJob
  • 作业中用于处理模型部署监控作业的任何临时文件(例如,训练数据集文件、日志、虚拟机磁盘)。
  • 用于检测监控异常的任何数据。
  • 如果密钥已停用,则模型部署监控作业将被暂停。
PipelineJob
  • 流水线作业及其所有子资源。
MetadataStore
  • 元数据存储区中的所有内容。
TensorBoard
  • 来自上传的 TensorBoard 日志的所有数据,包括标量、直方图、图表定义、图片和文本。
特征存储区
  • 特征存储区和特征存储区中的所有内容。

CMEK 对生成式 AI 调整流水线的支持

以下模型的调整流水线提供了 CMEK 支持:

  • text-bison for PaLM 2 (GPU)
  • BERT
  • T5
  • image-generation (GPU)

限制

以下各项不提供 CMEK 支持:

  • AutoML 图片模型批量预测 (BatchPredictionJob)
  • TPU 调整

为您的资源配置 CMEK

以下部分介绍了如何在 Cloud Key Management Service 中创建密钥环和密钥、为 Vertex AI 加密者和解密者授予对密钥的权限,以及创建使用 CMEK 的资源。

准备工作

本指南假设您使用两个单独的 Google Cloud 项目为 Vertex AI 数据配置 CMEK:

  • 一个项目用于管理加密密钥(称为“Cloud KMS 项目”)。
  • 一个项目用于访问 Vertex AI 数据或 Cloud Storage 中的输出,以及与您的用例所需的任何其他 Google Cloud 产品(称为“AI Platform 项目”)进行交互。

此推荐设置支持职责分离

或者,您也可以在整个指南中使用单个 Google Cloud 项目。为此,请对引用 Cloud KMS 项目的以下所有任务和引用 AI Platform 项目的任务使用同一项目。

设置 Cloud KMS 项目

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Cloud KMS API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 Cloud KMS API。

    启用 API

设置 AI Platform 项目

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Vertex AI API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 Vertex AI API。

    启用 API

设置 Google Cloud CLI

gcloud CLI 对于本指南中的某些步骤是必需的,对于其他步骤则是可选的。

安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

gcloud init

创建密钥环和密钥

按照有关创建对称密钥的 Cloud KMS 指南,创建密钥环和密钥。创建密钥环时,请指定支持 Vertex AI 操作的区域作为密钥环的位置。只有在资源和密钥使用同一区域时,Vertex AI 才会支持 CMEK。您不得为密钥环指定双区域位置、多区域位置或全球位置。

请务必在 Cloud KMS 项目中创建密钥环和密钥。

授予 Vertex AI 权限

如需将 CMEK 用于您的资源,您必须向 Vertex AI 授予使用您的密钥加密和解密数据的权限。Vertex AI 使用 Google 管理的服务代理来运行使用您的资源的操作。此服务账号由具有以下格式的电子邮件地址标识:

service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

要查找 AI Platform 项目的适当服务账号,请转到 Google Cloud 控制台中的 IAM 页面,找到与此电子邮件地址格式匹配的成员,并使用 AI Platform 项目的项目编号替换 AI_PLATFORM_PROJECT_NUMBER 变量。该服务账号的名称也将为 Vertex AI Service Agent

转到 IAM 页面

记下此服务账号的电子邮件地址并在以下步骤中使用该地址,以授予该服务账号使用您的密钥加密和解密数据的权限。您可以使用 Google Cloud 控制台或使用 Google Cloud CLI 授予权限:

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,点击“安全”,然后选择密钥管理。您将会进入加密密钥页面,然后选择您的 Cloud KMS 项目。

    打开“加密密钥”页面

  2. 点击您在本指南的上一部分中创建的密钥环的名称,以转到密钥环详细信息页面。

  3. 选中您在本指南的上一部分中创建的密钥所对应的复选框。如果标有密钥名称的信息面板尚未打开,请点击显示信息面板

  4. 在信息面板中,点击添加成员以打开将成员添加到“KEY_NAME对话框。在此对话框中,执行以下操作:

    1. 新成员框中,输入您在上一部分中记下的服务账号电子邮件地址:service-AI_PLATFORM_PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com
    2. 选择角色下拉列表中,点击 Cloud KMS,然后选择 Cloud KMS CryptoKey Encrypter/Decrypter 角色。

    3. 点击保存

gcloud

运行以下命令:

gcloud kms keys add-iam-policy-binding KEY_NAME \
  --keyring=KEY_RING_NAME \
  --location=REGION \
  --project=KMS_PROJECT_ID \
  --member=serviceAccount:service-AI_PLATFORM_PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com \
  --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

在此命令中,替换以下占位符:

  • KEY_NAME:您在本指南的上一部分中创建的密钥的名称。
  • KEY_RING_NAME:您在本指南的上一部分中创建的密钥环。
  • REGION:您创建密钥环的地区。
  • KMS_PROJECT_ID:Cloud KMS 项目的 ID。
  • AI_PLATFORM_PROJECT_NUMBER:您在上一部分中记下的 AI Platform 项目的项目编号,您在服务账号电子邮件地址中记下了该项目编号。

使用 KMS 密钥创建资源

在创建新的 CMEK 支持的资源时,您可以将密钥指定为创建参数之一。

控制台

Google Cloud 控制台的 Vertex AI 部分中创建新的支持 CMEK 的资源时,您可以在常规或高级选项部分中选择您的密钥:

为资源部分选择加密密钥

REST 和命令行

创建支持的资源时,请在请求中添加 encryptionSpec 对象,并将 encryptionSpec.kmsKeyName 字段设置为指向您的密钥资源。

例如,创建 dataset 资源时,您需要在请求正文中指定密钥:

 {
   "displayName": DATASET_NAME,
   "metadataSchemaUri": METADATA_URI,
   "encryptionSpec": {
     "kmsKeyName": "projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME"
   }
 }

Java

创建受支持的资源时,请将 EncryptionSpec 设置为指向密钥资源。如需了解详情,请参阅 Java 版 Vertex AI 客户端库文档。

Node.js

创建受支持的资源时,请将 encryptionSpec 参数设置为指向密钥资源。如需了解详情,请参阅 Node.js 版 Vertex AI 客户端库文档。

Python

创建受支持的资源时,请将 encryption_spec 参数设置为指向密钥资源。如需了解详情,请参阅适用于 Cloud AI Platform 的 Python 客户端文档。

后续步骤