通过 AWS CloudHSM 实现专用密钥管理 - 符合 FIPS 140-2 Level 3 的加密
通过专有 HSM 实例实现符合 FIPS 140-2 Level 3 的密钥管理。介绍与 KMS 的区分使用以及通过 KMS 自定义密钥存储实现两者集成的方法。
CloudHSM 概述
CloudHSM 是一项通过专用硬件安全模块(HSM)管理加密密钥的服务。与 KMS 使用多租户共享 HSM 不同,CloudHSM 提供专有的 HSM 实例。已获得 FIPS 140-2 Level 3 认证,满足金融、医疗和政府机构的合规要求。密钥在 HSM 内生成和存储,密钥材料永远不会以明文形式导出到 HSM 外部。AWS 工作人员在设计上无法访问用户密钥,密钥的完全所有权归用户所有。
与 KMS 的区分使用
KMS 适用于大多数用例,运维负担低且与 AWS 服务的集成丰富。CloudHSM 适用于以下场景:必须满足 FIPS 140-2 Level 3 要求、需要在专有 HSM 中管理密钥、需要 PKCS#11 或 JCE 接口。KMS 自定义密钥存储结合了两者的优势,在保持 KMS 的 API 和集成性的同时,将密钥存储在 CloudHSM 中。KMS 通过 FIPS 140-2 Level 2 认证(部分端点为 Level 3),如果审计上不强制要求 Level 3,则 KMS 已经足够。在密码处理吞吐量方面,单个 CloudHSM 实例每秒可处理数千次 RSA 签名或 AES 加密,当处理量超过 KMS 的请求速率配额(默认每秒数千次请求,取决于区域)时具有优势。
集群设计与高可用性
CloudHSM 集群在多个 AZ 中部署 HSM 实例,通过密钥自动同步确保高可用性。推荐至少在 2 个 AZ 中部署 HSM,即使一个 HSM 发生故障,也可以在另一个 AZ 的 HSM 上继续处理。客户端 SDK 以轮询方式将请求分发到集群内的 HSM,故障时自动进行故障转移。HSM 的备份会自动加密保存到 S3,用于集群恢复或跨区域复制。通过 PKCS#11、JCE、OpenSSL 的标准接口从应用程序执行加密操作,可将现有应用程序代码的修改降至最低。 如果想全面学习加密密钥管理的最佳实践,请参考技术书籍(Amazon)。
代表性使用场景
CloudHSM 的主要用例包括 SSL/TLS 卸载、数据库加密(TDE)、代码签名和文档签名、私有证书颁发机构(CA)密钥存储、金融交易签名(PCI DSS 合规)以及令牌化。在 SSL/TLS 卸载中,Web 服务器的私钥存储在 HSM 中,通过 OpenSSL 引擎委托签名处理,从而消除 EC2 实例内存中的私钥。与 Oracle TDE 和 Microsoft SQL Server TDE 集成以在 HSM 中保护数据库加密密钥也是常见配置。与 AWS Private CA 结合,将 CA 私钥保管在 CloudHSM 中并在 HSM 中执行证书签名处理,可降低 CA 密钥泄露风险。
CloudHSM 的定价与运维注意事项
CloudHSM 按 HSM 实例的小时计费,每个实例约 1.60 美元/小时(约 1,152 美元/月)。高可用性配置在 2 个 AZ 中部署时月费约 2,304 美元。与 KMS(每个密钥月费 1 美元)相比成本显著更高,因此仅在有 FIPS 140-2 Level 3 要求或专有 HSM 要求时使用。运维上的重要注意事项是,如果丢失 Crypto Officer(CO)的凭据,将永久无法访问集群中的密钥,因此凭据的安全保管至关重要。HSM 用户管理(CU: Crypto User、CO: Crypto Officer)独立于 AWS IAM,通过 HSM 内部的用户管理命令进行。初始化流程为:创建第一个 HSM 后使用 CloudHSM Management Utility(CMU)创建 CO,然后创建 CU 以授权应用程序执行密钥操作。
总结
CloudHSM 是通过专有硬件安全模块管理加密密钥、满足 FIPS 140-2 Level 3 严格合规要求的服务。通过 KMS 自定义密钥存储可从 KMS API 操作 CloudHSM 的密钥,通过 PKCS#11 和 JCE 的标准接口也可轻松与现有应用程序集成。由于成本较高,应仅在需求明确时采用,并仔细规划凭据管理和高可用性设计。