本页介绍了使用 Apigee 的 CMEK 最佳实践。
风险防范
目前,Apigee 支持一组受限的客户管理的加密密钥功能。为避免意外删除 CMEK 密钥或密钥版本,我们建议您执行以下操作:
-
加强访问权限控制:仅限可信的管理员或高级团队成员使用
roles/cloudkms.admin
角色或密钥销毁/更新权限。 - 定期审核权限:确保权限不会随着时间的推移而无意扩大。
- 自动删除密钥:请勿设置自动化功能来自动删除/停用密钥。
设置密钥销毁时长和轮替
- 考虑延长默认的销毁时长:默认的预定销毁时长为 30 天。在创建密钥时设置自定义销毁时长,或通过组织政策强制执行更长的时长,可以在意外删除密钥时提供更多恢复时间。如果您认为销毁时间越长,风险越大,请注意,销毁时间越长,您就越有可能不小心删除密钥。您可以权衡好收益和风险,看看哪种时长最适合您。
- 要求在销毁密钥之前先停用密钥:我们建议您在安排销毁密钥版本之前先停用密钥版本。这有助于验证密钥是否正在使用,也是确定是否可以安全地销毁密钥版本的重要步骤。
- 实现密钥轮替:定期轮替密钥可限制密钥泄露的影响。如果密钥被破解,则定期轮替会限制容易被破解的实际消息数量。
Apigee 中的密钥轮替
密钥轮替的主要目的是减少使用单个密钥加密的数据量,而不是完全替换旧密钥版本。对于运行时密钥和控制平面密钥,原始密钥版本从创建之时起就一直与资源相关联。
说明性示例
- Apigee 实例始终会使用在创建时处于活跃状态的主要 CMEK 密钥版本,即使在密钥轮替后也是如此。
- 代理软件包将继续使用首次创建时处于活跃状态的主要 CMEK 密钥版本。但是,如果此代理捆绑包在密钥轮替后被修改,则其中的所有新数据都将使用新的主密钥版本进行加密。
当前限制:不支持自动重新加密
请务必注意,Apigee 目前不支持在轮替密钥时自动重新加密现有数据。系统将使用新的主密钥版本加密少量新数据。大多数数据(例如分析数据、运行时磁盘数据和旧版代理修订版本)仍将使用旧密钥版本进行加密。
密钥停用
停用或销毁密钥会中断 Apigee 功能。如果您先停用密钥,则可以将其重新启用,以防误报。
如果您怀疑密钥(或密钥版本)遭到破解,请执行以下操作:
-
高风险场景:如果您认为 Apigee 数据属于敏感数据,并且攻击者很有可能利用这些数据,请立即停用密钥并撤消对其的访问权限。您应先停用密钥,然后再重新创建
apigee
实例和apigee
组织。 -
低风险场景:如果尽量缩短停机时间比潜在风险更重要,您应先重新创建
apigee
实例和apigee
组织,然后再停用/删除 CMEK。请参阅下文,了解如何通过投资备份/恢复来主动防止停机。 - 与支持团队联系:如果您认为某个密钥已遭泄露,需要将其停用,建议您与 Google Cloud Customer Care 联系。
请查看下文中有关停用/撤消/销毁密钥的影响。停用密钥后,您需要重新创建 apigee
组织/实例。请参阅最佳实践
- 运行时 CMEK 遭到破解:使用新的 CMEK 创建新实例,然后在流量迁移后删除原始实例以及旧的运行时 CMEK。
-
所有 CMEK 遭到破解:使用新的 CMEK 密钥创建新的
apigee
组织,复制您的配置,转移流量,然后关闭旧组织并停用/删除原始 CMEK。 -
与 Google Cloud Customer Care 团队联系:如果用于删除/重新创建实例或
apigee
组织的 API 需要很长时间,请与 Google Cloud Customer Care 团队联系。
密钥停用/撤消/销毁的影响
停用、撤消或销毁密钥会导致 Apigee 无法正常运行。影响如下:
- 停用/撤消/销毁整个密钥:Apigee 面向客户的 API 将立即停止运行。内部系统将在几分钟内失败,从而影响代理部署、运行时流量、分析和 API 安全性。由于磁盘重新装载问题,实例将在几周内完全无法启动。
- 停用/撤消/销毁密钥版本(包括主密钥版本和以前的密钥版本):使用该密钥版本的 Apigee 面向客户的 API 将立即停止运行。一些内部系统和运行时流量将受到影响。如果密钥版本用于磁盘加密,则实例可能无法启动。
重新启用密钥
如果密钥遭到破解是虚惊一场,或者您并非有意停用密钥,则可以在密钥被停用时重新启用该密钥。重新启用密钥可恢复面向客户的 API 的功能。内部系统应该会在几分钟内恢复。但是,在密钥不可用期间,API 安全性和分析可能会出现数据丢失。
- 如果密钥停用时间较短:系统应该会恢复,但 API 安全和分析数据会丢失一些。
- 如果密钥停用时间较长:系统将恢复为提供流量,但可能会导致数据不一致,即一个区域返回一个值,而之前停用的区域返回另一个值。请与 Google Cloud Customer Care 联系,以修复您的 Apigee 集群。
删除密钥
在删除密钥之前,请考虑执行以下操作:
- 为了清理目的:请勿删除旧密钥,除非 Apigee 已发布密钥跟踪功能,以便在删除密钥之前了解密钥用量。
- 如果必须删除密钥:请先停用密钥,然后安排销毁密钥。您可以使用组织政策强制执行先停用密钥,然后再销毁密钥,并设置最短销毁时长。
使用 CI/CD 备份保护您的 Apigee 组织
如果客户管理的加密密钥 (CMEK) 遭到泄露,请立即采取措施停用、撤消或销毁遭到泄露的密钥。不过,这项必要的安全措施可能会导致您的 Apigee 系统无法正常运行,从而导致潜在的停机和服务中断。
为确保 Apigee 服务的停机时间最短或为零,您必须采取主动措施:持续备份贵组织的配置(持续集成/持续部署 [CI/CD] 备份)。请参阅可用的工具和有关恢复 Apigee 组织的最佳实践。
CI/CD 和 IaC 的强大功能
通过投资基础架构即代码 (IaC) 解决方案 Terraform 等工具,您可以根据备份配置顺畅地创建新的 Apigee 组织。借助这种简化流程,您可以快速高效地重新创建 Apigee 组织,最大限度地减少停机时间并确保业务连续性。
可用于使用情况的工具
您可以组合使用以下所有工具来定期备份 apigee
组织,并测试恢复流程。
- 如果您只想重新创建 Apigee 实例,请参阅重新创建 Apigee 实例并避免停机。
-
如果您想使用 Terraform,可以考虑借鉴开源
apigee/terraform modules
的想法。 -
如果您想重新创建 Apigee 组织,可以使用
apigeecli
、apigeecli organizations export
和apigeecli organizations import
作为备份的基础。请参阅导出/重新创建组织。 - 如果您想备份和恢复上述列表之外的更多资源,则需要直接与 API 互动或使用其他 apigeecli 命令。
最佳做法
- 定期备份:安排定期备份,以确保您拥有最新的配置。请参阅导出/重新创建组织。
- 安全存储:将备份存储在安全的位置,例如加密存储库。
- 测试恢复:定期测试恢复流程,以确保您能有效地恢复 Apigee 组织。定期测试恢复流程,以确保您可以快速将流量切换到新创建的 Apigee 组织。
导出/重新创建组织
apigeecli
工具是一个命令行工具,可用于管理 Apigee 资源。借助该 API,您可以在易于使用的命令行界面中执行与 Apigee API 相同的操作,类似于 gcloud
命令。
如果您想重新创建 Apigee 组织或迁移到其他 Apigee 组织,可以使用 apigeecli
organizations export
和 apigeecli organizations import
。它还可用作持续备份的基础。它可以导出和导入以下资源:
- API 门户文档
- API 门户类别
- API 代理
- API 安全配置和安全配置文件
- 共享流
- API 产品
- 开发者
- 包含凭据的开发者应用
- 包含凭据的 AppGroup 和应用
- 环境详情
- 环境组
- 数据采集器配置
- 环境级密钥库和别名证书
- 环境级目标服务器
- 环境级引用
- 组织、环境和代理级别的键值对映射 (KVM) 和条目
- 密钥库和别名证书(不包括私钥)
该工具可以管理所有其他 Apigee 资源。您可以使用 apigeecli tree
查看完整的命令列表。
此工具有一些限制:
- 密钥库需要在创建时保存私钥,并将其包含在本地备份文件中
- OAuth 令牌无法备份和恢复,这意味着新创建的 Apigee 实例需要客户重新登录。
- 系统不会迁移组织政策和 IAM 规则等访问权限控制。如果您想迁移这些规则,则需要使用 Google Cloud API。
-
不支持 Google Analytics 报告导出,且分析指标不会复制到新的
apigee
组织中。 -
此
import
命令不会自动为您创建实例、envGroup、EnvAttachments、端点连接或部署代理。您可以管理这些资源,但不能直接通过import
命令管理。 -
此
import
命令不会自动创建门户网站。您必须通过界面手动创建门户网站。 - 我们建议您针对密钥删除进行灾难恢复,并定期测试恢复流程,以确保您可以快速将流量切换到新创建的 Apigee 组织。
前提条件
在开始之前,请确保满足以下前提条件。
-
已安装 Apigee CLI:按照安装指南中的步骤安装
apigeecli
。 -
身份验证:您必须拥有必要的权限和身份验证凭据才能与 Apigee 组织进行交互。确保您已设置:
-
Google Cloud SDK (
gcloud
):已安装并通过身份验证。 -
访问令牌:使用
gcloud auth print-access-token
获取访问令牌。
-
Google Cloud SDK (
- 网络访问:确保您的网络允许访问 Apigee API。
-
创建组织:创建您要迁移到的新的
apigee
组织。您可以创建不同类型的apigee
组织;但请务必使用与原始组织相同的组织类型(随用随付或订阅)和相同类型的网络路由。
导出 Apigee 组织
以下示例展示了命令示例。如需详细了解不同的标记,请参阅 apigeecli organizations export。
# Sample command mkdir apigee_backup cd apigee_backup # gcloud auth application-default login export ORG_FROM=REPLACE apigeecli organizations export -o $ORG_FROM --default-token
导入 Apigee 组织
以下示例展示了命令示例。如需详细了解不同的标记,请参阅 apigeecli organizations import
# Sample command # gcloud auth application-default login export ORG_TO=REPLACE apigeecli organizations import -o $ORG_TO -f . --default-token
导入后步骤
创建实例并设置网络
如需创建实例并设置网络,请执行以下操作:
- 按照创建新实例中的步骤创建新实例。
- 配置北向流量:“北向”是指从外部或内部客户端通过负载均衡器流向 Apigee 的 API 流量。您需要确保正确配置 PSC 或 VPC,以便实例可供访问。您必须在新组织中设置环境组主机名。
- 配置南向流量:“南向”是指从 Apigee 到您的 API 代理目标服务的 API 流量。因此,您必须为 NAT 预留并激活新的 IP 地址,并在目标端点上重新配置防火墙/许可名单。
如需了解详情,请参阅 Apigee 网络选项。
备份/恢复其他配置
使用以下任一方法备份/恢复其他配置:
-
对于 IAM 规则:您可以使用
gcloud projects get-iam-policy
和gcloud projects set-iam-policy
复制自己的 IAM 政策,调整项目和apigee
组织名称,并将其应用于新的 Google Cloud 项目和apigee
组织。 - 对于其他 Apigee 配置:您可以使用 Apigee Management API。
部署代理
请使用以下方法之一来部署代理:
- 使用
apigeecli
- 请使用 Apigee 社区脚本作为参考
- 使用 Apigee 管理 API
切换流量
如需切换流量,请执行以下操作:
- 为新实例准备自动集成测试。
- 配置负载均衡器,以便在监控性能的同时,逐步将流量转移到新实例。