使用客户管理的加密密钥

默认情况下,Google Cloud 会使用 Google 管理的加密密钥自动加密静态数据。如果您具有特定的合规性或 与保护数据的密钥有关的监管要求, 您可以针对 Dataform 使用客户管理的加密密钥 (CMEK) 代码库

本指南介绍了如何将 CMEK 用于 Dataform 和走路 了解如何对 Dataform 代码库启用 CMEK 加密。

如需大致了解 CMEK,请参阅 包括何时及为何启用 CMEK,请参阅 CMEK 文档

代码库数据的 CMEK 加密

将 CMEK 加密应用于 Dataform 代码库时, 该存储区中由 Dataform 管理的所有客户数据都会以 使用为代码库设置的 CMEK 保护密钥。这些数据包括 以下:

  • Dataform 代码库及其工作区的 Git 代码库内容
  • 已编译的 SQL 查询和编译错误
  • 工作流操作的存储 SQL 查询
  • 已执行的工作流操作的错误详情

Dataform 使用 CMEK 保护密钥 以下情况:

  • 在每次需要解密静态存储的客户数据的操作期间。 这些操作包括但不限于: <ph type="x-smartling-placeholder">
  • 在每次需要存储静态客户数据的操作期间。 这些操作包括但不限于: <ph type="x-smartling-placeholder">

Dataform 管理仅与以下项关联的客户数据的加密: Dataform 资源。Dataform 不管理加密 对在 BigQuery 中创建的客户数据进行 Dataform 工作流。要加密在 BigQuery 中创建和存储的数据, 为 BigQuery 配置 CMEK

支持的密钥

Dataform 支持以下类型的 CMEK 密钥:

密钥可用性因密钥类型和区域而异。 如需详细了解 CMEK 密钥的地理可用性, 请参阅 Cloud KMS 网点

限制

Dataform 支持 CMEK,但存在以下限制:

  • 待此代码库之后,您无法再将 CMEK 保护密钥应用于该代码库 已创建。您只能在创建代码库期间应用 CMEK 加密。
  • 您无法从代码库中移除 CMEK 保护密钥。
  • 您无法更改代码库的 CMEK 保护密钥。
  • CMEK 组织政策不可用。
  • 是否使用 Cloud HSM 密钥取决于其可用性。 如需详细了解密钥在不同位置的可用性,请参阅 Cloud KMS 网点

Cloud KMS 配额和 Dataform

您可以将 Cloud HSM 密钥与 Dataform 搭配使用。当您在 Dataform 中使用 CMEK 时, 您的项目可以使用 Cloud KMS 加密请求 配额。例如,每次对代码库内容进行更改时,由 CMEK 加密的 Dataform 代码库都会消耗这些配额。仅当您使用硬件 (Cloud HSM) 或外部 (Cloud EKM) 密钥时,使用 CMEK 密钥执行的加密和解密操作才会影响 Cloud KMS 配额。如需了解详情,请参阅 Cloud KMS 配额

管理密钥

使用 Cloud KMS 执行所有密钥管理操作。 Dataform 无法检测或响应任何关键变化,直到 由 Cloud KMS 传播一些操作,例如 停用或销毁密钥的操作 传播最多 3 小时。 通常会更改权限 但传播速度也会快得多

代码库创建完成后,Dataform 调用 使用 Cloud KMS 对已加密的代码库数据执行每次操作时仍然有效。

如果 Dataform 检测到您的 Cloud KMS 密钥已 已停用或销毁,则存储在相应存储区中的所有数据 变得无法访问

如果通过 Dataform 调用 Cloud KMS 检测到之前停用的密钥已被 Dataform 会自动恢复访问权限。

如何处理不可用的密钥状态

在极少数情况下,例如在 Cloud KMS 不可用,Dataform 可能无法检索状态 Cloud KMS 中存储的密钥。

如果您的 Dataform 代码库受 而 Dataform 无法 与 Cloud KMS 通信 变得无法访问

在 Dataform 之前,已加密的代码库数据将一直无法访问 Cloud KMS 会重新连接到 Cloud KMS,Cloud KMS 会响应: 键有效。

反之,如果您的 Dataform 代码库受密钥保护 在首次启用 Dataform 时停用的 无法与 Cloud KMS(加密的代码库数据)通信, 在能够重新连接到 Cloud KMS 并且您 已重新启用您的密钥。

日志记录

您可以审核 Dataform 发送到 代表您在 Cloud Logging 中使用 Cloud KMS(如果您满足以下条件) 已启用审核日志记录 使用 Cloud KMS API。这些 Cloud KMS 日志条目的显示位置 Cloud Logging。 如需了解详情,请参阅 查看日志

准备工作

  • 决定是否要运行 Dataform 并 在不同项目中或同一项目中的 Cloud KMS。 我们建议您使用单独的项目以更好地控制权限。 如需了解 Google Cloud 项目 ID 和项目编号,请参阅识别项目

  • 对于运行 Cloud KMS 的 Google Cloud 项目:

    1. 启用 Cloud Key Management Service API
    2. 按照创建密钥环和密钥中的说明创建密钥环和密钥。创建密钥环 位置与 Dataform 的位置一致 代码库: <ph type="x-smartling-placeholder">
        </ph>
      • 代码库必须使用匹配的区域密钥。例如: 区域 asia-northeast3 中的代码库必须使用密钥进行保护 来自位于 asia-northeast3 的密钥环。
      • global 区域不能用于 Dataform 一样。
      如需详细了解 Dataform 和 Cloud KMS,请参阅 Cloud 网点

启用 CMEK

之后,Dataform 即可代表您访问该密钥 您需要向 Cloud KMS CryptoKey 加密者/解密者 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色分配给 默认 Dataform 服务账号

您的默认 Dataform 服务账号 ID 采用以下格式:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

将 CryptoKey Encrypter/Decrypter 角色授予默认 Dataform 请按照以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中打开 Key Management(密钥管理)页面。

    打开 Key Management 页面

  2. 点击包含密钥的密钥环的名称。

  3. 点击要向其添加角色的加密密钥对应的复选框。此时会打开权限标签。

  4. 点击添加成员

  5. 输入服务账号的电子邮件地址

    • 如果该服务账号已经在成员列表中,则表明它具有现有角色。点击当前角色下拉列表 服务账号。
  6. 点击选择角色下拉列表,点击 Cloud KMS,然后点击 Cloud KMS CryptoKey Encrypter/Decrypter 角色。

  7. 点击保存,将该角色应用于该服务 。

gcloud

您可以使用 Google Cloud CLI 分配角色:

gcloud kms keys add-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member serviceAccount:SERVICE_ACCOUNT \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --location=KMS_KEY_LOCATION \
    --keyring=KMS_KEY_RING \
    KMS_KEY

替换以下内容:

  • KMS_PROJECT_ID:运行 Cloud KMS 的 Google Cloud 项目的 ID
  • SERVICE_ACCOUNT:您的默认电子邮件地址 Dataform 服务账号
  • KMS_KEY_LOCATION:Cloud KMS 密钥的位置名称
  • KMS_KEY_RING:Cloud KMS 密钥的密钥环名称
  • KMS_KEY:Cloud KMS 密钥的名称

将 CMEK 应用于代码库

您可以将 CMEK 保护应用于 Dataform 代码库 创建 Deployment

如需将 CMEK 加密应用于 Dataform 代码库,请指定 Cloud KMS 密钥。 有关说明,请参阅创建代码库

您无法更改 Dataform 代码库的加密机制 创建代码库后

如需了解详情,请参阅限制

后续步骤