本页面介绍如何将 CMEK 与 Apigee 搭配使用。 如需了解最佳实践,请参阅 Apigee CMEK 的最佳实践。
概览
默认情况下,Google Cloud 会使用 Google 拥有和管理的加密密钥自动加密静态数据。如果您有与保护数据的密钥相关的合规性或监管要求,则可以使用客户管理的加密密钥 (CMEK)。
如需详细了解如何将 CMEK 用于 Apigee,请参阅将 CMEK 与 Apigee 搭配使用。如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud Key Management Service 文档。
使用客户管理的加密密钥 (CMEK) 不一定提供比 Google 的默认加密机制更高的安全性:但是,您可以控制密钥的生命周期和管理的更多方面,以满足安全性和合规性要求。
如果您需要更好地控制 Google 拥有且由 Google 管理的密钥所允许的密钥操作,可以使用客户管理的加密密钥。这些密钥是使用 Cloud Key Management Service (Cloud KMS) 创建和管理的,并且您需要将密钥作为软件密钥存储在 HSM 集群中或存储在外部。
密钥管理功能由 Cloud KMS 服务提供。
CMEK 使用场景
本部分介绍了将 CMEK 与 Apigee 搭配使用的典型用例。
密钥轮替
自动或手动轮替密钥。请注意,轮替密钥时,先前存储在 Apigee 中的数据不会自动使用新密钥版本重新加密,只要用于加密的先前密钥版本未停用或销毁,就可以继续访问该数据。
密钥轮替的主要目的是限制数据暴露给单个密钥,而不是完全替换旧密钥版本。Apigee 目前不支持在密钥轮替时重新加密。具体而言,对于 Apigee,在您轮替密钥时,只有有限数量的新数据(例如新代理修订版)会使用新的主密钥版本进行加密。大多数数据(例如分析数据、运行时磁盘和旧代理版本)仍在使用旧密钥版本。如果您想完全移除之前的密钥版本,则需要重新创建 apigee
组织。对于运行时加密密钥,如果您想完全弃用之前的密钥版本,则需要重新创建运行时实例。如需了解详情,请参阅 Apigee CMEK 最佳实践。
另请参阅:轮替密钥
密钥删除和停用
停用密钥版本后,将无法访问使用该密钥版本加密的 Apigee 数据。如需恢复对数据的访问权限,您可以重新启用该密钥。
当您删除或停用 CMEK 密钥(即使只是针对以前的版本),您的 apigee
组织将开始出现故障,具体取决于用于加密的密钥版本。某些 API 会立即停止运行,因为这些 API 需要使用 CMEK 密钥来解密数据,而某些函数仅在触发某些系统操作时才会开始发生故障,例如需要重新装载的 Compute Engine 永久性磁盘。如需了解详情,请参阅密钥停用。
销毁密钥版本时,使用该密钥版本加密的任何 Apigee 数据都将变得不可读取且不可恢复。这是一项永久性且不可逆转的操作。
另请参阅:
密钥恢复
如果您不小心删除或停用了密钥或以前的密钥版本,应尽快尝试恢复它们。请注意,如果密钥不可用,则 CMEK 是一项旨在防止数据丢失的功能。恢复密钥后,您的 apigee
组织不一定能恢复,您可能会遇到数据丢失的情况。如需了解详情,请参阅重新启用密钥。请与 Google Cloud 客户服务团队联系,了解下一步的最佳做法。
另请参阅:销毁和恢复密钥版本
撤消密钥访问权限
如果您使用 IAM 撤消 Apigee 服务代理对密钥的访问权限,Apigee 将无法访问由任何密钥版本加密的任何控制平面数据。依赖于数据解密的 Apigee API 操作将失败。通过重新授予对密钥的访问权限可以恢复对数据的访问权限,并且解密数据的 Apigee API 操作将恢复。
另请参阅:管理对项目、文件夹和组织的访问权限
EKM
Apigee 目前不支持 Cloud External Key Manager (Cloud EKM)。如果您使用 Cloud EKM,则存在一个已知缺陷,即 Cloud EKM 错误不会正确传播并显示给您。
密钥跟踪
Apigee 不支持密钥跟踪,如果您查看密钥用途,发现某个版本的密钥未使用,请注意,这并不准确,因为 Apigee 未集成密钥跟踪功能。
配额
使用 CMEK 密钥可能会消耗某些 Cloud KMS 配额。如需了解 Cloud KMS 配额的最新信息,请参阅配额。
撤消加密密钥
如果您认为 Google Cloud 中的 Apigee 数据遭到泄露,您可以撤消加密密钥。撤消运行时 CMEK 以使运行时实例出现故障,并且无法访问网关数据。撤消控制平面 CMEK,使 Apigee 无法执行分析工作和部署新的代理。
将 CMEK 与 Apigee 搭配使用
Apigee 加密密钥用于运行时和控制平面数据,并在预配过程中创建。
Apigee 控制平面数据使用与运行时数据不同的加密密钥进行加密,并且可能存储在不同的区域。根据CMEK文档所述,此加密方式仅适用于静态数据,即最终存储在磁盘上的数据。
Apigee 控制平面数据包括代理配置(软件包)、一些环境配置数据和分析数据。Apigee 运行时数据包括应用数据,例如 KVM、缓存和客户端密钥,这些数据随后存储在运行时数据库中。
如需了解加密密钥类型的说明,请参阅 Apigee 加密密钥简介。
您只能在创建 Apigee 组织时添加加密密钥;分配 CMEK 后,您无法在创建组织后更改为其他 CMEK。
数据驻留控制平面 CMEK 区域
在区域化 Apigee 控制平面中,您为控制平面选择了两个加密密钥。这是因为 Apigee 控制平面底层的某些组件始终位于控制平面位置的单区域中。如需了解详情,请参阅数据驻留区域。
详细信息 | 所需密钥 |
---|---|
控制平面区域是控制平面的运行位置。Apigee 中的控制平面是一个抽象概念,其中多个底层组件共同构成了 Apigee 控制平面。控制平面数据是代理配置和分析存储。 其他控制平面数据(例如分析处理、门户)位于控制平面的子区域中。 所有子区域组件都将位于同一区域。 |
控制平面数据的一个密钥。 控制平面子区域数据的一个密钥。 |
组织政策限制条件
如果您的 Google Cloud 项目有 CMEK 组织政策限制,Apigee 会强制执行这些限制。如果您是通过 Google Cloud 界面、CLI 或直接通过 Apigee API 使用 Apigee,则可以保证强制执行 CMEK 政策。使用 Google Cloud Apigee 界面时,系统会预先验证 CMEK 组织政策限制,以便界面可以指导您选择有效的合规配置。
您可以创建 CMEK 组织政策限制条件,以要求:
目前,Apigee 中的部分功能不符合 CMEK 要求。为确保需要 CMEK 的项目不会不知不觉地使用未受 CMEK 保护的功能,我们会针对受 CMEK 限制的项目停用这些功能,直到它们符合要求为止。仅会停用这些功能的新用法(创建新资源或启用插件)。已在使用的功能和资源将保持可用和可修改状态,但不符合 CMEK 要求。以下功能将被停用:
- Apigee 经典版界面不支持新创建的需要 CMEK 的组织,因为 CMEK 组织是经典版界面不支持的区域性组织。现有组织仍可使用经典界面。请注意,CMEK 预验证不会在经典界面中实现,而是会依赖于 API 错误。这意味着,需要 CMEK 的现有组织将无法使用引导式界面来配置 CMEK 配置或停用非 CMEK 兼容功能。
-
Apigee Shadow API Discovery 不受 CMEK 组织政策的约束,也不符合 CMEK 要求。
- 评估组织创建会被 CreateOrganization 评估组织 API 和评估预配向导同时屏蔽。
-
Gemini Code Assist 不可用。
- 全球性组织创建会被 CreateOrganization 评估组织 API 和评估预配向导屏蔽。
- 无法使用 Hybrid 实例创建来强制执行。
- 在需要 CMEK 时,用于打开包含 Apigee 数据的 Looker Studio 的 Looker Studio 按钮会被停用。
- 门户创建会被 CreateSite API 屏蔽。由于门户界面仅在 Apigee Classic 中(不在 Google Cloud 控制台中),并且 Apigee Classic 界面中不会实现预验证,因此该屏蔽将依赖于 API 错误(Apigee Classic 界面中的创建门户按钮不会停用)。
- 无法对现有资源的符合性进行追溯性强制执行;如果您需要现有资源符合相关要求,则需要删除并重新创建资源。
如需详细了解如何在 Apigee 中使用组织政策限制条件,请参阅在 Apigee 中使用组织政策限制条件。
如何创建加密密钥
默认情况下,Google 会在预配过程中管理加密密钥的创建:不过,您可以自己创建它们。如需了解详情,请参阅 Apigee 加密密钥简介。
风险和缓解
本部分介绍潜在威胁和可以执行的操作。
- 风险:
- 密钥泄露:当攻击者获得对加密密钥的访问权限时(途径可能是利用 KMS 中的漏洞或针对密钥管理员发起攻击),发生这种情况。
- 拒绝服务攻击:攻击者可以通过攻击 KMS 或存储系统来干扰对加密密钥或数据的访问。
- 密钥丢失:意外删除或丢失密钥可能会导致数据丢失或无法访问。
- 缓解措施:
- 实施强大的访问权限控制和密钥管理政策。
- 监控 KMS 日志和活动是否存在可疑行为。
问题排查
下表介绍了使用 CMEK 加密的 configstore 数据时可能出现的一些常见错误情况、Apigee API 返回的大致错误消息以及建议的问题排查步骤。
错误消息/问题 | 原因 | 要采取的步骤 |
---|---|---|
Constraint constraints/gcp.restrictNonCmekServices violated for
projects/my-project attempting to create or enable trial org. CMEK is
not supported for trial orgs. To use trial orgs, adjust the
gcp.restrictNonCmekServices constraint for this project.
|
您尝试在项目存在组织政策限制条件的情况下预配试用组织。 |
试用/评估组织不支持 CMEK。您必须更新组织政策限制条件 constraints/gcp.restrictNonCmekServices ,以从拒绝服务列表中移除 Apigee,才能预配试用组织。 |
Constraint constraints/gcp.restrictCmekCryptoKeyProjects
violated for projects/my-project attempting to use
projects/my-project/locations/my-location/keyRings/kr-1/cryptoKeys/ck-1
key. Use a key from a project that is allowed by the
gcp.restrictCmekCryptoKeyProjects constraint.
|
您尝试在项目存在组织政策限制条件的组织中预配组织,并指定了未列入许可名单的 KMS CryptoKey。 |
您已在组织政策中设置了 constraints/gcp.restrictCmekCryptoKeyProjects ,要求您提供您列出的允许项目中的 CMEK 密钥。您必须提供来自允许项目的 CMEK,才能创建组织或实例。或者,您也可以更新组织政策限制条件 constraints/gcp.restrictCmekCryptoKeyProjects ,以允许使用您想要的特定 Google Cloud 项目中的密钥。 |
Apigee does not have permission to access key "..."
|
用户已撤消 Apigee 对提供的 KMS 密钥的访问权限,即
通过移除 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色来撤消。
|
用户应检查 KMS 密钥上配置的角色,并确保 Apigee 服务代理具有必要的权限。 |
Unable to encrypt/decrypt data. Cloud KMS Error: "..." is not
enabled, current state is: DESTROYED.
|
用户已停用或删除用于加密/解密所请求数据的密钥版本。 | 如有可能,用户应重新启用该密钥版本。如果密钥或密钥版本被销毁,则数据不可恢复(设计使然)。 |
No new Analytics data for US/EU users
|
此问题的其中一个可能的原因是用户已撤消/停用/删除单区域密钥。 | 用户应重新启用/恢复单区域密钥访问权限。 |
Control plane key "..." in region "..." is not valid for this
control plane instance. Supported region(s) are "…".
|
用户在一个区域中提供了单区域控制平面密钥,但该区域对控制平面的实例提供的区域或多区域无效或不受支持。 | 用户必须在其中一个受支持的区域中提供密钥,也可以选择使用其他控制平面实例。 |
Multi-region control plane key is not valid for this control
plane instance. Specify only the "apiConsumerDataEncryptionKeyName"
field.
|
用户在仅存在于单区域的控制平面(即,不是多区域控制平面)中提供了多区域控制平面密钥。 | 用户必须省略多区域密钥字段,或者选择使用多区域控制平面实例。 |
Multi-region control plane key is not valid for this control
plane instance. Specify a multi-region key with region "..."
|
用户向错误的多区域控制平面实例提供了多区域控制平面密钥(例如,向“eu”控制平面实例提供“us”密钥) | 用户必须在正确的多区域位置使用多区域密钥,或选择使用其他多区域控制平面实例。 |