默认情况下,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 产品中的数据,需要进行额外配置。例如:
Cloud Storage:运行非自定义容器作业时,AI Platform Training 会从 Cloud Storage 存储分区中加载训练应用。此外,大多数训练作业还会将经过训练的模型工件(例如,TensorFlow SaveModel 目录)作为其输出的一部分导出到 Cloud Storage 存储分区。
为确保 Cloud Storage 中的数据使用 CMEK 进行加密,请参阅有关使用客户管理的加密密钥的 Cloud Storage 指南。您可以将加密密钥设置为与 AI Platform Training 结合使用的 Cloud Storage 存储分区的默认密钥,也可以使用它来加密特定对象。
Container Registry:运行自定义容器作业时,AI Platform Training 会从 Container Registry 中加载您的容器映像。
为确保您的容器映像使用 CMEK 进行加密,请参阅有关使用客户管理的加密密钥的 Container Registry 指南。
Cloud Logging:运行训练作业时,AI Platform Training 会将日志保存到 Logging。这些日志未使用 CMEK 进行加密。但是,如果您使用日志路由器,则可以为日志路由器创建的某些临时文件配置 CMEK。
限制
在以下情况下,您不能将 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 项目
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Cloud KMS API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Cloud KMS API.
设置 AI Platform 项目
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
设置 Google Cloud CLI
在本指南中的某些步骤中,必须使用 gcloud CLI,但此为可选步骤 。Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
创建密钥环和密钥
按照有关创建对称密钥的 Cloud KMS 指南,创建密钥环和密钥。创建密钥环时,请指定支持 AI Platform Training 的区域作为密钥环的位置。只有在训练作业和密钥使用同一区域时,AI Platform Training 才会支持 CMEK。您不得为密钥环指定双区域位置、多区域位置或全球位置。
请务必在 Cloud KMS 项目中创建密钥环和密钥。
授予 AI Platform Training 权限
如需将 CMEK 用于训练作业,您必须向 AI Platform Training 授予使用您的密钥加密和解密数据的权限。AI Platform Training 使用服务代理来运行您的训练作业。此服务人员由具有以下格式的电子邮件地址标识:
service-AI_PLATFORM_PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com
如需查找适合 AI Platform 项目的服务代理,请前往 Google Cloud 控制台中的 IAM 页面,找到与此电子邮件地址格式匹配的成员,并将 AI_PLATFORM_PROJECT_NUMBER 变量替换为 AI Platform 项目的项目编号。该服务代理的名称也将为 Google Cloud ML Engine Service Agent
。
记下此服务代理的电子邮件地址并在以下步骤中使用该地址,以授予该服务代理使用您的密钥加密和解密数据的权限。您可以使用 Google Cloud 控制台或使用 Google Cloud CLI 授予权限:
Google Cloud 控制台
在 Google Cloud 控制台中,转到加密密钥页面,然后选择您的 Cloud KMS 项目。
点击您在本指南的上一部分中创建的密钥环的名称,以转到密钥环详细信息页面。
选中您在本指南的上一部分中创建的密钥所对应的复选框。如果标有密钥名称的信息面板尚未打开,请点击显示信息面板。
在信息面板中,点击
添加成员以打开将成员添加到“KEY_NAME”对话框。在此对话框中,执行以下操作:- 在新成员框中,输入您在上一部分中记下的服务账号电子邮件地址:
service-AI_PLATFORM_PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com
在选择角色下拉列表中,点击 Cloud KMS,然后选择 Cloud KMS CryptoKey Encrypter/Decrypter 角色。
点击保存。
- 在新成员框中,输入您在上一部分中记下的服务账号电子邮件地址:
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
在此命令中,替换以下占位符:
使用 CMEK 创建训练作业
现在您已授予 AI Platform Training 使用您的密钥加密和解密数据的权限,接下来可以创建使用此密钥加密临时数据的训练作业。创建训练作业时,请在作业的 trainingInput
字段中指定 encryptionConfig
字段。
以下示例展示了如何使用 gcloud CLI 执行此操作。您目前无法在 Google Cloud 控制台中使用 CMEK 创建训练作业。
该示例假定您在名为 trainer
的目录中的本地文件系统上有一个训练应用,该训练应用有一个名为 task
的模块。
创建一个包含以下内容的
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:密钥的名称。
如需创建训练作业,请运行以下命令:
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.11 \ --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
您现在可以监控训练作业。
除了 region
和 encryptionConfig
字段之外,您还可以自定义训练作业配置以满足您的需求。您甚至可以使用自定义容器进行训练。
后续步骤
- 详细了解 Google Cloud 上的 CMEK。
- 了解如何将 CMEK 用于其他 Google Cloud 产品。
- 如需了解如何配置除 CMEK 之外的其他选项,请参阅运行训练作业指南。