为 Cloud Logging 配置 CMEK

本文档将介绍如何配置和管理 客户管理的加密密钥 (CMEK), Cloud Logging, 来满足组织的法规遵从需求 您可以将 CMEK 配置为 组织文件夹、 还是两者兼有 配置后,Cloud Logging 会确保所有新的日志存储分区 使用客户管理的密钥加密。

概览

默认情况下,Cloud Logging 会对以静态方式存储的客户内容进行加密。Logging 存储在日志存储分区中的数据使用 密钥加密密钥 此过程称为信封加密。 访问日志记录数据需要访问这些密钥加密密钥,Google 会为您管理这些密钥,您无需执行任何操作。

您的组织可能具有我们的默认静态加密不提供的监管、合规性相关或高级加密要求。为了满足贵组织的要求,而不是由 Google 管理 加密密钥,则可以配置 CMEK 来控制 以及如何管理自己的加密

如需了解 CMEK 的具体信息(包括其优势和限制), 请参阅客户管理的加密密钥

将 CMEK 配置为以下客户的默认资源设置时 日志记录,组织或文件夹中的新日志存储分区 将使用配置的密钥自动加密。不过, 您可以更改该键,或者创建日志存储分区并指定其他键。 如需了解详情,请参阅 为日志存储分区配置 CMEK

前提条件

如需开始使用,请完成以下步骤:

  1. 使用 CMEK 时存在一些限制。在创建 日志存储桶,请参阅限制

  2. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

    gcloud init

    本指南介绍了如何使用 Google Cloud CLI。

  3. 查找要为其创建组织或文件夹的标识符 您要启用 CMEK:

    • ORGANIZATION_ID 是 要为其启用 CMEK 的 Google Cloud 组织。 如果您仅计划为 文件夹中。如需了解如何获取此标识符,请参阅 获取您的组织 ID
    • FOLDER_ID 是 您要为其启用 CMEK 的 Google Cloud 文件夹。 如果您只计划为 CMEK 配置 CMEK,则无需使用此值 组织。有关使用文件夹的信息,请参阅 创建和管理文件夹
  4. 如需获取创建密钥所需的权限, 请让管理员向您授予 项目或父级资源的 Cloud KMS Admin (roles/cloudkms.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  5. 确保您对 组织:

    • logging.settings.get
    • logging.settings.update
  6. 为运行 Cloud KMS 的 Google Cloud 项目启用 Cloud KMS API

  7. 为运行 Cloud KMS 的 Google Cloud 项目创建密钥环和密钥

    借助 Cloud Logging,您可以使用任何区域的密钥。 但是,在创建日志存储桶时,该日志存储桶的位置必须 与键的位置一致。如需了解支持的区域, 请参阅以下内容:

    如果您将 CMEK 配置为默认资源设置 按照本文档中的步骤说明如何进行日志记录 则系统会将在该组织或文件夹中创建的新日志存储分区 系统会自动配置 CMEK。此外,由于 配置完成后,日志存储桶必须与密钥的位置匹配 CMEK 作为默认资源设置,您无法创建 global 区域中的日志存储分区。

  8. 确定以下 Cloud KMS 参数的值:

    • KMS_PROJECT_ID 是唯一的字母数字标识符, 您的 Google Cloud 项目名称和随机 分配给正在运行的 Google Cloud 项目的 Cloud KMS。如需了解如何获取此标识符, 请参阅 识别项目
    • KMS_KEY_LOCATION 是 Cloud KMS 密钥的 区域。
    • KMS_KEY_RING 是 Cloud KMS 密钥环的 名称。
    • KMS_KEY_NAME 替换为 Cloud KMS 密钥的名称。 其格式如下所示: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY

为组织或文件夹启用 CMEK

完成前提条件步骤后,请按照以下说明为您的 Google Cloud 组织启用 CMEK。

确定服务账号 ID

确定与组织或文件夹关联的服务账号 ID 将针对哪个 CMEK 适用,请运行以下命令 gcloud logging settings describe 命令:

文件夹

 gcloud logging settings describe --folder=FOLDER_ID

单位

gcloud logging settings describe --organization=ORGANIZATION_ID

运行上一条命令会为组织生成服务账号 或文件夹(如果不存在) 并在 kmsServiceAccountId 字段中返回该 ID。 下面显示了在调用 已指定组织:

kmsServiceAccountId: cmek-p12345@gcp-sa-logging.iam.gserviceaccount.com
name: organizations/ORGANIZATION_ID/settings

在此示例中,SERVICE_ACCT_NAME 的值为 cmek-p12345

仅对每个资源运行一次预配过程。运行 describe 命令多次返回 kmsServiceAccountId 的相同值 字段。

如果您无法使用 Google Cloud CLI,请运行 Cloud Logging API 方法 getSettings

分配加密者/解密者角色

如需使用 CMEK,请将 Cloud KMS CryptoKey Encrypter/Decrypter 角色分配给服务账号,以向该服务账号授予使用 Cloud KMS 的权限:

gcloud

gcloud kms keys add-iam-policy-binding \
--project=KMS_PROJECT_ID \
--member serviceAccount:SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING \
KMS_KEY_NAME

在命令中设置变量,如下所示:

  • SERVICE_ACCT_NAME 替换为您在上一步中确定的 serviceAccountId 值。

  • 将其他变量替换为您在 前提条件步骤。

控制台

  1. 在 Google Cloud 控制台中打开 Cloud Key Management Service 密钥浏览器。
    打开 Cloud KMS 密钥浏览器
  2. 点击包含所需密钥的密钥环的名称。

  3. 选中所需密钥对应的复选框。

    权限标签变为可用。

  4. 添加成员对话框中,指定您授予访问权限的 Logging 服务账号的电子邮件地址。

  5. 选择角色下拉列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter

  6. 点击添加

配置组织政策

Logging 支持可能需要 CMEK 的组织政策 还可以限制哪些 Cloud KMS CryptoKey 可用于 CMEK 保护:

  • logging.googleapis.com 出现在以下服务的 Deny 政策列表中时 限制条件 constraints/gcp.restrictNonCmekServices,Logging 拒绝创建不受 CMEK 保护的新用户定义的存储分区。 但是,此限制条件不会阻止 Cloud Logging 创建 _Required_Default 日志存储分区, 系统即会创建 Google Cloud 项目。

  • 强制执行 constraints/gcp.restrictCmekCryptoKeyProjects 后, Logging 会创建受 CMEK 保护的资源, 受允许的项目、文件夹或组织中的 CryptoKey 保护。

如需详细了解 CMEK 和组织政策, 请参阅 CMEK 组织政策

如果存在指定 CMEK 限制条件的组织政策,请确保 这些限制条件与 Logging 的 组织或文件夹的默认资源设置。 此外,如果您打算修改默认资源设置, 更新默认资源设置,查看并根据需要进行更新 组织政策

如需查看或配置组织政策,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往组织政策页面:

    转到组织政策

    如果您使用搜索栏查找此页面,请选择子标题为 IAM 和管理的结果。

  2. 选择您的组织。
  3. 验证并在必要时更新针对 CMEK 的限制条件。

    如需了解如何修改组织政策,请参阅 创建和修改政策

使用 Cloud KMS 密钥配置 Cloud Logging

如需将 CMEK 配置为 Logging 的默认资源设置,请执行以下操作: 运行以下命令 gcloud logging settings update 命令:

文件夹

gcloud logging settings update \
    --folder=FOLDER_ID \
    --kms-location=KMS_KEY_LOCATION \
    --kms-key-name=KMS_KEY_NAME \
    --kms-keyring=KMS_KEY_RING \
    --kms-project=KMS_PROJECT_ID

上一条命令更新了要存储的默认资源设置 Cloud KMS 密钥的相关信息。您必须确保 默认存储位置 设置为 KMS_KEY_LOCATION 的值。 如果您尚未设置默认存储位置,或者该位置的值 位置与 KMS_KEY_LOCATION 的值不匹配,则 将以下内容附加到上一个命令:

--storage-location = KMS_KEY_LOCATION

借助 --storage-location 标志,您可以设置或更新 文件夹的默认存储位置。

单位

gcloud logging settings update \
    --organization=ORGANIZATION_ID \
    --kms-location=KMS_KEY_LOCATION \
    --kms-key-name=KMS_KEY_NAME \
    --kms-keyring=KMS_KEY_RING \
    --kms-project=KMS_PROJECT_ID

上一条命令更新了要存储的默认资源设置 Cloud KMS 密钥的相关信息。您必须确保 默认存储位置 设置为 KMS_KEY_LOCATION 的值。 如果您尚未设置默认存储位置,或者该位置的值 位置与 KMS_KEY_LOCATION 的值不匹配,则 将以下内容附加到上一个命令:

--storage-location = KMS_KEY_LOCATION

借助 --storage-location 标志,您可以设置或更新 组织的默认存储位置。

应用密钥后,组织或文件夹中的新日志存储分区 配置为使用此密钥对静态数据进行加密。您还可以 更改键 。您无法在以下位置创建日志存储分区: global 区域,因为您必须使用符合以下条件的密钥: “region”与您的数据的区域范围一致。

如果您无法使用 Google Cloud CLI,请运行 Cloud Logging API 方法 updateSettings

验证密钥的启用状态

验证您是否已成功为组织启用了 CMEK,或者 文件夹中,请运行以下命令 gcloud logging settings describe 命令:

文件夹

gcloud logging settings describe --folder=FOLDER_ID

单位

gcloud logging settings describe --organization=ORGANIZATION_ID

上述命令会返回 Cloud KMS 密钥名称:

kmsKeyName: KMS_KEY_NAME
kmsServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com

如果 kmsKeyName 字段已填充,则表示为 组织或文件夹

将日志路由到支持的目的地

  • Cloud Logging 日志存储分区可配置为使用 CMEK 对数据进行加密。 将 CMEK 配置为默认资源设置时 新建日志存储分区(针对组织或文件夹) 系统会自动使用 CMEK。 您可以更改 这些日志存储分区,您可以创建使用其他产品 KMS 密钥,而不是默认资源设置指定的密钥。

    有关应用于日志存储分区的 CMEK 的信息,包括如何更改 对日志存储桶启用 CMEK 时的密钥和限制,请参阅 为日志存储分区配置 CMEK

  • Cloud Storage 支持使用 CMEK 路由日志。有关如何创建 如何为 Cloud Storage 配置 CMEK,请参阅 使用客户管理的加密密钥

    在将日志数据路由到 Cloud Storage,那么您可以追溯将日志批量复制到 Cloud Storage(如果这些日志也存储在日志存储桶中)。 如需了解详情,请参阅复制日志条目

  • 默认情况下,BigQuery 会对静态存储的客户内容进行加密。如需了解详情,请参阅使用 Cloud Key Management Service 密钥保护数据

  • 默认情况下,Pub/Sub 会对静态存储的客户内容进行加密。如需了解详情,请参阅配置消息加密

管理 Cloud KMS 密钥

以下部分介绍了如何针对 Cloud KMS 密钥执行何更改、撤消访问权限或停用操作。

更改 Cloud KMS 密钥

要更改与组织或 文件夹中,创建密钥并更新 使用新的 Cloud KMS 密钥名称更改 CMEK 设置:

文件夹

gcloud logging settings update \
    --folder=FOLDER_ID
    --kms-key-name=NEW_KMS_KEY_NAME
    --kms-location=NEW_KMS_KEY_LOCATION \
    --kms-keyring=NEW_KMS_KEY_RING \
    --kms-project=NEW_KMS_PROJECT_ID

您必须确保 默认存储位置 设置为 KMS_KEY_LOCATION 的值。 如果您尚未设置默认存储位置,或者该位置的值 位置与 KMS_KEY_LOCATION 的值不匹配,则 将以下内容附加到上一个命令:

--storage-location = NEW_KMS_KEY_LOCATION

单位

gcloud logging settings update \
    --organization=ORGANIZATION_ID
    --kms-key-name=NEW_KMS_KEY_NAME
    --kms-location=NEW_KMS_KEY_LOCATION \
    --kms-keyring=NEW_KMS_KEY_RING \
    --kms-project=NEW_KMS_PROJECT_ID

您必须确保 默认存储位置 设置为 KMS_KEY_LOCATION 的值。 如果您尚未设置默认存储位置,或者该位置的值 位置与 KMS_KEY_LOCATION 的值不匹配,则 将以下内容附加到上一个命令:

--storage-location = NEW_KMS_KEY_LOCATION

撤消对 Cloud KMS 密钥的访问权限

您可以撤消 Logging 对 Cloud KMS 密钥的访问权限 方法是移除已配置的服务账号的 该密钥的 IAM 权限。

如果您撤消 Logging 对密钥的访问权限,则最多可能 让更改生效。

如需撤消 Logging 对 Cloud KMS 密钥的访问权限,请执行以下操作: 运行以下 Google Cloud CLI 命令:

gcloud kms keys remove-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member serviceAccount:SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --location=KMS_KEY_LOCATION \
    --keyring=KMS_KEY_RING \
    KMS_KEY_NAME

停用 CMEK

为组织或文件夹停用 CMEK 后,将不再强制执行 CMEK 政策 仅供未来操作参考;之前应用的任何配置都将保持不变。

要对将 CMEK 配置为 默认资源设置,请运行以下 Google Cloud CLI 命令:

文件夹

gcloud logging settings update --folder=FOLDER_ID --clear-kms-key

单位

gcloud logging settings update --organization=ORGANIZATION_ID --clear-kms-key

如果您要销毁密钥,请参阅销毁和恢复密钥版本

Cloud KMS 密钥轮替注意事项

Cloud Logging 不会自动轮替加密 与临时灾难恢复文件对应的密钥 关联 Google Cloud 组织或文件夹的轮替。 现有恢复文件将继续使用在创建它们时所用的密钥版本。新的恢复文件会使用当前的主要密钥版本。

限制

当您在 Google Cloud 上 将 CMEK 配置为 Logging 的默认资源设置。

灾难恢复文件不可用

Cloud KMS 密钥会被视为可供 在同时满足以下两个条件时进行日志记录:

  • 密钥已启用
  • Logging 服务账号拥有该密钥的加密和解密权限。

如果 Logging 无法再访问 Cloud KMS 密钥,则: Logging 无法写入临时灾难恢复文件 而对于用户来说,查询也会停止运行。即使在密钥访问恢复后,查询性能也可能会降低。

将日志路由到 Cloud Storage 也可能会受到影响,因为 Logging 无法写入出于以下目的而所需的临时文件: 和路由如果在加密或解密数据时遇到错误, 系统就会向包含 Cloud KMS 密钥。

客户端库可用性

Logging 客户端库不提供配置 CMEK 的方法。

由于 Cloud EKM 密钥不可用而降级

当您使用 Cloud EKM 密钥时,Google 无法控制由外部管理的密钥在外部密钥管理合作伙伴系统中的可用性。

将 CMEK 配置为组织的默认资源设置时,或者 如果外部管理的密钥不可用,那么 Cloud Logging 会不断重新尝试访问密钥。Cloud Logging 还会缓冲传入的日志数据长达一小时。 一个小时后,如果 Cloud Logging 仍然无法访问 代管式密钥,则 Cloud Logging 会开始丢弃数据。

如果 CMEK 应用于日志存储桶 如果外部管理的密钥不可用, Cloud Logging 继续在日志存储分区中存储日志, 但用户将无法访问这些数据

如需了解使用外部密钥的更多注意事项和可能的替代方案,请参阅 Cloud External Key Manager 文档

日志存储分区的限制

如需了解将 CMEK 与日志存储分区结合使用时的限制,请参阅 限制

配额

如需详细了解日志记录用量限制,请参阅配额和限制

排查配置错误

如需了解如何排查 CMEK 配置错误,请参阅 排查 CMEK 和默认设置错误