你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Key Vault 托管 HSM 是一种完全托管、高度可用、符合标准的云服务,可用于使用 FIPS 140-3 级别 3 验证的硬件安全模块(HSM)来保护云应用程序的加密密钥。 托管 HSM 提供一系列内置可靠性功能,以帮助确保密钥保持可用。
使用 Azure 时,可靠性是共同的责任。 Microsoft提供了一系列功能来支持复原和恢复。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。
本文介绍了托管 HSM 如何应对各种潜在的中断和问题,包括暂时性故障、硬件故障和区域中断。 它还介绍了如何使用备份和安全域从其他类型的问题中恢复、恢复功能以防止意外删除,并突出显示有关托管 HSM 服务级别协议(SLA)的一些关键信息。
提高可靠性的生产部署建议
对于生产工作负载,我们建议您:
可靠性体系结构概述
使用托管 HSM 时,您可以部署一个实例,该实例有时也称为一个池。
托管 HSM 旨在通过其体系结构实现高可用性和持久性:
单租户隔离:每个托管 HSM 实例专用于单个客户,由多个加密隔离的 HSM 分区的群集组成。
三重冗余分区:托管 HSM 池由三个负载均衡的 HSM 分区组成,这些分区分布在数据中心内的单独机架上。 此分发针对硬件故障提供冗余,并确保单个组件(如机架的电源或网络交换机)的丢失不会影响所有分区。
机密计算:每个服务实例在使用 Intel SGX enclave 的受信任执行环境(TEE)中运行。 Microsoft人员(包括对服务器具有物理访问权限的人员)无法访问加密密钥材料。
自动修复:如果硬件故障或其他问题影响三个分区之一,该服务会自动在正常运行的硬件上重新生成受影响的分区,而无需任何客户干预,也不会公开机密。
有关托管 HSM 如何实现这些功能的详细信息,请参阅 托管 HSM 中的关键主权、可用性、性能和可伸缩性。
安全域
安全域是灾难恢复的关键组件。 它是一个加密 Blob,其中包含从头开始重新生成托管 HSM 实例所需的所有凭据,包括分区所有者键、分区凭据、数据包装密钥和 HSM 的初始备份。
重要
如果没有安全域,则无法进行灾难恢复。 Microsoft无法恢复安全域,也不能在没有安全域的情况下访问密钥。
安全域是托管 HSM 安全性和可靠性的关键部分。 建议遵循以下最佳做法:
- 安全地生成密钥:对于生产环境,请生成 RSA 密钥对,这些密钥对可保护空中隔离环境中的安全域(例如本地 HSM 或隔离工作站)。
- 脱机存储:将安全域密钥存储在加密的 USB 驱动器或其他脱机存储上,每个密钥共享在不同的地理位置的单独设备上。
- 建立多人仲裁:使用至少三个密钥持有者来防止任何一个人有权访问所有仲裁密钥,并避免依赖于任何一个人。
有关详细信息,请参阅 托管 HSM 中的安全域概述。
暂时性故障的复原能力
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅有关处理暂时性故障的建议。
使用与托管 HSM 集成的 Azure 服务时,这些服务会自动处理暂时性故障。
如果生成与托管 HSM 集成的自定义应用程序,请考虑以下最佳做法来处理可能发生的任何暂时性故障:
使用 Azure Key Vault 提供的Microsoft SDK,其中包括内置的重试机制。 SDK 适用于 .NET、 Python 和 JavaScript。
在与托管 HSM 直接交互时实现重试逻辑,包括指数退避重试策略。
减少对托管 HSM 的直接依赖项数量。 尽可能缓存加密操作的结果,以减少对托管 HSM 的直接请求。 对于公钥作(如加密、包装和验证),请通过缓存公钥材料在本地执行这些作。 在本地执行操作可减少对托管 HSM 的依赖关系,并避免暂时性故障中断这些操作。
如果在高吞吐量场景中使用托管 HSM,请注意,托管 HSM 不会对加密操作进行限流。 它充分利用了其 HSM 硬件的性能。 每个托管 HSM 实例都有三个分区。 在维护或修复操作期间,一个分区可能不可用。 对于容量规划,假设有两个分区可用。 如果需要有保证的吞吐量,请根据可用的一个分区进行规划。 监视 托管 HSM 可用性 指标 ,了解服务的运行状况。
若要缩放大量数据的加密,请使用密钥层次结构,其中只有密钥加密密钥(KEK)存储在托管 HSM 中,并用于包装存储在另一个安全密钥存储位置的较低级别密钥。
有关详细的性能基准和容量规划指南,请参阅 Azure 托管 HSM 缩放指南。
分区故障的复原能力
托管 HSM 通过其三冗余体系结构实现高可用性,其中每个 HSM 池由三个 HSM 分区组成,这些分区分布在数据中心内的单独服务器机架中。 此机架级分发针对本地化硬件故障提供冗余。
此图显示了托管 HSM 池的三个分区,每个分区位于单独的物理服务器和不同的服务器机架中。
发生硬件故障或本地化中断时,托管 HSM 会自动将请求重定向到正常的分区,并通过称为 机密服务修复的进程重新生成受影响的分区。 使用经过证明的 TLS 和 Intel SGX enclave 在正常硬件上自动重建失败的分区,以保护恢复过程中的机密。
Cost
托管 HSM 中的内置高可用性没有额外的成本。 定价基于 HSM 池数和执行的操作数。 有关详细信息,请参阅Azure 托管 HSM 定价。
所有分区处于健康状态时的行为
本部分介绍当托管 HSM 池运行正常且所有分区可用时的期望情况。
流量路由:托管 HSM 自动管理其三个分区中的流量路由。 在正常操作期间,请求以透明方式分布在分区之间。
数据复制:所有数据(包括密钥、角色分配和访问控制策略)跨所有三个分区同步复制。 这可确保即使分区不可用,也可确保一致性和可用性。
分区失败期间的行为
本部分介绍当一个或多个分区不可用时会发生什么情况。
检测和响应:托管 HSM 服务负责检测分区故障并自动响应它们。 在分区失败期间无需执行任何操作。
活动请求:在分区失败期间,正在进行的请求可能会失败,这可能会导致请求失败,客户端应用程序需要重试。 为了最大程度地减少分区中断的影响,客户端应用程序应遵循 暂时性故障处理做法。
预计无数据丢失:由于分区之间的同步复制,分区失败期间不会丢失任何数据。
预期停机时间:对于读取操作和大多数加密操作,在分区失败期间应尽可能少且不会停机。 剩余的正常分区继续为请求提供服务。
流量重新路由:托管 HSM 自动将流量从受影响的分区重新路由到正常的分区,而无需任何客户干预。
分区恢复
当受影响的分区恢复时,托管 HSM 通过机密服务修复自动还原操作。 此过程:
- 在正常运行的硬件上创建新的服务实例。
- 与主分区建立经过证明的 TLS 连接。
- 安全地交换凭据和加密材料。
- 将服务数据密封到新的 CPU。
Azure 平台完全管理此过程,不需要任何客户干预。
应对可用区故障的弹性
托管 HSM 的高可用性是基于数据中心内的机架级别分布,而不是明确的可用性区域部署。 每个分区在不同的机架中的单独服务器上运行,以防止机架级故障,例如电源或网络交换机问题。
如果您需要应对数据中心或可用性区域范围内的中断,请考虑使用其中一种方法来应对区域范围内的故障。
对区域范围的故障的复原能力
托管 HSM 资源部署到单个 Azure 区域。 如果区域不可用,则托管 HSM 也不可用。 但是,可以使用某些方法来帮助确保对区域中断的复原能力。
多区域复制
托管 HSM 支持可选的 多区域复制,使你可以将托管 HSM 池从一个 Azure 区域( 主要区域)扩展到第二个 Azure 区域( 扩展区域)。 配置后:
- 这两个区域都处于活动状态,并且能够处理请求。
- 密钥材料、角色和权限会自动在区域之间复制。
- 请求使用 Azure 流量管理器路由到最近的可用区域。
- 组合服务水平协议提高。
Requirements
区域支持:支持所有 Azure 托管 HSM 区域作为主要区域。 不依赖于 Azure 区域配对。
托管 HSM 不支持作为扩展区域的所有区域。 有关详细信息,请参阅 Azure 区域支持。
最大区域数: 可以添加一个扩展区域,总共最多添加两个区域。
Cost
多区域复制会产生额外的计费,因为扩展区域中使用了第二个 HSM 池。 有关详细信息,请参阅Azure 托管 HSM 定价。
配置多区域复制
添加扩展区域: 有关将扩展区域添加到现有主要区域的详细信息,请参阅 将主要 HSM 扩展到扩展区域。
将托管 HSM 扩展到另一个区域可能需要长达 30 分钟。
删除扩展区域: 有关从现有主要区域中删除扩展区域的详细信息,请参阅 从主要 HSM 中删除扩展区域。
当所有区域都正常时的行为
启用多区域复制并且这两个区域都正常运行时:
流量路由:所有区域都可以为请求提供服务。 Azure 流量管理器将请求路由到具有最近的地理邻近度或最低延迟的区域。
如果使用专用链接,请在两个区域中配置专用终结点,以便在故障转移期间获得最佳路由。 有关详细信息,请参阅 使用多区域复制的专用链接行为。
数据复制:密钥、角色定义和角色分配的所有更改将在六分钟内异步复制到扩展区域。 在创建或更新密钥后等待 6 分钟,然后再在扩展区域中使用它。
区域故障期间的行为
启用多区域复制并且一个区域遇到中断时:
- 检测和响应:Azure 流量管理器检测不正常的区域,并将将来的请求路由到正常的区域。 DNS 记录有 5 秒的 TTL,不过缓存 DNS 查询的客户端可能会遇到略长的故障转移时间。
- 通知: Microsoft不会在区域关闭时自动通知你。 但是,可以使用 Azure 服务运行状况 来了解服务的总体运行状况,包括任何区域故障,并且可以设置 服务运行状况警报 来通知问题。
活动请求:正在飞往受影响区域的请求可能会失败,并且需要重试。
预期数据丢失:如果这些更改尚未完成复制,则区域失败前 6 分钟内可能会发生数据丢失。
预期的停机时间: 在故障转移期间,读取和写入操作在正常区域中保持可用。
靠近不正常区域的客户端应用程序可能会继续定向到该区域,直到 DNS 记录更新,但此更新将在大约五秒内进行。 为了尽量减少故障转移时间,客户端应避免缓存 DNS 查找的时间超过 DNS 记录的 TTL。
重新路由: Azure 流量管理器会自动将请求重新路由到正常区域。
区域恢复
当受影响的区域恢复时,托管 HSM 会自动恢复操作。 流量管理器会根据邻近度再次开始将请求路由到这两个区域。
针对区域故障进行测试
托管 HSM 完全管理区域故障的流量路由、故障转移和故障回复,因此无需验证区域故障进程或提供任何进一步的输入。
用于复原的自定义多区域解决方案
如果多区域复制不适合你的需求,则可以实现手动灾难恢复。 这需要:
- 源 HSM 的安全域。
- 私钥(至少为法定人数)用于加密安全域。
- 来自源 HSM 的最近一次完整 HSM 备份。
若要执行灾难恢复,请执行以下操作:
- 在不同的区域中创建新的托管 HSM 实例。
- 激活安全域恢复模式并上传安全域。
- 备份新的 HSM(还原前需要)。
- 从源 HSM 还原备份副本。
重要
新的 HSM 具有不同的名称和服务终结点 URI。 必须更新应用程序配置才能使用新位置。
有关详细的灾难恢复过程,请参阅 托管 HSM 灾难恢复。
备份和还原
托管 HSM 支持对所有密钥、版本、属性、标记和角色分配进行完整备份和还原。 备份存储在 Azure 存储帐户中。 如果区域支持,建议将托管 HSM 备份到已启用异地冗余存储(GRS)的 Azure 存储帐户。
备份使用与 HSM 安全域关联的加密密钥进行加密,并且只能还原到具有相同安全域的 HSM。
托管 HSM 不支持备份调度,但可以使用 Azure Functions 或 Azure 自动化等服务来创建自己的调度器。
备份正在进行时,HSM 可能无法以完全吞吐量运行,因为某些分区正忙于执行备份操作。
有关详细的备份和还原过程,请参阅 完整备份和还原。
对意外删除的抵抗力
托管 HSM 提供两项关键恢复功能,以防止意外或恶意删除:
软删除:删除 HSM 或密钥时,它将在可配置的保留期(7 到 90 天(默认为 90 天)中保持可恢复。 软删除始终处于启用状态,无法禁用。
注释
软删除的托管 HSM 资源会继续计费,直到它们被清除。
清除保护:启用后,防止永久删除托管 HSM 及其密钥,直到保留期结束。 清除保护不能被任何人禁用或覆盖,包括Microsoft。
强烈建议为生产环境启用清除保护。 有关详细信息,请参阅 托管 HSM 软删除和清除保护。
服务维护期间的系统弹性能力
托管 HSM 可处理服务维护,包括固件更新、修补和硬件修复,而无需客户干预。 在维护期间:
- 应用更新时,分区可能暂时不可用。
- 在例行维护期间,三个分区中至少有两个保持可用。
- 客户端应用程序应实现重试逻辑来处理短暂中断。
机密服务修复过程可确保在维护操作期间永远不会公开机密。
服务级别协议
Azure服务的服务级别协议(SLA)描述了每个服务的预期可用性以及解决方案必须满足的条件,以实现该可用性预期。 有关详细信息,请参阅 联机服务的 SLA。
托管 HSM 为单区域部署提供标准 SLA。 启用 多区域复制时,这两个区域的组合 SLA 将增加。