默认情况下,Cloud Data Fusion 会对静态客户内容进行加密。Cloud Data Fusion 会为您处理加密,您无需执行任何其他操作。此选项称为“Google 默认加密” 。
如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Cloud Data Fusion)搭配使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。 使用 Cloud KMS 还可让您跟踪密钥使用情况、查看审核日志以及控制密钥生命周期。 这样您就可以在 Cloud KMS 中控制和管理用于保护数据的对称 密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。
使用 CMEK 设置资源后,访问您的 Cloud Data Fusion 资源的体验与使用 Google 默认加密功能类似。 如需详细了解加密 选项,请参阅客户管理的加密密钥 (CMEK)。
Cloud Data Fusion 支持跟踪 Instance 资源的 Cloud KMS 密钥使用情况。
CMEK 可让您控制写入到 租户项目 中的 Google 内部资源的数据以及由 Cloud Data Fusion 流水线写入的数据,包括:
- 流水线日志和元数据
- Managed Service for Apache Spark 集群元数据
- 各种 Cloud Storage、BigQuery、Pub/Sub 和 Spanner 数据接收器、操作和来源
Cloud Data Fusion 资源
如需查看支持 CMEK 的 Cloud Data Fusion 插件 列表,请参阅支持的插件。
Cloud Data Fusion 支持将 CMEK 用于 Managed Service for Apache Spark 集群。 Cloud Data Fusion 会创建临时 Managed Service for Apache Spark 集群以供在流水线中使用,然后在流水线完成时删除集群。 CMEK 会保护写入以下位置的集群元数据:
- 连接到集群虚拟机的永久性磁盘 (PD)。
- 写入自动创建或 用户创建的 Managed Service for Apache Spark 暂存存储桶的作业驱动程序输出和其他元数据。
设置 CMEK
创建 Cloud KMS 密钥
创建 Cloud KMS 密钥在 Google Cloud 包含 Cloud Data Fusion 实例的项目中 或在单独的用户项目中。Cloud KMS 密钥环的位置 必须与您创建实例的区域相匹配。由于 Cloud Data Fusion 始终与特定区域相关联,因此不允许在实例级使用多区域或 全球区域密钥。
获取密钥的资源名称
REST API
使用以下命令获取您创建的密钥的资源名称:
projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
替换以下内容:
- PROJECT_ID:托管 Cloud Data Fusion 实例的客户项目
- REGION:靠近您位置的 Google Cloud 区域,例如
us-east1 - KEY_RING_NAME:将加密密钥分组到一起的密钥环的名称
- KEY_NAME:Cloud KMS 密钥名称
控制台
前往密钥管理 页面。
点击密钥旁边的更多 。
选择复制资源名称,将资源名称复制到剪贴板。
更新项目的服务账号以使用密钥
设置项目的服务账号以使用您的密钥:
必需:将 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (
roles/cloudkms.cryptoKeyEncrypterDecrypter) 授予 Cloud Data Fusion 服务代理(请参阅将角色授予特定资源的服务账号)。此账号采用以下格式:service-PROJECT_NUMBER@gcp-sa-datafusion.iam.gserviceaccount.com通过向 Cloud Data Fusion 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色,Cloud Data Fusion 能够使用 CMEK 加密存储在租户项目中的任何客户数据。
必需:向 Compute Engine 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色(请参阅将 Cloud KMS 密钥分配给 Cloud Storage 服务账号)。此账号默认情况下会被授予 Compute Engine 服务代理角色,其格式如下:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com通过将 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Compute Engine 服务代理,可让 Cloud Data Fusion 使用 CMEK 来加密 Managed Service for Apache Spark 集群写入的永久性磁盘 (PD) 元数据流水线。
必需:向 Cloud Storage 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色(请参阅将 Cloud KMS 密钥分配给 Cloud Storage 服务代理)。此服务代理的格式如下:
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com通过向 Cloud Storage 服务代理授予此角色,Cloud Data Fusion 可以使用 CMEK 来加密 Cloud Storage 存储桶(用于存储和缓存流水线信息和数据)以及写入 Managed Service for Apache Spark 集群暂存存储桶的数据,以及流水线使用的项目中任何其他 Cloud Storage 存储桶。
必需:向 Google Cloud Dataproc 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色 。此服务代理的格式如下:
service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com可选:如果您的流水线使用 BigQuery 资源,请将 Cloud KMS CryptoKey Encrypter/Decrypter 角色 授予 BigQuery 服务帐号(请参阅授予加密和解密权限)。该账号的格式如下:
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com可选:如果您的流水线使用 Pub/Sub 资源,请将 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Pub/Sub 服务账号(请参阅使用客户管理的加密密钥)。该账号的格式如下:
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com可选:如果您的流水线使用 Spanner 资源,请向 Spanner 服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色。该账号的格式如下:
service-PROJECT_NUMBER@gcp-sa-spanner.iam.gserviceaccount.com
使用 CMEK 创建 Cloud Data Fusion 实例
CMEK 在 Cloud Data Fusion 6.5.0 版及更高版本的所有版本中均可用。
REST API
如需创建具有客户管理的加密密钥的实例,请设置以下环境变量:
export PROJECT=PROJECT_ID export LOCATION=REGION export INSTANCE=INSTANCE_ID export DATA_FUSION_API_NAME=datafusion.googleapis.com export KEY=KEY_NAME替换以下内容:
- PROJECT_ID:托管 Cloud Data Fusion 实例的客户项目
- REGION:靠近您位置的区域,例如
us-east1Google Cloud - INSTANCE_ID: Cloud Data Fusion 实例的名称
- KEY_NAME:CMEK 密钥的完整资源名称
运行以下命令创建 Cloud Data Fusion 实例:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://$DATA_FUSION_API_NAME/v1/projects/$PROJECT/locations/$LOCATION/instances?instance_id=INSTANCE -X POST -d '{"description": "CMEK-enabled CDF instance created through REST.", "type": "BASIC", "cryptoKeyConfig": {"key_reference": "$KEY"} }'
控制台
检查实例是否启用了 CMEK
控制台
查看实例详细信息:
在 Google Cloud 控制台中,前往 Cloud Data Fusion 页面。
点击实例,然后点击实例名称以前往实例详情页面。
如果启用了 CMEK,加密密钥 字段会显示为可用 。
如果停用了 CMEK,加密密钥 字段会显示为不可用 。
搭配使用 CMEK 与支持的插件
设置加密密钥名称时,请使用以下格式:
projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

下表介绍了支持 CMEK 的 Cloud Data Fusion 插件中的密钥的行为。
| 支持的插件 | 密钥的行为 |
|---|---|
| Cloud Data Fusion 接收器 | |
| Cloud Storage | 加密写入由插件创建的任何存储桶的数据。如果该存储桶 已存在,则系统会忽略此值。 |
| Cloud Storage multi-file | 加密写入由插件创建的任何存储桶的数据。 |
| BigQuery | 加密写入由插件创建的任何存储桶、数据集或表的数据。 |
| BigQuery multi-table | 加密写入由插件创建的任何存储桶、数据集或表的数据。 |
| Pub/Sub | 加密写入由插件创建的任何主题的数据。如果主题已存在,则系统会忽略此值。 |
| Spanner | 加密写入由插件创建的任何数据库的数据。如果数据库已存在,则系统会忽略此值。 |
| Cloud Data Fusion 操作 | |
|
Cloud Storage 创建 Cloud Storage 复制 Cloud Storage 移动 Cloud Storage 完成文件标记 |
加密写入由插件创建的任何存储桶的数据。如果该存储桶已存在,则系统会忽略此值。 |
| BigQuery Execute | 加密写入插件创建的用于存储查询结果的数据集或表的数据。仅当您将查询结果存储在 BigQuery 表中时,此选项才适用。 |
| Cloud Data Fusion 来源 | |
| BigQuery 来源 | 加密写入由插件创建的任何存储桶的数据。如果该存储桶已存在,则系统会忽略此值。 |
| Cloud Data Fusion SQL 引擎 | |
| BigQuery 下推式引擎 | 加密写入由 插件 创建的任何存储桶、数据集或表的数据。 |
搭配使用 CMEK 与 Managed Service for Apache Spark 集群元数据
预先创建的计算配置文件使用在实例 创建期间提供的 CMEK 密钥来加密 Persistent Disk (PD) 和 由流水线中运行的 Managed Service for Apache Spark 集群写入的暂存存储桶 元数据。您可以通过执行以下操作之一进行修改以使用其他密钥:
- 建议:创建新的 Managed Service for Apache Spark 计算配置文件 (仅限企业版)。
- 修改现有 Managed Service for Apache Spark 计算配置文件(开发者版、基本版或企业版)。
控制台
打开 Cloud Data Fusion 实例:
在 Google Cloud 控制台中,前往 Cloud Data Fusion 页面。
如需在 Cloud Data Fusion Studio 中打开实例,请点击实例,然后点击查看实例。
依次点击系统管理员 > 配置。
点击系统计算配置文件 下拉列表。
点击创建新配置文件 ,然后选择 Managed Service for Apache Spark 。
输入配置文件标签 、配置文件名称 和说明 。
默认情况下,每当 Cloud Data Fusion 创建临时集群时,Managed Service for Apache Spark 都会创建 暂存存储分区和临时存储分区。Cloud Data Fusion 支持在计算配置文件中将 Managed Service for Apache Spark 暂存存储桶作为实参传递。 如需加密暂存存储桶,请创建一个启用 CMEK 的存储桶,并在计算配置文件中将其作为实参传递给 Managed Service for Apache Spark。
默认情况下,Cloud Data Fusion 会自动创建一个 Cloud Storage 存储桶,用于暂存 Managed Service for Apache Spark 使用的依赖项。 如果您希望使用项目中已有的 Cloud Storage 存储桶,请按照以下步骤操作:
在常规设置 部分的 Cloud Storage 存储桶 字段中输入现有的 Cloud Storage 存储桶。
获取 Cloud KMS 密钥的资源 ID。在常规设置部分的加密密钥名称字段中,输入您的资源 ID。
点击创建 。
如果配置 标签页的系统计算配置文件 部分中列出了多个配置文件,请将新的 Managed Service for Apache Spark 配置文件设置为默认配置文件,方法是将鼠标指针放在配置文件名称字段上,然后点击显示的星形图标。
搭配使用 CMEK 与其他资源
在创建 Cloud Data Fusion 实例期间,提供的 CMEK 密钥被设置为系统偏好设置。它用于加密流水线接收器(例如 Cloud Storage、BigQuery、Pub/Sub 或 Spanner 接收器)写入新创建的资源的数据。
此密钥仅适用于新创建的资源。如果资源在流水线执行之前已存在,您应该手动将 CMEK 密钥应用于这些现有资源。
您可以通过执行以下操作之一更改 CMEK 密钥:
- 使用运行时参数。
- 设置 Cloud Data Fusion 系统偏好设置。
运行时参数
- 在 Cloud Data Fusion 流水线 Studio页面中,点击运行按钮右侧的向下箭头。
- 在名称字段中,输入
gcp.cmek.key.name。 - 在值字段中,输入密钥的资源 ID。
点击保存。
您在此处设置的运行时参数仅适用于目前运行的流水线。
偏好设置
- 在 Cloud Data Fusion 界面中,点击系统管理员。
- 点击配置标签。
- 点击系统偏好设置下拉列表。
- 点击修改系统偏好设置。
- 在密钥字段中,输入
gcp.cmek.key.name。 - 在值字段中,输入密钥的资源 ID。
- 点击保存并关闭。
