本文档介绍了如何为 Cloud Logging 配置和管理客户管理的加密密钥 (CMEK),以满足组织的合规性需求。您可以将 CMEK 配置为组织和/或文件夹的默认资源设置。配置后,Cloud Logging 可确保组织或文件夹中的所有新日志存储桶都使用客户管理的密钥进行加密。
您可以为组织和文件夹配置默认设置。当您创建新资源时,这些资源会继承其父级的默认设置。例如,如果您将 CMEK 配置为组织的默认资源设置,那么在该组织的项目、文件夹或结算账号中创建的所有新 _Default
和 _Required
日志存储桶都将使用默认密钥进行加密。此外,如果您在该组织的子级项目中创建自定义日志存储桶,系统会自动使用默认密钥,除非您在创建日志存储桶时提供其他密钥。
本指南中的说明使用 Google Cloud CLI。
概览
默认情况下,Cloud Logging 会对以静态方式存储的客户内容进行加密。Logging 存储在日志存储桶中的数据使用密钥加密密钥进行加密,此过程称为信封加密。访问日志记录数据需要具有这些密钥加密密钥的访问权限。默认情况下,这些内容是 Google-owned and Google-managed encryption keys ,您自己无需执行任何操作。
您的组织可能具有我们的默认静态加密不提供的监管、合规性相关或高级加密要求。为满足组织的要求,您可以将 CMEK 配置为控制和管理您自己的加密,而不是使用Google-owned and Google-managed encryption keys。
如需了解 CMEK 的具体信息(包括其优点和限制),请参阅 CMEK。
将 CMEK 配置为 Logging 的默认资源设置后,会发生以下情况:
- 组织或文件夹中的新日志存储桶会使用已配置的密钥自动加密。不过,您可以更改该密钥或创建日志存储桶并指定其他密钥。如需了解详情,请参阅为日志存储桶配置 CMEK。
- 如果您使用的是 Log Analytics 并查询多个日志存储桶,则默认密钥可能会用于加密临时数据。如需了解详情,请参阅 Log Analytics 限制。
准备工作
首先,请完成以下步骤:
在创建启用 CMEK 的日志存储桶之前,请先查看限制。
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
配置您计划在其中创建密钥的 Google Cloud 项目:
-
如需获得创建密钥所需的权限,请让您的管理员为您授予项目的 Cloud KMS Admin (
roles/cloudkms.admin
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 -
Cloud Logging 可让您使用来自任何区域的密钥。不过,在创建日志存储桶时,日志存储桶的位置必须与密钥的位置一致。如需了解支持的区域,请参阅以下内容:
如果您按照本文中的步骤将 CMEK 配置为 Logging 的默认资源设置,那么在组织或文件夹中创建的新日志存储桶会自动配置为使用 CMEK。此外,由于日志存储桶的位置必须与密钥的位置匹配,因此在将 CMEK 配置为默认资源设置后,您无法在
global
区域中创建日志存储桶。
-
确保您在要配置默认设置的组织或文件夹中的 IAM 角色包含以下 Cloud Logging 权限:
logging.settings.get
logging.settings.update
- FOLDER_ID:文件夹的唯一数字标识符。如需了解如何使用文件夹,请参阅创建和管理文件夹。
- ORGANIZATION_ID:组织的唯一数字标识符。如需了解如何获取此标识符,请参阅获取组织 ID。
- KMS_PROJECT_ID:运行 Cloud KMS 的 Google Cloud 项目的唯一字母数字标识符,由 Google Cloud 项目名称和随机分配的编号组成。如需了解如何获取此标识符,请参阅标识项目。
- KMS_SERVICE_ACCT_NAME:在
gcloud logging settings describe
命令的响应kmsServiceAccountId
字段中显示的服务账号名称。 - KMS_KEY_LOCATION:Cloud KMS 密钥的区域。
- KMS_KEY_RING:Cloud KMS 密钥环的名称。
- KMS_KEY_NAME:Cloud KMS 密钥的名称。其格式如下所示:
projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
。 - 在 Google Cloud 控制台中,前往密钥管理页面。
选择包含密钥的密钥环的名称。
选中相应密钥的复选框。
权限标签变为可用。
在添加成员对话框中,指定您授予访问权限的 Logging 服务账号的电子邮件地址。
在选择角色下拉列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter。
点击添加。
当
constraints/gcp.restrictNonCmekServices
限制条件的服务Deny
政策列表中包含logging.googleapis.com
时,Logging 会拒绝创建未受 CMEK 保护的新用户定义的存储桶。不过,此限制不会阻止 Cloud Logging 创建Google Cloud 项目创建时创建的_Required
和_Default
日志存储桶。强制执行
constraints/gcp.restrictCmekCryptoKeyProjects
后,Logging 会创建受 CMEK 保护的资源,这些资源由允许的项目、文件夹或组织中的 CryptoKey 提供保护。-
在 Google Cloud 控制台中,前往组织政策页面:
如果您使用搜索栏查找此页面,请选择子标题为 IAM 和管理的结果。
- 选择您的组织。
验证 CMEK 专属限制条件,并在必要时更新这些限制条件。
如需了解如何修改组织政策,请参阅创建和修改政策。
- FOLDER_ID:文件夹的唯一数字标识符。如需了解如何使用文件夹,请参阅创建和管理文件夹。
- KMS_KEY_LOCATION:Cloud KMS 密钥的区域。
- KMS_KEY_NAME:Cloud KMS 密钥的名称。其格式如下所示:
projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
。 - KMS_KEY_RING:Cloud KMS 密钥环的名称。
- KMS_PROJECT_ID:运行 Cloud KMS 的 Google Cloud 项目的唯一字母数字标识符,由 Google Cloud 项目名称和随机分配的编号组成。如需了解如何获取此标识符,请参阅标识项目。
- ORGANIZATION_ID:组织的唯一数字标识符。如需了解如何获取此标识符,请参阅获取组织 ID。
- KMS_KEY_LOCATION:Cloud KMS 密钥的区域。
- KMS_KEY_NAME:Cloud KMS 密钥的名称。其格式如下所示:
projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
。 - KMS_KEY_RING:Cloud KMS 密钥环的名称。
- KMS_PROJECT_ID:运行 Cloud KMS 的 Google Cloud 项目的唯一字母数字标识符,由 Google Cloud 项目名称和随机分配的编号组成。如需了解如何获取此标识符,请参阅标识项目。
- FOLDER_ID:文件夹的唯一数字标识符。如需了解如何使用文件夹,请参阅创建和管理文件夹。
- ORGANIZATION_ID:组织的唯一数字标识符。如需了解如何获取此标识符,请参阅获取组织 ID。
可以将 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 会对静态存储的客户内容进行加密。如需了解详情,请参阅配置消息加密。
- KMS_PROJECT_ID:运行 Cloud KMS 的 Google Cloud 项目的唯一字母数字标识符,由 Google Cloud 项目名称和随机分配的编号组成。如需了解如何获取此标识符,请参阅标识项目。
- KMS_SERVICE_ACCT_NAME:在
gcloud logging settings describe
命令的响应kmsServiceAccountId
字段中显示的服务账号名称。 - KMS_KEY_LOCATION:Cloud KMS 密钥的区域。
- KMS_KEY_RING:Cloud KMS 密钥环的名称。
- KMS_KEY_NAME:Cloud KMS 密钥的名称。其格式如下所示:
projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
。 - FOLDER_ID:文件夹的唯一数字标识符。如需了解如何使用文件夹,请参阅创建和管理文件夹。
- ORGANIZATION_ID:组织的唯一数字标识符。如需了解如何获取此标识符,请参阅获取组织 ID。
- 密钥已启用。
gcloud logging settings describe
命令的响应kmsServiceAccountId
字段中列出的服务账号对密钥拥有加密和解密权限。
为组织或文件夹启用 CMEK
请按照以下说明为您的Google Cloud 文件夹或组织启用 CMEK。
确定服务账号 ID
如需确定要为其应用 CMEK 的组织或文件夹关联的服务账号 ID,请运行以下 gcloud logging settings describe
命令:
文件夹
gcloud logging settings describe --folder=FOLDER_ID
在运行上面的命令之前,请先进行以下替换:
单位
gcloud logging settings describe --organization=ORGANIZATION_ID
在运行上面的命令之前,请先进行以下替换:
上一个命令会为组织或文件夹生成服务账号(如果尚不存在)。该命令还会返回两个服务账号的 ID,一个在 kmsServiceAccountId
字段中,另一个在 loggingServiceAccountId
字段中。如需将 CMEK 配置为默认设置,请使用 kmsServiceAccountId
字段中的值。
下面说明了指定组织时对上述命令的响应示例:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com name: organizations/ORGANIZATION_ID/settings
为每个资源运行一次预配过程。多次运行describe
命令会为 kmsServiceAccountId
字段返回相同的值。
如果您无法使用 Google Cloud CLI,请运行 Cloud Logging API 方法 getSettings
。
分配 Encrypter/Decrypter 角色
如需使用 CMEK,请将 Cloud KMS CryptoKey Encrypter/Decrypter 角色分配给服务账号,以向该服务账号授予使用 Cloud KMS 的权限:
gcloud
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
在运行上面的命令之前,请先进行以下替换:
控制台
配置组织政策
Logging支持可以要求 CMEK 保护并且可以限制哪些 Cloud KMS CryptoKey 可用于 CMEK 保护的组织政策:
如需详细了解 CMEK 和组织政策,请参阅 CMEK 组织政策。
如果存在指定 CMEK 限制的组织政策,请确保这些限制与组织或文件夹的Logging默认设置一致。此外,如果您计划修改默认设置,请在更新默认设置之前先查看组织政策,并在需要时更新这些政策。
如需查看或配置组织政策,请执行以下操作:
使用 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
区域创建日志存储桶,因为您必须使用区域与数据的区域范围相匹配的密钥。
如果您无法使用 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
在运行上面的命令之前,请先进行以下替换:
当上一个命令返回 kmsKeyName
字段中的 Cloud KMS 密钥名称时,系统会为组织或文件夹启用 CMEK:
kmsKeyName: KMS_KEY_NAME kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
将日志路由到支持的目的地
管理 Cloud KMS 密钥
以下部分介绍了如何针对 Cloud KMS 密钥执行何更改、撤消访问权限或停用操作。
更改 Cloud KMS 密钥
如需更改与组织或文件夹关联的 Cloud KMS 密钥,请创建密钥,然后运行 gcloud logging settings update
命令并提供有关新 Cloud KMS 密钥的信息:
文件夹
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 密钥的访问权限
您可以通过移除已配置的服务账号对该密钥的 IAM 权限,撤消 Logging 对 Cloud KMS 密钥的访问权限。
如果您取消了 Logging 对某个密钥的访问权限,更改最长可能需要一小时才会生效。
如需撤消 Logging 对 Cloud KMS 密钥的访问权限,请运行以下 Google Cloud CLI 命令:
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
为组织或文件夹停用 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 密钥轮替注意事项
当与 Google Cloud 组织或文件夹关联的 Cloud KMS 密钥轮替使用时,Cloud Logging 不会自动轮替临时灾难恢复文件的加密密钥。现有恢复文件将继续使用在创建它们时所用的密钥版本。新的恢复文件会使用当前的主要密钥版本。
限制
以下是将 CMEK 配置为 Logging 的默认资源设置时存在的已知限制。
灾难恢复文件不可用
如果同时满足以下两个条件,则 Cloud KMS 密钥被视为可由 Logging 使用和访问:
如果 Logging 无法再访问 Cloud KMS 密钥,则 Logging 无法写入临时灾难恢复文件,而对于用户,查询将停止运行。即使在密钥访问恢复后,查询性能也可能会降低。
将日志路由到 Cloud Storage 也可能受到影响,因为Logging无法写入协调路由所需的临时文件。如果在加密或解密数据时遇到错误,系统会向包含 Cloud KMS 密钥的 Google Cloud 项目发送通知。
客户端库可用性
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 和默认设置错误。