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

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

默认情况下,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_NAMECloud KMS 密钥名称

控制台

  1. 前往密钥管理 页面。

    前往密钥管理

  2. 点击密钥旁边的更多

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

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

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

  1. 必需:将 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 授予 Cloud Data Fusion 服务代理(请参阅将角色授予特定资源的服务账号)。此账号采用以下格式:

    service-PROJECT_NUMBER@gcp-sa-datafusion.

    通过向 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-PROJECT_NUMBER@compute-system.

    通过将 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 Compute Engine 服务代理,可让 Cloud Data Fusion 使用 CMEK 来加密 Managed Service for Apache Spark 集群写入的永久性磁盘 (PD) 元数据流水线。

  3. 必需:向 Cloud Storage 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色(请参阅将 Cloud KMS 密钥分配给 Cloud Storage 服务账号)。此服务代理的格式如下:

    service-PROJECT_NUMBER@gs-project-accounts.

    通过向 Cloud Storage 服务代理授予此角色,Cloud Data Fusion 可以使用 CMEK 来加密 Cloud Storage 存储桶(用于存储和缓存流水线信息和数据)以及流水线使用的项目中写入 Managed Service for Apache Spark 集群暂存存储桶的任何其他 Cloud Storage 存储桶。

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

    service-PROJECT_NUMBER@dataproc-accounts.

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

    bq-PROJECT_NUMBER@bigquery-encryption.

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

    service-PROJECT_NUMBER@gcp-sa-pubsub.

  7. 可选:如果您的流水线使用 Spanner 资源,请向 Spanner 服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色。该账号的格式如下:

    service-PROJECT_NUMBER@gcp-sa-spanner.

使用 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:靠近您位置的区域,例如 us-east1 Google Cloud
    • 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. 点击