借助 CMEK,您可以使用自己能够通过 Cloud KMS 控制的密钥对静态数据进行加密。CMEK 让用户可以控制写入到租户项目中的 Google 内部资源的数据以及由 Cloud Data Fusion 流水线写入的数据,包括:
- 流水线日志和元数据
- Dataproc 集群元数据
- 各种 Cloud Storage、BigQuery、Pub/Sub 和 Spanner 数据接收器、操作和来源
Cloud Data Fusion 资源
如需查看支持 CMEK 的 Cloud Data Fusion 插件列表,请参阅支持的插件。
Cloud Data Fusion 支持将 CMEK 用于 Dataproc 集群。Cloud Data Fusion 会创建临时 Dataproc 集群以供在流水线中使用,然后在流水线完成时删除集群。CMEK 会保护写入以下位置的集群元数据:
- 连接到集群虚拟机的永久性磁盘 (PD)。
- 写入自动创建或用户创建的 Dataproc 暂存存储桶的作业驱动程序输出和其他元数据。
设置 CMEK
创建 Cloud KMS 密钥
在以下位置创建 Cloud KMS 密钥: 包含 Cloud Data Fusion 实例的 Google Cloud 项目 还是位于单独的用户项目中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 Agent 角色,其格式如下:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
通过将 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Compute Engine 服务代理,可让 Cloud Data Fusion 使用 CMEK 来加密 Dataproc 写入的永久性磁盘 (PD) 元数据流水线。
必需:向 Cloud Storage 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色(请参阅将 Cloud KMS 密钥分配给 Cloud Storage Service Agent)。此服务代理的格式如下:
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
如果向 Cloud Storage 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色,则 Cloud Data Fusion 可以使用 CMEK 对写入 Dataproc 集群暂存存储分区以及流水线使用的任何其他 Cloud Storage 资源的数据进行加密。
必需:授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色 Google Cloud Dataproc 服务代理。此服务代理的格式如下:
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 实例
Cloud Data Fusion 6.5.0 版及更高版本的所有版本均支持 CMEK。
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-east1
- 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 与 Dataproc 集群元数据
预先创建的计算配置文件使用在实例创建期间提供的 CMEK 密钥来加密 Persistent Disk (PD) 和由流水线中运行的 Dataproc 集群写入的暂存存储桶元数据。您可以通过执行以下操作之一进行修改以使用其他密钥:
- 建议:创建新的 Dataproc 计算配置文件(仅限企业版)。
- 修改现有 Dataproc 计算配置文件(开发者版、基本版或企业版)。
控制台
打开 Cloud Data Fusion 实例:
在 Google Cloud 控制台中,转到 Cloud Data Fusion 页面。
如需在 Cloud Data Fusion Studio 中打开实例,请点击实例,然后点击查看实例。
依次点击系统管理员 > 配置。
点击系统计算配置文件下拉列表。
点击创建新的付款资料,然后选择 Dataproc。
输入配置文件标签、配置文件名称和说明。
默认情况下,每当 Cloud Data Fusion 创建临时集群时,Dataproc 都会创建暂存存储分区和临时存储分区。Cloud Data Fusion 支持将 Dataproc 暂存存储桶作为计算配置文件中的参数传递。 如需加密暂存存储桶,请创建一个启用了 CMEK 的存储桶,并将其作为参数在计算配置文件中传递给 Dataproc。
默认情况下,Cloud Data Fusion 会自动创建 Cloud Storage 存储桶,以暂存 Dataproc 使用的依赖项。如果您希望使用项目中已存在的 Cloud Storage 存储桶,请按照以下步骤操作:
在常规设置部分的 Cloud Storage 存储分区字段中输入现有的 Cloud Storage 存储分区。
获取 Cloud KMS 密钥的资源 ID。在常规设置部分的加密密钥名称字段中,输入您的资源 ID。
点击创建。
如果配置标签页的系统计算配置文件部分中列出了多个配置文件,请将新的 Dataproc 配置文件设置为默认配置文件,方法是将鼠标指针放在配置文件名称字段上,然后点击显示的星形图标。
搭配使用 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。
- 点击保存并关闭。