概览
本页面介绍了如何将 CMEK 与 Datastream 配合使用。
CMEK 是否适合您?
CMEK 适用于拥有敏感或受监管数据且需要管理其加密密钥的组织。
Google 管理的加密与客户管理的加密
借助 CMEK 功能,您可以为 Datastream 中的静态数据使用自己的加密密钥。添加 CMEK 后,无论何时进行 API 调用,Datastream 都可以使用您的密钥来访问数据。
Datastream 使用 Google 管理的数据加密密钥 (DEK) 和密钥加密密钥 (KEK) 来加密 Datastream。因此存在两层加密:
- DEK 加密数据。
- KEK 加密 DEK。
Datastream 将加密的 DEK 与加密的数据一起存储,而 Google 管理 Google KEK。借助 CMEK,您可以创建封装 Google KEK 的密钥。借助 CMEK,您可以创建、撤消和删除 KEK。
CMEK(包括软件、硬件和外部密钥)均通过 Cloud Key Management Service (KMS) API 进行管理。
哪些位置支持启用了 CMEK 的 Datastream 数据流?
CMEK 在所有 Datastream 位置均可用。
了解服务账号
如果您的 Datastream 数据流启用了 CMEK,您需要使用服务账号从 Cloud Key Management Service 请求密钥访问权限。
如需在项目上使用 CMEK,您必须拥有服务账号,并且必须向服务账号授予密钥访问权限。该服务账号必须存在于项目内。该服务账号在所有区域均可见。
如果您使用控制台创建数据流,则 Datastream 会在您首次选择客户管理的密钥选项时自动创建服务账号(如果服务账号尚不存在)。当 Datastream 自动创建服务账号时,您不需要对您的用户账号具有特殊权限。
了解密钥
在 Cloud Key Management Service 中,您需要创建一个包含加密密钥的密钥环,并设置位置。在 Datastream 中创建新数据流时,您可以选择此密钥来加密该数据流。
在创建使用 CMEK 的新数据流时,您需要知道密钥 ID 和密钥区域。您必须将新数据流放在与数据流关联的 CMEK 所在的区域中。您可以为密钥和数据流创建一个项目,也可以为它们分别创建不同的项目。
CMEK 使用以下格式:
projects/[CMEK_ENABLED_PROJECT]/locations/[REGION]/keyRings/[RING_NAME]/cryptoKeys/[KEYNAME]
如果 Datastream 无法访问密钥(例如,您停用密钥版本),则 Datastream 会将数据流状态更改为 FAILED
,并显示关联的错误消息。在排查与错误消息关联的任何问题后,密钥可以再次访问,因此 Datastream 会自动恢复数据流。
外部密钥管理器
您可以使用存储在外部密钥管理器(例如 Fortinix、Ionic 或 Thales)中的密钥作为 CMEK。如需了解如何将外部密钥与 Cloud Key Management Service 搭配使用,请参阅 Cloud External Key Manager。
如何使 CMEK 加密的数据永远无法访问?
您可能遇到这样的情况,即您需要永久销毁使用 CMEK 加密的数据。为此,您需要销毁 CMEK 版本。您不能销毁密钥环或密钥,但可以销毁密钥的密钥版本。
限制
使用 CMEK 时,存在以下限制:
您无法在正在运行的数据流上更新 CMEK。
虽然您可以使用 CMEK 加密源数据库中的行,但您无法使用这些密钥来加密数据流元数据,例如数据流 ID、源数据库的 IP 地址、源数据库表的名称等。
使用 CMEK
现在您已经了解了 CMEK,接下来就可以为 CMEK 设置服务账号和密钥了。此外,您将学习如何设置 Datastream 以使用 CMEK。如需详细了解 CMEK,请参阅概览。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 安装并初始化 Cloud SDK。
- 确保您已为您的用户账号分配 Datastream Admin 角色。
-
Enable the Cloud Key Management Service API.
- 启用 Datastream API。
使用 CMEK 在 Datastream 中创建数据流的工作流
- 仅限 gcloud 和 API 用户:确保每个需要 CMEK 的项目都有一个服务账号。如果尚未创建该服务账号,请参阅创建服务账号。
- 创建密钥环和密钥并为每个密钥设置位置。该位置指的是 Google Cloud 区域。
- 仅限 gcloud 和 API 用户:向服务账号授予密钥访问权限。
- 复制或记下密钥 ID (
KMS_KEY_ID
) 和密钥的位置,以及密钥环的 ID (KMS_KEYRING_ID
)。您在向服务账号授予密钥访问权限时需要此信息。 - 转到项目并使用以下选项在 Datastream 中创建流:
- CMEK 所在的位置
- CMEK 配置
- CMEK ID
Datastream 中的数据流现已通过 CMEK 启用。
创建服务账号
您需要为每个需要 CMEK 的项目创建一个服务账号。
要允许用户管理服务账号,请授予以下角色之一:
- Service Account User (
roles/iam.serviceAccountUser
):包括列出服务账号、获取服务账号的详细信息以及模拟服务账号的权限。 - Service Account Admin (
roles/iam.serviceAccountAdmin
):包括列出服务账号和获取服务账号的详细信息的权限。此外,还包括创建、更新和删除服务账号的权限,以及查看或更改服务账号的 Datastream 政策的权限。
目前,您只能使用 gcloud
命令创建 CMEK 所需的服务账号类型。如果您使用的是 Console,则 Datastream 会自动为您创建此服务账号。
如需使用 gcloud
创建服务账号,请运行以下命令:
gcloud beta services identity create \ --service=datastream.googleapis.com \ --project=PROJECT_ID
上述命令会返回服务账号名称。在向服务账号授予密钥访问权限的过程中,您将使用此服务账号名称。
创建密钥
您可以在 Datastream 中的数据流所属的 Google Cloud 项目中创建密钥,也可以在单独的用户项目中创建密钥。Cloud KMS 密钥环的位置必须与您要在其中创建数据流的区域相匹配。多区域密钥或全球区域密钥将不会起作用。如果区域不匹配,则无法创建数据流。
如需创建 Cloud KMS 密钥,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,前往加密密钥页面。
- 点击创建密钥环。
- 添加密钥环名称。请记下此名称,因为您在向服务账号授予密钥访问权限时需要用到此名称。
- 添加密钥环位置。
- 点击创建。此时会打开创建密钥页面。
- 添加密钥名称。
- 选择用途(对称或非对称)。
- 选择轮替周期和开始日期。
- 点击创建。
- 在密钥表上,点击最后一列中的三个点,然后选择复制资源 ID 或将其记录下来。这是
KMS_KEY_ID
。在向服务账号授予密钥访问权限时,您需要KMS_KEY_ID
。
gcloud
- 创建新的密钥环。
记录此名称,因为您在向服务账号授予密钥访问权限时需要用到此名称。gcloud kms keyrings create KMS_KEYRING_ID \ --location=GCP_REGION
- 针对该密钥环创建密钥。
记录此名称,因为您在向服务账号授予密钥访问权限时需要用到此名称。gcloud kms keys create KMS_KEY_ID \ --location=GCP_REGION \ --keyring=KMS_KEYRING_ID \ --purpose=encryption
向服务账号授予密钥访问权限
您只需在使用 gcloud
或 API 时执行此过程。
如需向服务账号授予访问权限,请使用以下代码:
gcloud kms keys add-iam-policy-binding KMS_KEY_ID \ --location=GCP_REGION \ --keyring=KMS_KEYRING_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-datastream.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
使用 CMEK 在 Datastream 中创建数据流
作为在 Datastream 中创建数据流的一部分,您可以使用 CMEK 管理数据的加密。
后续步骤
- 如需了解如何停用密钥版本,请参阅停用已启用的密钥版本。
- 如需了解如何重新启用密钥版本,请参阅启用已停用的密钥版本。