客户管理的加密密钥 (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 加密。

将 CMEK 用于其他 Google Cloud 产品

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

当前 CMEK 支持的资源

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

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

限制

CMEK 对预览版功能的支持也处于预览版状态。

您无法将 CMEK 用于:

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

  • AutoML 预测

为您的资源配置 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. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Cloud KMS API。

    启用 API

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

    转到“项目选择器”

  6. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  7. 启用 Cloud KMS API。

    启用 API

设置 AI Platform 项目

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

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Vertex AI API。

    启用 API

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

    转到“项目选择器”

  6. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  7. 启用 Vertex AI API。

    启用 API

设置 gcloud 命令行工具

gcloud 工具对于本指南中的某些步骤是必需的,对于其他步骤则是可选的。 安装并初始化 Cloud SDK

创建密钥环和密钥

按照有关创建对称密钥的 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 Console 中的 IAM 页面,找到与此电子邮件地址格式匹配的成员,并使用 AI Platform 项目的项目编号替换 AI_PLATFORM_PROJECT_NUMBER 变量。该服务帐号的名称也将为 Vertex AI Service Agent

转到 IAM 页面

记下此服务帐号的电子邮件地址并在以下步骤中使用该地址,以授予该服务帐号使用您的密钥加密和解密数据的权限。您可以使用 Google Cloud Console 或使用 gcloud 命令行工具授予权限:

Cloud Console

  1. 在 Cloud Console 中,转到加密密钥页面,然后选择您的 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 Console 的 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 客户端文档。

后续步骤