数据加密概述

适用于: Azure Database for PostgreSQL 灵活型服务器

由 Azure Database for PostgreSQL 灵活服务器实例管理的所有数据都将始终进行静态加密。 这些数据包括所有系统和用户数据库、临时文件、服务器日志、预写日志段和备份。

为了实现数据的加密,Azure Database for PostgreSQL 灵活服务器使用 Azure 存储加密静态数据,提供用于加密和解密 Blob 存储和 Azure 文件服务中的数据的密钥。 这些密钥必须存储在 Azure Key Vault 中。 有关详细信息,请参阅用于 Azure 存储加密的客户管理的密钥

Azure Database for PostgreSQL 灵活服务器支持以两种不同的模式配置数据加密:服务托管密钥和客户管理的密钥。 只能在创建服务器时选择配置模式。 在服务器的生存期内,无法将其从一种模式更改为另一种模式。

使用 服务托管的加密密钥 Azure Database for PostgreSQL 灵活服务器负责预配保留密钥的 Azure Key Vault,并承担提供加密和解密数据的密钥的所有责任。 该服务还负责存储、保护、审核访问、配置网络以及自动轮换密钥。

使用客户管理的加密密钥时,由你承担所有责任。 因此,你必须部署自己的 Azure Key Vault 或 Azure Key Vault HSM。 必须生成或导入自己的密钥。 必须授予对 Key Vault 的所需权限,以便 Azure Database for PostgreSQL 灵活服务器可以对密钥执行必要的操作。 必须负责配置保存密钥的 Azure Key Vault 的所有网络方面,以便 Azure Database for PostgreSQL 灵活服务器可以访问密钥。 审核对密钥的访问权限也是你的责任。 最后,你负责轮换密钥,并在需要时更新 Azure Database for PostgreSQL 灵活服务器的配置,以便它引用轮换后的密钥版本。

配置存储帐户的客户管理的密钥时,Azure 存储将使用关联密钥保管库中客户管理的密钥来包装帐户的根数据加密密钥 (DEK)。 根加密密钥的保护会更改,但是 Azure 存储帐户中的数据会保持加密状态。 你无需执行额外操作即可确保数据保持加密。 客户管理的密钥的保护会立即生效。

Azure Key Vault 是一种基于云的外部密钥管理系统。 它具有高可用性,并为 RSA 加密密钥提供可扩展的安全存储。 它不允许直接访问存储的密钥,而是为已获授权的实体提供加密和解密服务。 密钥保管库可以生成密钥,也可以导入密钥。

每种模式提供的优势

使用服务托管密钥对 Azure Database for PostgreSQL 灵活服务器进行数据加密具有以下优势

  • 该服务会自动完全控制数据访问。
  • 该服务会自动完全控制密钥的生命周期,包括轮换密钥。
  • 你无需担心管理数据加密密钥。
  • 基于服务托管密钥的数据加密不会对工作负载的性能产生负面影响。
  • 它简化了加密密钥的管理(包括其定期轮换),以及用于访问这些密钥的标识的管理。

使用客户管理的密钥对 Azure Database for PostgreSQL 灵活服务器进行数据加密具有以下优势

  • 完全控制数据访问。 可以删除密钥以使数据库不可访问。
  • 你可以完全控制密钥的生命周期,包括按照公司策略的要求轮换密钥。
  • 你可以在自己的 Azure Key Vault 实例中集中管理和组织所有加密密钥。
  • 基于客户管理的密钥的数据加密不会对工作负载的性能产生负面影响。
  • 可实现安全管理人员、数据库管理员和系统管理员之间的职责分离。

要求

下面列出了为 Azure Database for PostgreSQL 灵活服务器配置数据加密的要求:

  • Key Vault 和 Azure Database for PostgreSQL 灵活服务器必须属于同一个 Microsoft Entra 租户。 不支持跨租户的 Key Vault 和服务器交互。 之后若要移动 Key Vault 资源,需要重新配置数据加密。
  • 建议将 Key Vault 的“已删除保管库的保留天数”配置设为 90 天。 如果已配置具有较低数量的现有 Key Vault 实例,它仍应有效。 但是,如果想要修改此设置并增加该值,则需要创建新的 Key Vault 实例。 创建实例后,无法修改此设置。
  • 启用 Key Vault 中的软删除功能,以便在意外删除密钥或 Key Vault 实例时帮助防止数据丢失。 Key Vault 会将软删除资源保留 90 天,除非用户在此期间恢复或清除这些资源。 恢复和清除操作都有各自的权限,这些权限与 Key Vault、RBAC 角色或访问策略的权限相关联。 默认启用软删除。 如果在很久以前部署了 Key Vault,它可能仍禁用了软删除。 在这种情况下,可以使用 Azure CLI 将其打开。
  • 启用清除保护以对已删除的保管库和保管库对象执行强制保留期。
  • 通过以下方式向 Azure Database for PostgreSQL 灵活服务器的用户分配的托管标识授予对密钥的访问权限:
    • 首选:应使用 RBAC 权限模型配置 Azure Key Vault,并应为托管标识分配 Key Vault 加密服务加密用户角色
    • 旧版:如果为 Azure Key Vault 配置了访问策略权限模型,请向托管标识授予以下权限:
      • get:从 Key Vault 中获取密钥的属性和公共部分。
      • list:列出并循环访问 Key Vault 中存储的密钥
      • wrapKey:加密数据加密密钥
      • unwrapKey:解密数据加密密钥
  • 用于加密数据加密密钥的密钥只能是非对称的 RSA。 支持的密钥大小为 2048、3072 和 4096。 为了提高安全性,建议使用 4,096 位密钥。
  • 密钥激活的日期和时间(如果已设置)必须是过去的日期和时间。 密钥过期的日期和时间(如果已设置)必须是未来的日期和时间。
  • 密钥必须处于“已启用”状态
  • 要将现有密钥导入 Key Vault,请确保以受支持的文件格式(.pfx.byok.backup)提供该密钥。

建议

使用客户管理的密钥进行数据加密时,请按照以下建议配置 Key Vault:

  • 为防止意外或未经授权删除此关键资源,请在 Key Vault 上设置资源锁。
  • 对所有加密密钥启用审核和报告功能。 Key Vault 提供可以轻松注入到其他安全信息和事件管理 (SIEM) 工具的日志。 Azure Monitor 日志就是一项已集成的服务。
  • 通过选择“禁用公共访问”和“允许受信任的 Microsoft 服务绕过此防火墙”来锁定 Key Vault。

注意

选择“禁用公共访问”和“允许受信任的 Microsoft 服务绕过此防火墙”后,尝试使用公共访问权限通过门户管理 Key Vault 时,可能会收到如下错误:“已启用网络访问控制。 只有经允许的网络才能访问此密钥保管库。”此错误并不妨碍在客户管理的密钥设置期间提供密钥或在服务器操作期间从 Key Vault 提取密钥的能力。

  • 将客户管理的密钥的副本保存在安全位置,或将其托管到托管服务。
  • 如果 Key Vault 生成密钥,请在首次使用该密钥之前创建密钥备份。 只能将备份还原到 Key Vault。

特殊注意事项

从 Key Vault 意外撤消密钥访问

对 Key Vault 具有足够访问权限的人员可能通过下列方式意外禁用服务器对密钥的访问:

  • 取消分配 RBAC 角色“Key Vault 加密服务加密用户”或从用于检索密钥保管库中的密钥的标识中撤消权限。
  • 删除密钥。
  • 删除 Key Vault 实例。
  • 更改 Key Vault 防火墙规则。
  • 在 Microsoft Entra ID 中删除服务器的托管标识。

监视 Azure Key Vault 中保存的密钥

要监视数据库状态并在数据加密保护程序访问权限丢失时发出警报,请配置以下 Azure 功能:

  • 资源健康状况:在与数据库的第一次连接遭到拒绝后,已失去对 CMK 数据访问权限的数据库将显示为“无法访问”。
  • 活动日志:未能成功访问客户管理的 Key Vault 实例中的 CMK 时,系统会将条目添加到活动日志中。 如果尽快为这些事件创建警报,则可恢复访问权限。
  • 操作组:定义这些组,使其根据你的首选项接收通知和警报。

还原使用客户管理的密钥配置的服务器的备份

在使用 Key Vault 中存储的客户管理的密钥对 Azure Database for PostgreSQL 灵活服务器进行加密后,会同时对所有新创建的服务器副本进行加密。 可以通过时点恢复 (PITR) 操作或只读副本新建此副本。

使用客户管理的密钥设置数据加密时,在还原备份或创建只读副本等操作期间,可以通过在主服务器以及还原服务器或副本服务器上执行以下步骤来避免出现问题:

  • 启动还原过程或从主 Azure Database for PostgreSQL 灵活服务器实例创建只读副本的过程。
  • 在还原服务器或副本服务器上,可以更改用于访问 Key Vault 的客户管理的密钥和用户分配的托管标识。 确保在新创建的服务器中分配的标识对 Key Vault 具有所需权限。
  • 还原后不要撤销原始密钥。 目前,在将具有客户管理的密钥的服务器还原到另一台服务器后,我们不支持吊销密钥。

无法访问客户管理的密钥的情形

使用 Key Vault 中存储的客户管理的密钥配置数据加密时,服务器需要持续访问该密钥才能保持在线。 如果不是这种情况,服务器会将其状态更改为“不可访问”并开始拒绝所有连接。

服务器状态变为“无法访问”的一些可能原因包括

原因 决议
服务器指向的任何加密密钥都配置了到期日期和时间,并且已达到该日期和时间。 你必须延长密钥的到期日期。 然后,你必须等待服务重新验证密钥,并自动将服务器状态转换为“就绪”。 只有当服务器回到“就绪”状态时,你才能将密钥轮换到较新版本或创建新密钥,并更新服务器,使其引用同一密钥的新版本或新密钥。
你轮换了密钥,但忘记了更新 Azure Database for PostgreSQL 灵活服务器的实例以使其指向新版本的密钥。 服务器指向的旧密钥过期,并使服务器状态转换为“无法访问” 为了避免这种情况,每次轮换密钥时,请确保同时更新服务器实例,以指向新版本。 为此,可以使用 az postgres flexible-server update,按照以下示例进行操作:“更改数据加密的密钥/标识。创建服务器后无法启用数据加密,这只会更新密钥/标识。” 如果想要使用 API 对其进行更新,可以调用该服务的服务器 - 更新终结点。
你删除了 Key Vault 实例,Azure Database for PostgreSQL 灵活服务器实例无法访问密钥并变为“不可访问”状态。 恢复 Key Vault 实例并等待服务运行密钥的定期重新验证,并自动将服务器状态转换为“就绪”。
你从 Microsoft Entra ID 中删除了用于检索存储在密钥保管库中的任意加密密钥的托管标识 恢复该标识,并等待服务运行密钥的定期重新验证并自动将服务器状态转换为“就绪”。
你的 Key Vault 权限模型配置为使用基于角色的访问控制。 你从为检索任何密钥而配置的托管标识中移除了密钥保管库加密服务加密用户 RBAC 角色分配。 再次向该托管标识授予 RBAC 角色,并等待服务运行密钥的周期性重新验证,并自动将服务器状态转换为“就绪”。 另一种方法是将 Key Vault 上的角色授予另一个托管标识,更新服务器,使其使用此其他托管标识来访问密钥。
你的 Key Vault 权限模型配置为使用访问策略。 你从为检索任何密钥而配置的托管标识中撤销了 list、get、wrapKey 或 unwrapKey 访问策略 再次向该托管标识授予 RBAC 角色,并等待服务运行密钥的周期性重新验证,并自动将服务器状态转换为“就绪”。 另一种方法是将 Key Vault 上的所需访问策略授予另一个托管标识,更新服务器,使其使用此其他托管标识来访问密钥。
你设置了过于严格的 Key Vault 防火墙规则,导致 Azure Database for PostgreSQL 灵活服务器无法与 Key Vault 进行通信来检索密钥。 配置 Key Vault 防火墙时,请确保选择允许受信任的 Microsoft 服务的选项,以便你的 Azure Database for PostgreSQL 灵活服务器可以绕过防火墙。

注意

当密钥被禁用、删除、过期或无法访问时,通过该密钥加密数据的服务器将变为不可访问,如前所述。 在重新验证加密密钥之前,服务器状态不会再次更改为“就绪”。

通常情况下,在密钥被禁用、删除、过期或无法访问后,服务器将在 60 分钟内变得不可访问。 密钥可用后,服务器可能需要长达 60 分钟才能再次变为“就绪”状态

恢复删除的托管标识

如果用于访问 Key Vault 中存储的加密密钥的用户分配的托管标识在 Microsoft Entra ID 中被删除,则应按照以下步骤进行恢复:

  1. 恢复标识或创建新的托管 Entra ID 标识。
  2. 如果创建了新标识,即使其名称与之前删除的标识完全相同,也请更新 Azure Database 灵活服务器属性,使其知道必须使用此新标识来访问加密密钥。
  3. 请确保此标识对 Azure Key Vault (AKV) 中的密钥具有适当的操作权限。
  4. 等待大约一小时,直到服务器重新验证密钥。

重要

仅仅创建一个与已删除标识具有相同名称的新 Entra ID 标识,并不能恢复删除的托管标识。

使用客户管理的密钥和异地冗余业务连续性功能进行数据加密

Azure Database for PostgreSQL 灵活服务器支持高级数据恢复功能,例如副本异地冗余备份。 除了使用 CMK 进行数据加密的基本要求之外,以下是使用 CMK 设置数据加密的要求和这些功能:

  • 需要在 Key Vault 实例中创建异地冗余备份加密密钥,该实例必须存在于存储异地冗余备份的区域中。
  • 用于支持已启用异地冗余备份的 CMK 服务器的 Azure 资源管理器 REST API 版本为“2022-11-01-preview”。 若要使用 Azure 资源管理器模板自动创建同时使用 CMK 加密和异地冗余备份功能的服务器,请使用此 API 版本。
  • 不能使用相同的用户托管标识对主数据库的 Key Vault 实例和保存异地冗余备份加密密钥的 Key Vault 实例进行身份验证。 为了保持区域复原能力,我们建议在异地冗余备份所在的同一区域中创建用户托管标识。
  • 如果在创建过程中将只读副本数据库设置为使用 CMK 加密,则其加密密钥需要位于只读副本数据库所在区域的 Key Vault 实例中。 需要在同一区域中创建用于对此 Key Vault 实例进行身份验证的用户分配的标识

限制

以下是在 Azure Database for PostgreSQL 灵活服务器中配置客户托管密钥的当前限制: