Azure Database for PostgreSQL 中的数据静态加密

Azure Database for PostgreSQL 灵活服务器灵活管理的所有数据始终静态加密。 这些数据包括所有系统和用户数据库、服务器日志、预写日志段和备份。 加密通过 Azure 磁盘存储的服务器端加密来处理基础存储。

使用服务(SMK)或客户托管密钥(CMK)进行静态加密

Azure Database for PostgreSQL 灵活服务器支持两种静态数据加密模式:服务托管密钥(SMK)客户托管密钥(CMK)。 使用服务托管密钥进行数据加密是 Azure Database for PostgreSQL 灵活服务器的默认模式。 在此模式下,该服务会自动管理用于加密数据的加密密钥。 无需执行任何作即可在此模式下启用或管理加密。

客户管理的密钥 模式下,可以自带加密密钥来加密数据。 此模式可让你更好地控制加密过程,但也要求自己管理加密密钥。 必须部署自己的 Azure Key Vault 并将其配置为存储 Azure Database for PostgreSQL 灵活服务器使用的加密密钥。

只能在服务器创建时选择模式。 在服务器的生存期内,无法将其从一种模式更改为另一种模式。

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

每个模式提供的优势(SMK 或 CMK)

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

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

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

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

CMK 要求

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

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

Azure Key Vault 是一种基于云的外部密钥管理系统。 它具有高可用性,并为 RSA 加密密钥提供可扩展的安全存储。 它不允许直接访问存储的密钥,而是为已获授权的实体提供加密和解密服务。 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 角色或访问策略权限。 软删除功能默认处于打开状态。 如果某个密钥保管库部署了很久以前,它可能仍禁用软删除。 在这种情况下,可以使用 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提供它。

手动密钥轮换和更新

使用手动密钥更新配置 CMK 时,必须在 Key Vault 中手动或自动轮换密钥后,在 Azure Database for PostgreSQL 灵活服务器中手动更新密钥版本。 在更新旧密钥版本之前,服务器将继续使用旧密钥版本。 通过指定密钥 URI(包括 URI 中的版本 GUID )来预配此模式。 例如,https://<keyvault-name>.vault.azure.cn/keys/<key-name>/<key-version>。 直到最近,这是唯一可用的选项。

每当手动轮换密钥或 AKV 基于密钥轮换策略自动轮换密钥时,必须更新 PostgreSQL 实例上的 CMK 属性。 此方法被证明是容易出错的操作员工作,或者需要自定义脚本来处理轮换,尤其是在使用 Key Vault 的自动轮换功能时。

Recommendations

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

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

注释

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

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

特殊注意事项

意外从 Azure 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 中存储的任何加密密钥。 恢复标识 并等待服务运行密钥的定期重新验证,并自动将服务器状态转换为 “就绪”。
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 for 灵活服务器属性,使其知道必须使用此新标识来访问加密密钥。
  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 灵活服务器中配置客户托管密钥的当前限制: