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

本页面介绍了如何将 Cloud Key Management Service (Cloud KMS) 加密密钥与 Cloud Data Fusion 搭配使用。

借助 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 Data Fusion 实例的 Google Cloud 项目中或在单独的用户项目中创建 Cloud KMS 密钥。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_NAMECloud KMS 密钥名称

控制台

  1. 转到加密密钥页面。

    转到加密密钥

  2. 点击密钥旁边的更多

  3. 选择复制资源名称,将资源名称复制到剪贴板。

更新项目的服务账号以使用密钥

设置项目的服务账号以使用您的密钥:

  1. 必需:将 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 加密存储在租户项目中的任何客户数据。

  2. 必需:向 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) 元数据流水线。

  3. 必需:向 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 资源的数据进行加密。

  4. 必需:向 Google Cloud Dataproc 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色。此服务代理的形式如下:

    service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com

  5. 可选:如果您的流水线使用 BigQuery 资源,请将 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 BigQuery 服务账号(请参阅授予加密和解密权限)。该账号的格式如下:

    bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com

  6. 可选:如果您的流水线使用 Pub/Sub 资源,请将 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Pub/Sub 服务账号(请参阅使用客户管理的加密密钥)。该账号的格式如下:

    service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com

  7. 可选:如果您的流水线使用 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

  1. 如需创建具有客户管理的加密密钥的实例,请设置以下环境变量:

    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:靠近您位置的 Google Cloud 区域,例如 us-east1
    • INSTANCE_ID:Cloud Data Fusion 实例的名称
    • KEY_NAMECMEK 密钥的完整资源名称
  2. 运行以下命令创建 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"} }'
    

控制台

  1. 转到 Cloud Data Fusion 页面。

  2. 点击实例,然后点击创建实例

    转到实例

  3. 高级选项中,选择使用客户管理的加密密钥 (CMEK)

  4. 选择客户管理的密钥字段中,选择密钥的资源名称

    选择加密密钥名称

  5. 输入所有实例详细信息后,点击创建。当实例可供使用时,会显示在实例页面上。

检查实例是否启用了 CMEK

控制台

查看实例详情:

  1. 在 Google Cloud 控制台中,转到 Cloud Data Fusion 页面。

  2. 点击实例,然后点击相应实例的名称以转到实例详情页面。

    转到实例

如果启用了 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 计算配置文件(开发者版、基本版或企业版)。

控制台

  1. 打开 Cloud Data Fusion 实例:

    1. 在 Google Cloud 控制台中,转到 Cloud Data Fusion 页面。

    2. 如需在 Cloud Data Fusion 网页界面中打开实例,请点击实例,然后点击查看实例

      转到实例

  2. 点击系统管理员 > 配置

  3. 点击系统计算配置文件下拉列表。

  4. 点击创建新的配置文件,然后选择 Dataproc

  5. 输入配置文件标签配置文件名称说明

  6. 默认情况下,每当 Cloud Data Fusion 创建临时集群时,Dataproc 都会创建暂存和临时存储分区。Cloud Data Fusion 支持将 Dataproc 暂存存储桶作为计算配置文件中的参数传递。如需加密暂存存储桶,请创建一个启用了 CMEK 的存储桶,并在计算配置文件中将其作为参数传递给 Dataproc。

  7. 默认情况下,Cloud Data Fusion 会自动创建一个 Cloud Storage 存储桶,以暂存 Dataproc 使用的依赖项。如果您希望使用项目中已存在的 Cloud Storage 存储桶,请按以下步骤操作:

    1. 常规设置部分的 Cloud Storage 存储桶字段中输入现有的 Cloud Storage 存储桶。

    2. 将 Cloud KMS 密钥添加到您的 Cloud Storage 存储桶

  8. 获取 Cloud KMS 密钥的资源 ID。在常规设置部分的加密密钥名称字段中,输入您的资源 ID。

  9. 点击创建

  10. 如果配置标签页的系统计算配置文件部分中列出了多个配置文件,请将新的 Dataproc 配置文件设置为默认配置文件,方法是将鼠标指针放在配置文件名称字段上,然后点击显示的星形图标。

    选择默认配置文件。

搭配使用 CMEK 与其他资源

在创建 Cloud Data Fusion 实例期间,提供的 CMEK 密钥被设置为系统偏好设置。它用于加密流水线接收器(例如 Cloud Storage、BigQuery、Pub/Sub 或 Spanner 接收器)写入新创建的资源的数据。

此密钥仅适用于新创建的资源。如果资源在流水线执行之前已存在,您应该手动将 CMEK 密钥应用于这些现有资源。

您可以通过执行以下操作之一更改 CMEK 密钥:

  • 使用运行时参数。
  • 设置 Cloud Data Fusion 系统偏好设置。

运行时参数

  1. 在 Cloud Data Fusion 流水线 Studio页面中,点击运行按钮右侧的向下箭头。
  2. 名称字段中,输入 gcp.cmek.key.name
  3. 字段中,输入密钥的资源 ID
    选择 Data Fusion 版本。
  4. 点击保存

    您在此处设置的运行时参数仅适用于目前运行的流水线。

偏好设置

  1. 在 Cloud Data Fusion 界面中,点击系统管理员
  2. 点击配置标签。
  3. 点击系统偏好设置下拉列表。
  4. 点击修改系统偏好设置
  5. 密钥字段中,输入 gcp.cmek.key.name
  6. 字段中,输入密钥的资源 ID
    选择 Data Fusion 版本。
  7. 点击保存并关闭