本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
密钥存储
密钥存储是用于存储和使用加密密钥的安全位置。AWS KMS 中的默认密钥存储还支持生成和管理其存储的密钥的方法。默认情况下,对于您在 AWS KMS 中创建的 AWS KMS keys,密钥材料将在符合 FIPS 140-3 加密模块认证计划
使用 AWS KMS 来创建和管理加密密钥时,AWS KMS 支持用多种类型的密钥存储来保护密钥材料。AWS KMS 提供的所有密钥存储选项均按照 FIPS 140-3 安全 3 级进行持续验证,旨在防止任何人(包括 AWS 操作员)在未经您许可的情况下访问或使用您的纯文本密钥。
AWS KMS 标准密钥存储
默认情况下,KMS 密钥是使用标准 AWS KMS HSM 创建的。从您的角度来看,这种 HSM 类型可以看作是一组多租户 HSM 实例集,以实现可扩展性最高、成本最低且最容易管理的密钥存储。如果要创建将在一个或多个 AWS 服务内使用的 KMS 密钥,以便该服务可以代表您加密数据,则需要创建对称密钥。如果您在自己的应用程序设计中使用 KMS 密钥,则可以选择创建对称加密密钥、非对称密钥或 HMAC 密钥。
在标准密钥存储选项中,AWS KMS 会创建密钥,然后使用服务内部管理的密钥对其进行加密。然后,您密钥的加密版本的多个副本将存储在系统中,系统旨在保障持久性。在标准密钥存储类型中生成和保护密钥材料可让您充分利用 AWS KMS 的可扩展性、可用性和耐久性,同时将 AWS 密钥存储的操作负担和成本降至最低。
带导入的密钥材料的 AWS KMS 标准密钥存储
您可以选择将密钥材料导入 AWS KMS,而不是要求 AWS KMS 生成并存储给定密钥的唯一副本,这样便能生成自己的 256 位对称加密密钥、RSA 或椭圆曲线(ECC)密钥,或HMAC 散列消息认证码密钥,并将其应用于 KMS 密钥标识符(keyId)。这有时被称为自带密钥(BYOK)。必须使用 AWS KMS 颁发的公有密钥、支持的加密包装算法和 AWS KMS 提供的基于时间的导入令牌来保护从本地密钥管理系统导入的密钥材料。此过程将验证您的加密导入密钥在离开您的环境后,是否只能通过 AWS KMS HSM 解密。
如果您对生成密钥的系统有特定要求,或者想要在 AWS 外保存密钥副本作为备份,则导入的密钥材料可能会很有用。请注意,您需要对导入的密钥材料的整体可用性和持久性负责。尽管 AWS KMS 有导入的密钥的副本,并且可以在您需要确保高度可用,但导入的密钥还提供了一个特殊的删除 API – DeleteImportedKeyMaterial。此 API 将立即删除 AWS KMS 拥有的导入的密钥材料的所有副本,且 AWS 无法选择恢复密钥。此外,您还可以为导入的密钥设置过期时间,过期后密钥将无法使用。要使密钥在 AWS KMS 中再次可用,则必须重新导入密钥材料并将其分配给相同的 keyId。这种针对导入密钥的删除操作与 AWS KMS 代表您生成和存储的标准密钥不同。在标准情况下,密钥删除过程有一个强制性的等待期,在此期间,计划删除的密钥将首先被禁止使用。此操作允许您在可能需要该密钥才能访问数据的任何应用程序或 AWS 服务的日志中查看拒绝访问错误。如果您看到此类访问请求,可以选择取消计划删除并重新启用该密钥。经过可配置的等待期(7 到 30 天)后,KMS 才会真正删除密钥材料、keyID 以及与密钥关联的所有元数据。有关可用性和持久性的更多信息,请参阅《AWS KMS 开发人员指南》中的保护导入的密钥材料。
导入的密钥材料还有一些其他限制需要注意。由于 AWS KMS 无法生成新的密钥材料,因此无法对导入密钥配置自动轮换。您需要使用新的 keyId 创建新 KMS 密钥,然后导入新的密钥材料才能实现有效的轮换。此外,使用导入的对称密钥在 AWS KMS 中创建的加密文字无法使用 AWS 外的本地密钥副本轻松解密。这是因为 AWS KMS 使用的经过身份验证的加密格式会将额外的元数据附加到加密文字中,以便在解密操作期间确保加密文字是由之前加密操作中使用的预期 KMS 密钥创建的。大多数外部加密系统不了解如何通过解析这些元数据来获得原始加密文字,从而使用其对称密钥副本。在导入的非对称密钥(例如 RSA 或 ECC)下创建的加密文字可以有匹配的(公有或私有)密钥部分的情况下,在 AWS KMS 外使用,因为 AWS KMS 没有向加密文字添加额外的元数据。
AWS KMS 自定义密钥存储
不过,如果您需要加强对 HSM 的控制,则可以创建自定义密钥存储。
自定义密钥存储是 AWS KMS 中的密钥存储,由您拥有和管理的 AWS KMS 外的密钥管理器提供支持。自定义密钥存储将 AWS KMS 的方便、全面的密钥管理界面与拥有和控制密钥材料和加密操作的能力结合。在自定义密钥存储中使用 KMS 密钥时,加密操作实际上是通过您的密钥管理器使用您的加密密钥来执行。因此,您对加密密钥的可用性和持久性以及 HSM 的运行承担更多责任。
拥有您的 HSM 可能有助于满足某些监管要求,这些要求尚不允许多租户 Web 服务(例如标准 KMS 密钥存储)保留您的加密密钥。自定义密钥存储并不比使用 AWS 托管 HSM 的 KMS 密钥存储更安全,但其管理影响不同,且成本更高。因此,您对加密密钥的可用性和持久性以及 HSM 的运行承担更多责任。无论是将标准密钥存储与 AWS KMS HSM 一起使用,还是使用自定义密钥存储,该服务都旨在确保任何人(包括 AWS 员工)都无法在未经您许可的情况下检索或使用您的明文密钥。AWS KMS 支持两种类型的自定义密钥存储:AWS CloudHSM 密钥存储和外部密钥存储。
不支持的 特征
AWS KMS 在自定义密钥存储中不支持以下功能。
AWS CloudHSM 密钥存储
您可以在 AWS CloudHSM
外部密钥存储
您可以将 AWS KMS 配置为使用外部密钥存储(XKS),这种情况下,将在 AWS 云 外的密钥管理系统中生成、存储和使用根用户密钥。向 AWS KMS 提出的使用密钥进行某些加密操作的请求将转到您的外部托管系统以执行操作。具体而言,请求会被转发到您网络中的 XKS 代理,然后该代理会将请求转发到您使用的任何加密系统。XKS 代理是开源规范,任何人都可以集成。许多商业密钥管理供应商都支持 XKS 代理规范。由于外部密钥存储由您或第三方托管,因此您负责系统中密钥的所有可用性、持久性和性能。要查看外部密钥存储是否符合您的要求,请阅读 AWS 新闻博客上的 Announcing AWS KMS External Key Store (XKS)