密钥存储 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

密钥存储

密钥存储是用于存储和使用加密密钥的安全位置。Amazon KMS 中的默认密钥存储还支持生成和管理其存储的密钥的方法。默认情况下,对于您在 Amazon KMS 中创建的 Amazon KMS keys,密钥材料将在符合 FIPS 140-3 加密模块认证计划的硬件安全模块(HSM)中生成并受其保护。KMS 密钥的密钥材料绝不会让 HSM 处于未加密状态。

使用 Amazon KMS 来创建和管理加密密钥时,Amazon KMS 支持用多种类型的密钥存储来保护密钥材料。Amazon KMS 提供的所有密钥存储选项均按照 FIPS 140-3 安全 3 级进行持续验证,旨在防止任何人(包括 Amazon 操作员)在未经您许可的情况下访问或使用您的纯文本密钥。

Amazon KMS 标准密钥存储

默认情况下,KMS 密钥是使用标准 Amazon KMS HSM 创建的。从您的角度来看,这种 HSM 类型可以看作是一组多租户 HSM 实例集,以实现可扩展性最高、成本最低且最容易管理的密钥存储。如果要创建将在一个或多个 Amazon Web Services 服务内使用的 KMS 密钥,以便该服务可以代表您加密数据,则需要创建对称密钥。如果您在自己的应用程序设计中使用 KMS 密钥,则可以选择创建对称加密密钥、非对称密钥或 HMAC 密钥。

在标准密钥存储选项中,Amazon KMS 会创建密钥,然后使用服务内部管理的密钥对其进行加密。然后,您密钥的加密版本的多个副本将存储在系统中,系统旨在保障持久性。在标准密钥存储类型中生成和保护密钥材料可让您充分利用 Amazon KMS 的可扩展性、可用性和耐久性,同时将 Amazon 密钥存储的操作负担和成本降至最低。

带导入的密钥材料的 Amazon KMS 标准密钥存储

您可以选择将密钥材料导入 Amazon KMS,而不是要求 Amazon KMS 生成并存储给定密钥的唯一副本,这样便能生成自己的 256 位对称加密密钥、RSA 或椭圆曲线(ECC)密钥,或HMAC 散列消息认证码密钥,并将其应用于 KMS 密钥标识符(keyId)。这有时被称为自带密钥(BYOK)。必须使用 Amazon KMS 颁发的公有密钥、支持的加密包装算法和 Amazon KMS 提供的基于时间的导入令牌来保护从本地密钥管理系统导入的密钥材料。此过程将验证您的加密导入密钥在离开您的环境后,是否只能通过 Amazon KMS HSM 解密。

如果您对生成密钥的系统有特定要求,或者想要在 Amazon 外保存密钥副本作为备份,则导入的密钥材料可能会很有用。请注意,您需要对导入的密钥材料的整体可用性和持久性负责。尽管 Amazon KMS 有导入的密钥的副本,并且可以在您需要确保高度可用,但导入的密钥还提供了一个特殊的删除 API – DeleteImportedKeyMaterial。此 API 将立即删除 Amazon KMS 拥有的导入的密钥材料的所有副本,且 Amazon 无法选择恢复密钥。此外,您还可以为导入的密钥设置过期时间,过期后密钥将无法使用。要使密钥在 Amazon KMS 中再次可用,则必须重新导入密钥材料并将其分配给相同的 keyId。这种针对导入密钥的删除操作与 Amazon KMS 代表您生成和存储的标准密钥不同。在标准情况下,密钥删除过程有一个强制性的等待期,在此期间,计划删除的密钥将首先被禁止使用。此操作允许您在可能需要该密钥才能访问数据的任何应用程序或 Amazon 服务的日志中查看拒绝访问错误。如果您看到此类访问请求,可以选择取消计划删除并重新启用该密钥。经过可配置的等待期(7 到 30 天)后,KMS 才会真正删除密钥材料、keyID 以及与密钥关联的所有元数据。有关可用性和持久性的更多信息,请参阅《Amazon KMS 开发人员指南》中的保护导入的密钥材料

导入的密钥材料还有一些其他限制需要注意。由于 Amazon KMS 无法生成新的密钥材料,因此无法对导入密钥配置自动轮换。您需要使用新的 keyId 创建新 KMS 密钥,然后导入新的密钥材料才能实现有效的轮换。此外,使用导入的对称密钥在 Amazon KMS 中创建的加密文字无法使用 Amazon 外的本地密钥副本轻松解密。这是因为 Amazon KMS 使用的经过身份验证的加密格式会将额外的元数据附加到加密文字中,以便在解密操作期间确保加密文字是由之前加密操作中使用的预期 KMS 密钥创建的。大多数外部加密系统不了解如何通过解析这些元数据来获得原始加密文字,从而使用其对称密钥副本。在导入的非对称密钥(例如 RSA 或 ECC)下创建的加密文字可以有匹配的(公有或私有)密钥部分的情况下,在 Amazon KMS 外使用,因为 Amazon KMS 没有向加密文字添加额外的元数据。

Amazon KMS 自定义密钥存储

不过,如果您需要加强对 HSM 的控制,则可以创建自定义密钥存储。

自定义密钥存储是 Amazon KMS 中的密钥存储,由您拥有和管理的 Amazon KMS 外的密钥管理器提供支持。自定义密钥存储将 Amazon KMS 的方便、全面的密钥管理界面与拥有和控制密钥材料和加密操作的能力结合。在自定义密钥存储中使用 KMS 密钥时,加密操作实际上是通过您的密钥管理器使用您的加密密钥来执行。因此,您对加密密钥的可用性和持久性以及 HSM 的运行承担更多责任。

拥有您的 HSM 可能有助于满足某些监管要求,这些要求尚不允许多租户 Web 服务(例如标准 KMS 密钥存储)保留您的加密密钥。自定义密钥存储并不比使用 Amazon 托管 HSM 的 KMS 密钥存储更安全,但其管理影响不同,且成本更高。因此,您对加密密钥的可用性和持久性以及 HSM 的运行承担更多责任。无论是将标准密钥存储与 Amazon KMS HSM 一起使用,还是使用自定义密钥存储,该服务都旨在确保任何人(包括 Amazon 员工)都无法在未经您许可的情况下检索或使用您的明文密钥。Amazon KMS 支持两种类型的自定义密钥存储:Amazon CloudHSM 密钥存储和外部密钥存储。

不支持的 特征

Amazon KMS 在自定义密钥存储中不支持以下功能。

Amazon CloudHSM 密钥存储

您可以在 Amazon CloudHSM 密钥存储中创建 KMS 密钥,这种情况下,将在您拥有并管理的 Amazon CloudHSM 集群中生成、存储和使用根用户密钥。向 Amazon KMS 发出的使用密钥执行某些密码操作的请求,将转发到您的 Amazon CloudHSM 集群以执行操作。虽然 Amazon CloudHSM 集群由 Amazon 托管,但它是由您直接管理和操作的单租户解决方案。Amazon CloudHSM 集群中 KMS 密钥的大部分可用性和性能由您拥有。要查看 Amazon CloudHSM 自定义密钥库是否符合您的要求,请在 Amazon 安全博客上阅读 Are Amazon KMS custom key stores right for you?

外部密钥存储

您可以将 Amazon KMS 配置为使用外部密钥存储(XKS),这种情况下,将在 Amazon Web Services 云 外的密钥管理系统中生成、存储和使用根用户密钥。向 Amazon KMS 提出的使用密钥进行某些加密操作的请求将转到您的外部托管系统以执行操作。具体而言,请求会被转发到您网络中的 XKS 代理,然后该代理会将请求转发到您使用的任何加密系统。XKS 代理是开源规范,任何人都可以集成。许多商业密钥管理供应商都支持 XKS 代理规范。由于外部密钥存储由您或第三方托管,因此您负责系统中密钥的所有可用性、持久性和性能。要查看外部密钥存储是否符合您的要求,请阅读 Amazon 新闻博客上的 Announcing Amazon KMS External Key Store (XKS)