为日志存储分区配置 CMEK

本文档提供了有关如何配置客户管理的加密的说明。 密钥 (CMEK),用于存储在 日志存储分区。 本文档还 介绍了如何管理这些密钥,以及与使用 CMEK 相关的限制。

您可以将 CMEK 配置为组织的默认资源设置,或 文件夹配置后,Cloud Logging 会确保所有新的日志存储分区 组织或文件夹中 使用客户管理的密钥加密 如果您在创建日志存储桶时没有提供密钥, 默认密钥。如需了解详情,请参阅 为 Cloud Logging 配置 CMEK

概览

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

您的组织可能具有我们的默认静态加密不提供的监管、合规性相关或高级加密要求。为了满足贵组织的要求,而不是由 Google 管理 加密密钥,您可以自行管理密钥。

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

对于对称加密,定期自动轮替密钥的是推荐的安全做法。如需了解详情,请参阅 密钥轮替

前提条件

请完成以下步骤:

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

  2. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

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

  3. 创建或识别要在其中运行 Cloud KMS 的 Google Cloud 项目。

  4. 如需获得创建密钥所需的权限,请让管理员向您授予项目或父级资源的 Cloud KMS Admin (roles/cloudkms.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

  5. 确保您拥有以下 Cloud Logging 权限:

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

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

    如需对齐故障域,您必须使用所在位置 与数据的区域范围一致:

    您无法为在 global 区域中创建的日志存储桶启用 CMEK。

  8. 确定以下变量的值:

    • BUCKET_ID 是 要创建的 Logging 存储桶。
    • BUCKET_PROJECT_ID 是包含新映像的 Google Cloud 项目的名称, 日志存储桶。
    • KMS_PROJECT_ID 是运行 Cloud KMS 的 Google Cloud 项目的唯一字母数字标识符,由 Google Cloud 项目名称和随机分配的编号组成。
    • 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

完成前提步骤后,请按照以下步骤操作 说明为单个日志存储桶启用 CMEK。

确定服务账号 ID

确定与 Google Cloud 关联的服务账号 ID 要应用 CMEK 的资源,请执行以下操作:

  1. 运行以下命令 gcloud logging settings describe 命令:

    gcloud logging settings describe --project=BUCKET_PROJECT_ID
    

    上一条命令会为指定的 如果资源不存在,则返回该资源的 ID kmsServiceAccountId 字段中的服务账号:

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    name: projects/BUCKET_PROJECT_ID/settings
    

    kmsServiceAccountId 字段会列出所使用的服务账号 来调用 Cloud Key Management Service。该 “KMS_SERVICE_ACCT_NAME”字段为 service-PROJECT_NUMBERcmek-pPROJECT_NUMBER

  2. 如果 KMS_SERVICE_ACCT_NAME 字段的格式为 cmek-pPROJECT_NUMBER, 如果您使用的是 VPC Service Controls 启用网域限定共享, 然后确定您是否需要迁移 CMEK 服务账号。 有关何时需要迁移以及执行步骤的信息 请参阅 排查 VPC Service Controls 和网域限制共享问题

分配 Encrypter/Decrypter 角色

在日志存储桶级别配置 CMEK 时,请将 通过向服务账号分配 Cloud KMS CryptoKey Encrypter/Decrypter 将此角色分配给由 kmsServiceAccountId 字段标识的服务账号:

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

按如下方式设置上一个命令中的变量:

  • KMS_SERVICE_ACCT_NAME 替换为 kmsServiceAccountId 值 您在上一步中确定的。

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

创建日志存储桶并提供 Cloud KMS 密钥

如需创建日志存储桶并为日志存储桶启用 CMEK,请按以下步骤操作: 运行以下命令 gcloud logging buckets create 命令:

gcloud logging buckets create BUCKET_ID \
--location=LOCATION \
--cmek-kms-key-name=KMS_KEY_NAME

验证密钥的启用状态

如需验证您是否已成功创建启用了 CMEK 的日志存储桶,请执行以下操作: 运行以下命令:

gcloud logging buckets list --project=BUCKET_PROJECT_ID

在表格输出中,您会看到名为 CMEK 的列。如果 如果 CMEK 列为 TRUE,则表示日志存储桶启用了 CMEK。

如需查看特定日志存储桶的详细信息(包括密钥的详细信息),请运行以下命令, 此命令:

gcloud logging buckets describe BUCKET_ID

管理 Cloud KMS 密钥

以下各部分介绍了如何更新日志存储桶以使用 Cloud KMS 密钥的最新主密钥版本。它们还描述了 如何更改、撤消 Cloud KMS 密钥的访问权限以及停用 Cloud KMS 密钥。

轮替 Cloud KMS 密钥

创建 Cloud KMS 密钥时, 您可以配置轮替周期。您还可以 手动轮替 Cloud KMS 密钥。 每次轮替密钥时,系统都会为该密钥创建一个新版本。

如果轮替 Cloud KMS 密钥,则新的密钥版本将仅应用 记录在密钥轮替后创建的存储分区。如果 现有日志存储桶,轮替密钥不会更改日志存储桶 保护其数据

例如,假设您创建了一个日志存储桶并启用 CMEK, 然后轮替 Cloud KMS 密钥您要创建的存储桶 不会使用新的密钥版本,而是会继续保护其 数据中的密钥版本,在日志存储桶创建完毕时标记为主版本 创建。

要更新日志存储桶以使用 Cloud KMS 密钥,请执行以下操作:

  1. 确定日志存储桶的当前 Cloud KMS 密钥。 如需了解详情,请参阅验证密钥的启用状态
  2. 确定您可以使用的另一个 Cloud KMS 密钥。如果您的密钥环只有一个密钥,请创建密钥
  3. 将日志存储桶的Cloud KMS 密钥更改为 在上一步中创建的 Cloud KMS 密钥。
  4. 将日志存储桶的Cloud KMS 密钥更改为 原始 Cloud KMS 密钥

更改 Cloud KMS 密钥

如需更改与日志存储桶关联的 Cloud KMS 密钥,请创建密钥并更新日志存储桶的 CMEK 设置:

gcloud logging buckets update BUCKET_ID --cmek-kms-key-name=NEW_KMS_KEY_NAME

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

任何时候,如需撤消 Logging 对 Cloud KMS 密钥的访问权限,请移除已配置的服务账号对该密钥的 IAM 权限。

如果您取消了 Logging 对某个密钥的访问权限,更改最长可能需要一小时才会生效。

如果您有关联的 BigQuery 数据集, BigQuery 无法使用此访问权限将密钥应用于新 BigQuery 表格。如果您想对 BigQuery 表使用非 关联到 Logging,请遵循 BigQuery 文档 。如果您撤消了 Logging 对密钥的访问权限,并且 关联的 BigQuery 数据集; 那么您还需要撤消 BigQuery 对同一密钥的访问权限。

您无法撤消 BigQuery 对关联数据集密钥的访问权限 同时保留 Logging 的访问权限。

如需详细了解撤消访问权限的影响,请参阅 限制

如需移除 Logging 对密钥的访问权限,请运行以下命令:

gcloud kms keys remove-iam-policy-binding \
--project=KMS_PROJECT_ID \
--member serviceAccount:KMS_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 会停用 Error Reporting

如果您想使用 Error Reporting 为您的日志存储分区启用客户管理的加密密钥 (CMEK)。 如需了解详情,请参阅问题排查

无法从日志存储桶中移除 CMEK

您无法重新配置日志存储分区来更改或移除 CMEK。

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

如果同时满足以下两个条件,则 Cloud KMS 密钥被视为可由 Logging 使用和访问:

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

Logging 强烈建议确保所有密钥都已正确配置,并且始终可用。

灾难恢复文件丢失

如果 Cloud Logging 主存储空间中出现重大故障,则 Logging 会将日志记录数据镜像到灾难恢复文件。为资源(例如 Google Cloud 组织)启用 CMEK 后,属于该资源的日志受配置的 CMEK 密钥保护。如果无法访问 CMEK 密钥,则无法为该资源写入灾难恢复文件。

灾难恢复文件丢失不会影响正常的日志记录操作。但是,如果发生存储灾难,Cloud Logging 可能无法从未正确配置 CMEK 的资源中恢复日志。

支持限制条件

如果资源的密钥未正确配置或不可用,则 Cloud Customer Care 无法读取该资源的日志。

查询性能下降

当客户管理的加密密钥无法访问时,Cloud Logging 继续加密您的数据并将数据存储在日志存储分区中。不过, Cloud Logging 无法对此数据执行后台优化。 如果恢复了密钥访问权限,则数据将可用;但是,数据最初会以未优化的状态存储,并且查询性能可能会受到影响。

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

当您使用 Cloud EKM 密钥时,Google 无法控制由外部管理的密钥在外部密钥管理合作伙伴系统中的可用性。对于存储桶级 CMEK,如果由外部管理的密钥 不可用,Cloud Logging 会继续将日志存储在日志存储分区中 但用户无法访问这些日志。

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

区域性

创建日志存储桶并启用 CMEK 时,您必须使用符合以下条件的密钥: 区域与您的数据的区域范围一致。 您无法为在global中创建的日志存储分区配置 CMEK region [地区]

客户端库可用性

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

配额

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

排查配置错误

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