你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
数据加密
适用于: Azure Database for PostgreSQL 灵活服务器
Azure Database for PostgreSQL 灵活服务器实例管理的所有数据始终静态加密。 这些数据包括所有系统和用户数据库、临时文件、服务器日志、预写日志段和备份。
为了实现数据加密,Azure Database for PostgreSQL 灵活服务器使用 Azure 存储静态数据加密,提供用于加密和解密 Blob 存储和 Azure 文件存储服务中的数据的密钥。 这些密钥必须存储在 Azure Key Vault 或 Azure Key Vault 托管硬件安全模型 (HSM) 中。 有关详细信息,请参阅用于 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 存储使用关联密钥保管库或托管 HSM 中客户管理的密钥来包装帐户的根数据加密密钥 (DEK)。 根加密密钥的保护会更改,但是 Azure 存储帐户中的数据会保持加密状态。 你无需执行额外操作即可确保数据保持加密。 客户管理的密钥的保护会立即生效。
Azure Key Vault 是一种基于云的外部密钥管理系统。 它具有高可用性,并为 RSA 加密密钥提供可缩放的安全存储,根据需要由经过 FIPS 140 验证的硬件安全模块 (HSM) 提供支持。 它不允许直接访问存储的密钥,而是为已获授权的实体提供加密和解密服务。 Key Vault 可以生成密钥并将其导入,或者接收从本地 HSM 设备传输的密钥。
每种模式提供的优势
使用服务托管密钥对 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 或 RSA-HSM 密钥。 支持的密钥大小为 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 实例。
- 更改 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 具有所需权限。
- 还原后不要撤销原始密钥。 目前,在将使用客户管理的密钥的服务器还原到另一台服务器后,我们不支持密钥吊销。
托管 HSM
硬件安全模块 (HSM) 是防篡改硬件设备,通过生成、保护和管理用于加密数据、解密数据、创建数字签名和创建数字证书的密钥来帮助保护加密过程。 HSM 经过测试、验证和认证,符合最高安全标准,包括 FIPS 140 和通用标准。
Azure Key Vault 托管的 HSM 是完全托管的、具备高度可用性的单租户、符合标准的云服务。 通过使用此服务,可以通过经 FIPS 140-3 验证的 HSM 来保护云应用程序的加密密钥。
在 Azure 门户中使用客户管理的密钥创建新的 Azure Database for PostgreSQL 灵活服务器实例时,可以选择 Azure Key Vault 托管 HSM 作为密钥存储,这是 Azure Key Vault 的替代方法。 用户定义的标识和权限方面的先决条件与 Azure Key Vault 相同(如本文前面所列)。 有关如何创建托管 HSM 实例、其与基于共享 Key Vault 的证书存储相比的优点和差异以及如何将密钥导入到托管 HSM 的详细信息,请参阅“什么是 Azure Key Vault 托管 HSM?”。
无法访问客户管理的密钥的情形
使用 Key Vault 中存储的客户管理的密钥配置数据加密时,服务器需要持续访问该密钥才能保持在线。 如果服务器失去对 Key Vault 中保存的密钥的访问权限,它将在 10 分钟内开始拒绝所有连接。 服务器会发出相应的错误消息,并将服务器状态更改为“无法访问”。
服务器状态变为“无法访问”的一些可能原因包括:
- 如果轮换密钥,并忘记更新 Azure Database for PostgreSQL 灵活服务器的实例,则会使其指向新版本的密钥。 实例指向的旧密钥最终会过期,并使服务器状态转换为“无法访问”。 为了避免这种情况,每次轮换密钥时,请确保同时更新服务器实例,以指向新版本。 为此,可以使用
az postgres flexible-server update
,按照以下示例进行操作:“更改数据加密的密钥/标识。创建服务器后无法启用数据加密,这只会更新密钥/标识。”或者,可以调用该服务的服务器 - 更新 REST API。 - 如果删除 Key Vault 实例,则 Azure Database for PostgreSQL 灵活服务器实例无法访问密钥并变为“不可访问”状态。 若要使服务器状态变为“可用”,请恢复 Key Vault 实例并重新验证数据加密。
- 如果从 Key Vault 中删除密钥,则 Azure Database for PostgreSQL 灵活服务器实例无法访问密钥并变为“不可访问”状态。 若要使服务器状态变为“可用”,请恢复密钥并重新验证数据加密。
- 如果从 Microsoft Entra ID 中删除用于从 Key Vault 检索密钥的托管标识,或者删除具有 Key Vault 加密服务加密用户角色的 Azure RBAC 角色分配。 Azure Database for PostgreSQL 灵活服务器实例将无法访问密钥,并将变为“无法访问”状态。 若要使服务器状态变为“可用”,请恢复标识并重新验证数据加密。
- 如果从用于从 Key Vault 检索密钥的托管标识中撤销 Key Vault 的 list、get、wrapKey 和 unwrapKey 访问策略,Azure Database for PostgreSQL 灵活服务器实例将无法访问该密钥并转为不可访问状态。 向 Key Vault 中的标识添加所需的访问策略。
- 如果设置了过于严格的 Key Vault 防火墙规则,Azure Database for PostgreSQL 灵活服务器无法与 Key Vault 通信以检索密钥。 配置 Key Vault 防火墙时,请务必选择选项“允许受信任的 Microsoft 服务绕过防火墙”。
注意
当密钥被禁用、删除、过期或无法访问时,通过该密钥加密数据的服务器将变为不可访问,如前所述。 在重新启用密钥或分配新密钥之前,服务器不可用。
通常情况下,在密钥被禁用、删除、过期或无法访问后,服务器将在 60 分钟内变得不可访问。 密钥可用后,服务器可能需要长达 60 分钟才能再次变为“可访问”状态。
恢复删除的托管标识
如果用于访问 Key Vault 中存储的加密密钥的用户分配的托管标识在 Microsoft Entra ID 中被删除,则应按照以下步骤进行恢复:
- 恢复标识或创建新的托管 Entra ID 标识。
- 如果创建了新标识,即使其名称与之前删除的标识完全相同,也请更新 Azure Database 灵活服务器属性,使其知道必须使用此新标识来访问加密密钥。
- 请确保此标识对 Azure Key Vault (AKV) 中的密钥具有适当的操作权限。
- 等待大约一小时,直到服务器重新验证密钥。
重要
仅仅创建一个与已删除标识具有相同名称的新 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 实例进行身份验证的用户分配的标识。
客户管理的密钥轮换和无版本密钥(预览版)
作为预防措施,我们建议定期轮换密钥,或在密钥被盗用时轮换密钥。
注意
大多数企业都有定期轮换密钥的外部或内部要求,例如每 90 天轮换一次。 对于 Key Vault 生成的密钥,可以在 Azure Key Vault 中配置加密密钥自动轮换。 如果启用自动轮换,则必须使用无版本 CMK(预览版)在 Azure Database for PostgreSQL 灵活服务器中进行数据加密才能利用此功能。
手动轮换密钥有助于在密钥被盗用时保护你的数据。 要轮换密钥,请为被盗用的密钥创建或导入新的密钥生成。
- 如果使用无版本客户管理的密钥(预览版),服务器会自动选取新密钥。
- 如果使用版本控制密钥,则必须更新 Azure Database for PostgreSQL 灵活服务器实例才能使用新版本的密钥。 只有这样,服务器才会开始使用新密钥来加密和解密数据。
无版本客户管理的密钥(预览版)
建议使用无版本密钥在 Azure Database for PostgreSQL 灵活服务器中进行数据加密。 它正确地涵盖了前面描述的任何密钥轮换场景。 有新的密钥版本可用后,服务器会自动使用新版本的密钥来加密和解密数据。
对于无版本密钥,API 不会更改。 不提供完整的密钥 ID URI,而是省略密钥 ID 的版本部分。 这适用于 API、Azure CLI、ARM 模板和 Bicep 模板。 Azure 门户有一个用于启用无版本的复选框,可以使用它来仅选择无版本密钥 ID。
限制
以下是在 Azure Database for PostgreSQL 灵活服务器中配置客户管理的密钥的当前限制:
- 只能在创建新服务器期间配置客户管理的密钥加密,而不能将其作为现有 Azure Database for PostgreSQL 灵活服务器实例的更新。 可以改为使用 CMK 加密将 PITR 备份还原到新服务器。
- 配置客户管理的密钥加密后,无法还原回系统托管密钥。 如果要还原,则必须将服务器还原为使用系统托管密钥配置数据加密的新服务器。
- Azure Key Vault 托管 HSM 实例或计划存储加密密钥的 Azure Key Vault 实例必须存在于要在其中创建 Azure Database 灵活服务器实例的同一区域中。