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

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

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

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

了解适用于 AI Platform Training 的 CMEK

以下部分介绍了在为训练作业配置 CMEK 之前必须了解的有关将 CMEK 用于 AI Platform Training 的基本信息。

CMEK 的优势

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

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

  • 虚拟机上训练代码的副本。
  • 由训练代码加载的所有数据。
  • 由训练代码保存到本地磁盘的所有临时数据。

CMEK 密钥不会加密与训练作业关联的元数据,例如作业的名称和区域。与训练作业关联的元数据始终使用 Google 的默认加密机制进行加密。

将 CMEK 用于其他 Google Cloud 产品

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

限制

在以下情况下,您不能将 CMEK 用于 AI Platform Training:

  • 您不能将 CMEK 用于使用 TPU 的训练作业
  • 如果您在 2017 年或更早的时候开始使用 AI Platform Training and Prediction API 并通过 CMEK 提交训练作业,则可能会遇到描述中提及不兼容的旧式身份验证机制的错误。在这种情况下,请创建新的 Google Cloud 项目或选择其他项目来运行 AI Platform Training 作业。

为训练作业配置 CMEK

以下部分介绍了如何在 Cloud KMS 中创建密钥环和密钥,向 AI Platform Training 加密者和解密者授予针对密钥的权限,以及创建使用 CMEK 的训练作业。

准备工作

本指南假设您使用两个单独的 Google Cloud 项目来配置 CMEK 以进行训练:

  • 一个项目用于管理加密密钥(称为“Cloud KMS 项目”)。
  • 一个项目用于访问 AI Platform Training、管理 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. 启用 AI Platform Training & Prediction API。

    启用 API

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

    转到“项目选择器”

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

  7. 启用 AI Platform Training & Prediction API。

    启用 API

设置 gcloud 命令行工具

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

创建密钥环和密钥

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

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

授予 AI Platform Training 权限

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

service-AI_PLATFORM_PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com

要查找 AI Platform 项目的适当服务帐号,请转到 Google Cloud Console 中的 IAM 页面,找到与此电子邮件地址格式匹配的成员,并使用 AI Platform 项目的项目编号替换 AI_PLATFORM_PROJECT_NUMBER 变量。该服务帐号的名称也将为 Google Cloud ML Engine 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@cloud-ml.google.com.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@cloud-ml.google.com.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 项目的项目编号,您在服务帐号电子邮件地址中记下了该项目编号。

使用 CMEK 创建训练作业

现在您已授予 AI Platform Training 使用您的密钥加密和解密数据的权限,接下来可以创建使用此密钥加密临时数据的训练作业。创建训练作业时,请在作业的 trainingInput 字段中指定 encryptionConfig 字段

以下示例展示了如何使用 gcloud 工具执行此操作。您目前无法在 Cloud Console 中使用 CMEK 创建训练作业。

该示例假定您在名为 trainer 的目录中的本地文件系统上有一个训练应用,该训练应用有一个名为 task 的模块。

  1. 创建一个包含以下内容的 config.yaml 配置文件:

    trainingInput:
      encryptionConfig:
        kmsKeyName: projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

    在该配置文件中,替换以下占位符:

    • KMS_PROJECT_ID:Cloud KMS 项目的 ID。
    • KEY_RING_NAME:密钥环的名称。
    • KEY_NAME:密钥的名称。
  2. 如需创建训练作业,请运行以下命令:

    gcloud ai-platform jobs submit training JOB_ID \
      --config=config.yaml \
      --job-dir=JOB_DIR \
      --module-name=trainer.task \
      --package-path=trainer \
      --python-version=3.7 \
      --region=REGION \
      --runtime-version=2.6 \
      --scale-tier=basic
    

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

    • JOB_ID:您为作业选择的名称。
    • JOB_DIR:Cloud Storage 目录的路径,您的训练应用将上传到该目录。训练作业还可以在训练期间使用此目录;例如,用于保存输出。为方便起见,请在 AI Platform 项目的 Cloud Storage 存储分区中选择一个目录。

    • REGION:创建密钥环的地区以及计划创建训练作业的地区。

    如果成功,则该命令会生成以下输出:

    Job [JOB_ID] submitted successfully.
    Your job is still active. You may view the status of your job with the command
    
      $ gcloud ai-platform jobs describe JOB_ID
    
    or continue streaming the logs with the command
    
      $ gcloud ai-platform jobs stream-logs JOB_ID
    jobId: JOB_ID
    state: QUEUED
    

    您现在可以监控训练作业

除了 regionencryptionConfig 字段之外,您还可以自定义训练作业配置以满足您的需求。您甚至可以使用自定义容器进行训练

后续步骤