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

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

借助 CMEK,您可以使用自己能够通过 Cloud KMS 控制的密钥对静态数据进行加密。CMEK 让用户可以控制写入到租户项目中的 Google 内部资源的数据以及由 Cloud Data Fusion 流水线写入的数据,包括:

  • 流水线日志和元数据
  • Dataproc 集群元数据
  • 各种 Cloud Storage、BigQuery、Pub/Sub 和 Cloud 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 密钥环的位置必须与您要在其中创建实例的区域相匹配。不允许使用多区域或全球区域密钥。

获取密钥的资源名称

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

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

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

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

  6. 可选:如果您的流水线使用 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:托管 product_name_short}} 实例的客户项目
    • 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

控制台

如需检查 Cloud Data Fusion 实例中是否启用了 CMEK,请执行以下操作:

  1. 转到 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 实例页面。

    转到实例

  2. 在实例的操作列中,点击查看实例

  3. 在 Cloud Data Fusion 网页界面中,点击系统管理员

  4. 点击配置标签。

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

  6. 点击创建新的配置文件

  7. 选择 Dataproc

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

  9. 默认情况下,Cloud Data Fusion 会自动创建一个要用作 Dataproc 暂存存储分区的 Cloud Storage 存储分区。 如果您希望使用项目中已有的 Cloud Storage 存储分区,请按照以下步骤操作:

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

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

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

  11. 点击创建

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

    选择默认配置文件。

搭配使用 CMEK 与其他资源

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

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

资源的位置应与 CMEK 密钥所在的区域相同。多区域或全球区域资源不能与 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. 点击保存并关闭