为 Looker (Google Cloud Core)启用 CMEK

漫游器:noindex

默认情况下,Google Cloud 会使用由 Google 管理的加密密钥自动加密静态数据。如果您对保护数据的密钥有特定的合规性或监管要求,可以使用客户管理的加密密钥 (CMEK) 对 Looker (Google Cloud Core)进行应用级加密。

如需大致了解 CMEK(包括启用 CMEK 的时间和原因),请参阅 Cloud Key Management Service 文档

本页面介绍了如何将 Looker (Google Cloud Core)实例配置为使用 CMEK。

Looker (Google Cloud Core)如何与 CMEK 交互?

Looker (Google Cloud Core)使用单个 CMEK 密钥(通过辅助密钥的层次结构)来帮助保护由 Looker (Google Cloud Core)实例管理的敏感数据。在启动过程中,Looker 实例中的每个进程都会对 Cloud Key Management Service (KMS) 进行一次初始调用,以解密密钥。在正常操作期间(启动之后),整个 Looker 实例大约每五分钟对 KMS 进行一次调用,以验证密钥是否仍然有效。

哪些类型的 Looker (Google Cloud Core)实例支持 CMEK?

当满足以下两个条件时,Looker (Google Cloud Core)实例支持 CMEK:

  • 您必须先完成本页面上的 CMEK 配置步骤,然后才能创建 Looker (Google Cloud Core)实例。您无法在现有实例上启用客户管理的加密密钥。
  • 实例版本必须为企业嵌入

使用 CMEK 创建 Looker (Google Cloud Core)实例的工作流

本页面介绍了如何为 Looker (Google Cloud Core)实例设置 CMEK。

  1. 设置您的环境
  2. 仅限 gcloud CLI 和 API 用户:为需要客户管理的加密密钥的每个项目创建服务帐号
  3. 创建密钥环和密钥,并设置密钥的位置。该位置指的是 Google Cloud 区域。
  4. 仅限 CLI 和 API 用户复制或记下密钥 ID (KMS_KEY_ID) 和密钥位置,以及密钥环的 ID (KMS_KEYRING_ID)。在向服务帐号授予密钥访问权限时,您需要用到此信息。
  5. 仅限 gcloud CLI 和 API 用户:向服务帐号授予密钥的访问权限。
  6. 转到项目,并使用以下选项创建 Looker (Google Cloud Core)实例
    1. 选择与客户管理的加密密钥使用的位置
    2. 版本设置为“企业”或“嵌入”。
    3. 启用客户管理的密钥配置。
    4. 按名称或 ID 添加客户管理的加密密钥。

完成所有这些步骤后,系统将使用 CMEK 启用 Looker (Google Cloud Core)实例。

须知事项

如果您尚未配置环境,请确保您的环境已配置为符合本页面中的说明。请按照本部分中的步骤操作,确保您的设置正确无误。

  1. 在 Google Cloud 控制台中,打开项目选择器页面,选择或创建 Google Cloud 项目注意:如果您不打算保留在此过程中创建的资源,请创建新的项目,而不要选择现有的项目。完成这些步骤后,您可以删除此项目,此操作会移除与该项目关联的资源。

    转到项目选择器

  2. 确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能
  3. 确保您的用户帐号拥有 Looker Admin 角色。
  4. 安装 Google Cloud CLI。
  5. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
    

  6. 启用 Cloud Key Management Service API。

    启用 API

  7. 启用 Looker (Google Cloud Core)API。

    启用 API

创建服务帐号

如果您使用 gcloud CLI 或 API 创建 Looker (Google Cloud Core)实例,则需要为每个需要客户管理的加密密钥的 Google Cloud 项目创建服务帐号。如果您要在项目中创建多个 Looker (Google Cloud Core)实例,那么同一服务帐号会应用于该项目中的所有 Looker (Google Cloud Core)实例,并且服务帐号只需创建一次。在您首次选择使用客户管理的加密密钥选项时,如果您使用控制台创建实例,则 Looker (Google Cloud Core)会自动创建服务帐号。

要允许用户管理服务帐号,请授予以下角色之一:

  • Service Account User (roles/iam.serviceAccountUser):包括列出服务帐号、获取服务帐号的详细信息以及模拟服务帐号的权限。
  • Service Account Admin (roles/iam.serviceAccountAdmin):包括列出服务帐号和获取服务帐号详细信息的权限。以及创建、更新和删除服务帐号的权限。

目前,您只能使用 gcloud CLI 命令创建客户管理的加密密钥所需的服务帐号类型。如果您使用的是 Google Cloud 控制台,则 Looker (Google Cloud Core)会自动为您创建此服务帐号。

gcloud

gcloud beta services identity create \
--service=looker.googleapis.com \
--project=PROJECT_ID

上一条命令返回服务帐号名称。在授予服务帐号访问密钥的过程中,您需要使用此服务帐号名称。

创建密钥环和密钥

注意:您可以通过 Cloud EKM 服务将外部管理的密钥与 CMEK 搭配使用,以通过 Cloud KMS 提供该密钥

您可以在与 Looker (Google Cloud Core)实例相同的 Google Cloud 项目中创建密钥,也可以在单独的用户项目中创建。Cloud KMS 密钥环的位置必须与您要在其中创建 Looker (Google Cloud Core)实例的区域一致。多区域密钥或全球区域密钥不会起作用。如果区域不匹配,Looker(Google Cloud 核心)实例创建请求将失败。

按照创建密钥环创建密钥文档页面中的说明操作,创建满足以下两个条件的密钥环和密钥:

  • 密钥环位置字段与您将为 Looker (Google Cloud Core)实例设置的区域一致。
  • 密钥用途字段必须为 Symmetric encrypt/decrypt

如需了解如何轮替密钥以及创建新的密钥版本,请参阅轮替密钥部分。

复制或记下 KMS_KEY_IDKMS_KEYRING_ID

如果您使用 gcloud 或 API 设置 Looker (Google Cloud Core)实例,请按照获取 Cloud KMS 资源 ID 文档页面上的说明找到您刚刚创建的密钥环和密钥的资源 ID。复制或记下密钥的 ID (KMS_KEY_ID) 和位置,以及密钥环的 ID (KMS_KEYRING_ID)。在向服务帐号授予密钥访问权限时,您需要用到此信息。

向服务帐号授予密钥的访问权限

仅当您使用的是 gcloud CLI 或 API 时,才需要执行此过程。对于 SERVICE_ACCOUNT_NAME,请使用您在创建服务帐号时返回的服务帐号名称。

如需向服务帐号授予访问权限,请执行以下操作:

gcloud

gcloud Cloud KMS keys add-iam-policy-binding KMS_KEY_ID \
--location=GCP_REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:SERVICE_ACCOUNT_NAME \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

使用 CMEK 创建 Looker (Google Cloud Core)实例

要在 Google Cloud 控制台中创建具有客户管理的加密密钥的实例,请先按照上文创建密钥环和密钥部分中的步骤操作,在用于 Looker (Google Cloud Core)实例的区域中创建一个密钥环和密钥。接下来,使用以下设置,按照通过 Google Cloud 控制台创建 Looker (Google Cloud Core)实例文档中的说明创建 Looker(Google Cloud 核心)实例:

控制台

  1. 创建实例页面的版本部分,您必须选择企业版嵌入版本才能使用 CMEK。
  2. 创建实例页面的加密部分中,选择客户管理的加密密钥 (CMEK) 单选按钮。这会显示选择客户管理的密钥下拉字段。
  3. 选择客户管理的密钥字段中,设置要使用的密钥。该密钥必须位于密钥环中,该位置的位置应与您所创建的 Looker (Google Cloud Core)实例位于同一区域,否则实例创建将失败。您可以通过以下两种方法之一来选择密钥:
    1. 从下拉列表中选择密钥的名称:Google Cloud 项目中的可用密钥会显示在下拉列表中。选择密钥后,点击确定
    2. 输入密钥的资源 ID:点击文本没有看到您的密钥?输入下拉菜单底部显示的密钥资源 ID。此时将显示一个输入密钥资源 ID 对话框,您可以在其中输入密钥 ID。输入 ID 后,选择保存
  4. 选择密钥后,系统会显示一条消息,要求您授予服务帐号使用该密钥的权限。点击授权按钮。
  5. 如果服务帐号无权使用所选密钥进行加密/解密,则系统会显示一条消息。如果发生这种情况,请点击授予以向服务帐号授予选定 KMS 密钥的 roles/cloudkms.cryptoKeyEncrypterDecrypter IAM 角色
  6. 完成 Looker (Google Cloud Core)实例的所有配置后,点击创建

gcloud

gcloud looker instances create INSTANCE_NAME \
--project=PROJECT_ID \
--oauth-client-id=OAUTH_CLIENT_ID\
--oauth-client-secret=OAUTH_CLIENT_SECRET \
--kms-key=KMS_KEY_ID
--region=REGION \
--edition=EDITION

如需启用 CMEK,您必须将 --edition 分配给 core-embed-annualcore-enterprise-annual

您的 Looker (Google Cloud Core)实例现已使用 CMEK 启用。

查看启用了 CMEK 的实例的密钥信息

成功创建 Looker (Google Cloud Core)实例后,您可以检查 CMEK 是否已启用。

控制台

  1. 在 Google Cloud 控制台中,转到 Looker 实例页面。
  2. 点击一个实例名称,打开其详细信息页面。如果实例启用了 CMEK,则系统会显示用于加密的加密行。客户管理的加密密钥 (CMEK) 字段会显示密钥标识符。

gcloud

gcloud looker instances describe INSTANCE_NAME --region=REGION --format config

此命令应返回 kmsKeyNamekmsKeyNameVersionkmsKeyState,以确认实例配置了 CMEK。

使用 Cloud External Key Manager (Cloud EKM)

如需保护 Looker (Google Cloud Core)实例中的数据,您可以使用受支持的外部密钥管理合作伙伴中管理的密钥。如需了解详情,请参阅 Cloud External Key Manager 文档页面,包括注意事项部分。

准备好创建 Cloud EKM 密钥后,请参阅 Cloud External Key Manager 文档页面的工作原理。创建密钥后,请在创建 Looker (Google Cloud Core)实例时提供密钥名称。

Google 无法控制密钥在外部密钥管理合作伙伴系统中的可用性。

轮替密钥

您可能需要轮替密钥,以帮助提升安全性。每次轮替密钥时,系统都会创建一个新的密钥版本。如需详细了解密钥轮替,请参阅密钥轮替文档页面。

如果您轮替用于帮助保护 Looker (Google Cloud Core)实例的密钥,则之前的密钥版本仍然可供访问使用相应密钥版本时所做的备份或导出操作。因此,Google 建议您在轮替后至少启用先前的密钥版本 45 天,以确保这些产品仍然可供访问。密钥版本默认保留,直至停用或销毁为止。

停用和重新启用密钥版本

请参阅以下文档页面:

如果用于帮助保护 Looker (Google Cloud Core)实例的密钥版本被停用,Looker (Google Cloud Core)实例需要停止运行、清除其在内存中可能存在的所有未加密的敏感数据,并等待该密钥再次可用。具体过程如下:

  1. 用于帮助保护 Looker (Google Cloud Core)实例的密钥版本已停用。
  2. 在大约 15 分钟内,Looker (Google Cloud Core)实例检测到密钥版本被撤消、停止运行并清除内存中的所有加密数据。
  3. 在实例停止运行后,调用 Looker API 将返回错误消息。
  4. 在实例停止运行后,Looker (Google Cloud Core)界面会返回一条错误消息。
  5. 如果重新启用密钥版本,则必须手动触发实例的重启

如果您停用密钥版本,并且不想等待 Looker (Google Cloud Core)实例自行停止运行,则可以手动触发实例重启,以便 Looker (Google Cloud Core)实例立即检测到已撤消的密钥版本。

销毁密钥版本

请参阅以下文档页面:

如果用于帮助保护 Looker (Google Cloud Core)实例的密钥版本被销毁,Looker 实例将无法访问。您必须删除实例,这样您将无法访问其数据。

问题排查

本部分介绍在设置或使用启用了 CMEK 的实例时收到错误消息。

由于 Cloud KMS 错误以及缺少角色或权限,Looker (Google Cloud Core)管理员操作(例如创建或更新)可能会失败。常见的失败原因包括:Cloud KMS 密钥版本缺失、Cloud KMS 密钥版本被停用或销毁、IAM 权限不足,无法访问 Cloud KMS 密钥版本,或者 Cloud KMS 密钥版本与 Looker (Google Cloud Core)实例位于不同的区域。请使用以下问题排查表来诊断和解决常见问题。

CMEK 问题排查表

错误消息 可能的原因 问题排查策略
找不到每个项目、每个产品的服务帐号 服务帐号名称不正确。 确保您已为正确的用户项目创建了服务帐号。

转到“服务帐号”页面

无法授予对服务帐号的访问权限 该用户帐号无权授予对此密钥版本的访问权限。

为您的用户或服务帐号添加 Organization Administrator 角色。

转到“IAM 帐号”页面

Cloud KMS 密钥版本已销毁 密钥版本会被销毁。 如果密钥版本被销毁,您将无法使用它来加密或解密数据。必须删除 Looker(Google Cloud 核心)实例。
Cloud KMS 密钥版本已停用 密钥版本已停用。

重新启用 Cloud KMS 密钥版本。

前往“密钥管理”页面

权限不足,无法使用 Cloud KMS 密钥 您用于对 Looker (Google Cloud Core)实例执行操作的用户或服务帐号缺失 cloudkms.cryptoKeyEncrypterDecrypter 角色,或者 Cloud KMS 密钥版本不存在。

为您的用户或服务帐号添加 cloudkms.cryptoKeyEncrypterDecrypter 角色。

转到“IAM 帐号”页面

如果您已在帐号中使用此角色,请参阅创建密钥环和密钥部分,了解如何创建新的密钥版本。然后再次完成实例创建步骤。

找不到 Cloud KMS 密钥 密钥版本不存在。 创建新的密钥版本并再次完成实例创建步骤。请参阅创建密钥环和密钥部分。
Looker (Google Cloud Core)实例和 Cloud KMS 密钥版本位于不同区域 Cloud KMS 密钥版本和 Looker (Google Cloud Core)实例必须位于同一区域。如果 Cloud KMS 密钥版本位于全球区域或多区域中,则将无法正常使用。 在要创建实例的同一区域中创建密钥版本,然后再次完成实例创建步骤。请参阅创建密钥环和密钥部分。

后续步骤