你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用客户管理密钥的 SQL 托管实例

Azure SQL 托管实例
Azure Key Vault
Azure 专用链接

本文介绍如何使用 Azure 密钥保管库管理跨区域自动故障转移组中 SQL 托管实例的自己的透明数据加密 (TDE) 密钥。

体系结构

Diagram that shows an architecture for managing TDE keys.

下载此体系结构的 Visio 文件

为了提高 TDE 密钥的冗余,Azure SQL 托管实例配置为使用其自己区域中的密钥保管库作为主密钥,将远程区域中的密钥保管库用作辅助密钥。

辅助密钥保管库实例虽然位于远程区域,但在与 SQL 托管实例相同的区域中具有专用终结点。 因此,就 SQL 托管实例而言,对主密钥保管库和辅助密钥保管库发出的请求在逻辑上位于同一虚拟网络和区域内。 这种设计可以简化防火墙或网络安全组规则。 许多组织使用专用终结点,而不是访问公共终结点。 建议使用专用终结点。

数据流

  1. SQL 托管实例每 10 分钟会检查一次,以确保它可以访问定义为主要的密钥保管库中的 TDE 包装器。

  2. 如果 SQL 托管实例的主密钥保管库不可用,该实例将检查设置为辅助的密钥保管库。 如果该密钥保管库也不可用,SQL 托管实例会将数据库标记为“不可访问”

组件

  • 密钥保管库是一种云服务,用于以增强安全性存储和访问机密。 在此体系结构中,密钥保管库用于存储 TDE 使用的密钥。 还可以使用密钥保管库来创建密钥。
  • SQL 托管实例是 Azure 中基于最新稳定版 SQL Server 的托管实例。 在此体系结构中,密钥管理过程应用于存储在 SQL 托管实例中的数据。
  • 使用 Azure 专用链接,可以通过虚拟网络中的专用终结点访问 Azure PaaS 服务和 Azure 托管服务。

备选方法

  • 你可以使用服务管理的 TDE 密钥,而不是使用客户管理的 TDE 密钥。 使用服务管理的密钥时,Microsoft 会处理密钥的安全和轮换。 整个过程是从你自身抽象出来的。

  • 在两个区域中拥有密钥保管库的替代方法是在单个区域中仅具有一个密钥保管库。 SQL 托管实例可以访问另一个区域中的保管库中的密钥。 你仍然可以使用专用终结点。 到密钥保管库的流量很低且不频繁,因此任何延迟都不明显。 SQL 托管实例仅查询保管库以查看密钥是否存在。 不会复制材料。

方案详细信息

当你使用客户管理的密钥 (CMK)(也称为自带密钥 (BYOK))时,你需要对密钥的安全性、可用性和可选轮换负责。 这些责任至关重要,因为如果密钥丢失,数据库和备份也会永久丢失。 本文介绍了密钥管理流程并提供了一些选项,以便你获得所需的信息,从而就适合你的业务的最佳流程做出明智的决定。

可能的用例

许多组织的政策要求在内部创建和管理证书或加密密钥。 如果你的组织有类似的政策,则此体系结构可能适用于你。 如果你的客户需要对这些项目进行内部管理,此体系结构也可能适用于你。 如果这两种情况都不适用,请考虑使用系统管理的密钥。

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

常规建议

请参阅以下文章:

密钥管理

密钥轮换方法会有所不同,具体取决于用于创建 TDE 非对称密钥的内容。 当你携带自己的 TDE 包装密钥时,你必须决定如何创建此密钥。 选项包括:

  • 使用密钥保管库创建密钥。 此选项可确保私钥材料永远不会离开密钥保管库,并且不会被任何人或系统看到。 私钥不可导出,但可以备份并还原到另一个密钥保管库。 这一点很重要。 若要在此设计所需的多个密钥保管库中具有相同的密钥材料,必须使用备份和还原功能。 此方案有几处限制这两个密钥保管库必须位于同一 Azure 地理位置和订阅中。 否则,还原将不起作用。 绕过此限制的唯一方法是将密钥保管库保留在单独的订阅中,并将一个订阅移到另一个区域。

  • 使用 OpenSSL 等实用程序离线生成非对称密钥,然后将密钥导入密钥保管库中。 将密钥导入密钥保管库时,可以将密钥标记为可导出。 如果这样做,可以在将密钥导入密钥保管库后将其丢弃,也可以将它们存储在其他位置(例如本地或另一个密钥保管库中)。 此选项为你提供了最大的灵活性。 但是,如果你不能确保密钥不会落入坏人之手,那么这可能是最不安全的。 生成密钥的系统和用于将密钥放置在密钥保管库中的方法不受 Azure 控制。 你可以使用 Azure DevOpsAzure 自动化或其他编排工具来自动执行此过程。

  • 使用受支持的本地硬件安全模块 (HSM) 生成你的密钥。 通过使用受支持的 HSM,你可以将密钥导入到具有更高安全性的密钥保管库中。 使用 HSM 时,前面描述的相同地理限制不适用。 此选项为你的密钥提供高级别的安全性,因为密钥材料位于三个不同的位置(两个密钥保管库分别位于 Azure 和本地)。 如果使用受支持的 HSM,此选项还提供相同的灵活性级别。

可用性

将密钥保管库添加到体系结构时,密钥保管库会成为一个关键组件。 设计中的至少一个密钥库必须是可访问的。 此外,必须可访问 TDE 所需的密钥。 Azure Monitor 见解提供对 Key Vault 的全面监视。 有关详细信息,请参阅监视密钥保管库

卓越运营

卓越运营涵盖了部署应用程序并使其在生产环境中保持运行的运营流程。 有关详细信息,请参阅卓越运营支柱概述

从服务管理的密钥转移到客户管理的密钥时,操作包括:

DevOps

你可以使用 Azure DevOps 中的 Azure Pipelines 自动执行密钥轮换过程

性能效率

性能效率是指工作负载能够以高效的方式扩展以满足用户对它的需求。 有关详细信息,请参阅性能效率要素概述

使用配对区域时,SQL 托管实例自动故障转移组的性能要好得多。

SQL 托管实例仅检查密钥是否存在,并且每 10 分钟检查一次。 因此,SQL 托管实例不需要与密钥保管库的区域关联性。 TDE 密钥的位置对性能没有影响。

可伸缩性

在管理 TDE 密钥方面,缩放不会造成影响。 请求大小和频率太小,无需缩放。

安全性

安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述

最大的安全考虑是确保你的 TDE 包装器密钥安全并始终可用于 SQL 托管实例。 如果无法访问密钥保管库中所需的密钥,则任何通过 TDE 加密的数据库都将无法访问。 如果你使用服务管理的密钥,则不必担心此问题。

复原能力

每个 SQL 托管实例都配置为使用两个密钥保管库。 如果SQL托管实例主 TDE 密钥不可用或无法访问,则实例会尝试在辅助密钥保管库中找到具有匹配指纹的密钥。

成本优化

有关管理你自己的 TDE 密钥的额外成本(除了增加的运营成本)的信息,请参阅以下资源:

有关可选组件的详细信息,请参阅:

部署此方案

可以使用以下 ARM 模板部署此方案:

作者

本文由 Microsoft 更新和维护。 它最初是由以下贡献者撰写的。

主要作者:

若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤