使用客户管理的密钥对 Azure Database for MySQL 灵活服务器进行数据加密

使用 Azure Database for MySQL 灵活服务器的客户管理密钥进行数据加密,可以创建自己的密钥 (BYOK) 来保护静态数据,并实现密钥和数据的管理职责分离。 使用客户管理的密钥 (CMK) 时,客户需要负责并最终控制密钥生命周期管理(密钥创建、上传、轮换、删除)、密钥使用权限,以及密钥操作的审核。

优点

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

  • 数据访问完全由你控制,你可删除密钥并使数据库无法访问
  • 可完全控制密钥生命周期,包括根据公司策略轮换密钥
  • 在 Azure Key Vault 中集中管理和整理密钥
  • 可实现安全管理人员与 DBA 和系统管理员之间的职责分离

使用客户管理的密钥进行数据加密的工作原理

Microsoft Entra ID 中的托管标识通过预配可用于向支持 Microsoft Entra 身份验证的任何服务(例如 Azure Key Vault [AKV])进行身份验证的自动分配的标识,向 Azure 服务体提供了用于将凭据存储在代码中的替代方法。 Azure Database for MySQL 灵活服务器目前仅支持用户分配的托管标识 (UMI)。 有关详细信息,请参阅 Azure 中的托管标识类型

若要为 Azure Database for MySQL 灵活服务器配置 CMK,需要将 UMI 链接到服务器并指定要使用的 Azure 密钥保管库和密钥。

UMI 必须对密钥保管库拥有以下访问权限:

  • 获取:用于检索密钥保管库中密钥的公共部分和属性。
  • 列出:列出存储在密钥保管库中的密钥版本。
  • 包装密钥:能够加密 DEK。 加密的 DEK 存储在 Azure Database for MySQL 灵活服务器实例中。
  • 解包密钥:能够解密 DEK。 Azure Database for MySQL 灵活服务器需要使用解密的 DEK 来加密/解密数据。

如果启用了 RBAC,则还必须为 UMI 分配以下角色:

  • 密钥保管库加密服务加密用户或具有权限的角色:
    • Microsoft.KeyVault/vaults/keys/wrap/action
    • Microsoft.KeyVault/vaults/keys/unwrap/action
    • Microsoft.KeyVault/vaults/keys/read like "Key Vault Crypto Service Encryption User"

术语和说明

数据加密密钥 (DEK) :对称 AES256 密钥,用于加密数据分区或数据块。 使用不同的密钥加密每个数据块可以增加加密分析攻击的难度。 资源提供程序或应用程序实例需要 DEK 访问权限才能加密和解密特定的块。 将 DEK 替换为新密钥时,只需使用新密钥对其关联的块中的数据重新加密。

密钥加密密钥 (KEK) :用于加密 DEK 的加密密钥。 KEK 始终在 Key Vault 中,这使得 DEK 本身能得到加密和控制。 具有 KEK 访问权限的实体可能不是需要 DEK 的实体。 由于解密 DEK 需要 KEK,因此 KEK 实际上构成了一个单点机制:删除 KEK 即可删除 DEK。 DEK 使用 KEK 加密且单独存储。 只有有权访问 KEK 的实体才能解密这些 DEK。 有关详细信息,请参阅静态加密中的安全性

工作原理

使用 CMK 的数据加密是在服务器级别设置的。 CMK 称为密钥加密密钥 (KEK),它在给定的服务器中用于加密服务的数据加密密钥 (DEK)。 KEK 是一种非对称密钥,它存储在客户自有和客户管理的 Azure 密钥保管库实例中。 Key Vault 是用于存储 RSA 加密密钥的高度可用且可缩放的安全存储。 密钥保管库不允许直接访问存储的密钥,但会向已获授权的实体提供使用该密钥进行加密/解密的服务。 导入的密钥保管库可以生成密钥。

将灵活服务器配置为使用存储在 Key Vault 中的 CMK 时,该服务器会将 DEK 发送到 Key Vault 进行加密。 Key Vault 返回存储在用户数据库中已加密的 DEK。 同样,在需要时,灵活服务器会将受保护的 DEK 发送到 Key Vault 进行解密。

使用客户管理的密钥进行数据加密的工作原理图。

启用日志记录后,审核员可以使用 Azure Monitor 查看密钥保管库审核事件日志。 若要启用密钥保管库审核事件的日志记录,请参阅“使用密钥保管库见解监视密钥保管库服务”。

注意

权限更改最多可能需要在 10 分钟后才会影响密钥保管库。 这包括撤销对 AKV 中 TDE 保护程序的访问权限,并且此时间范围内的用户可能仍然拥有访问权限。

为 Azure Database for MySQL 灵活服务器配置数据加密的要求

在尝试配置密钥保管库之前,请务必满足以下要求。

  • 密钥保管库和 Azure Database for MySQL 灵活服务器实例必须属于同一个 Microsoft Entra 租户。 需要支持跨租户的 Key Vault 和灵活服务器交互。 如果在执行配置后移动 Key Vault 资源,则需要重新配置数据加密。
  • 密钥保管库和 Azure Database for MySQL 灵活服务器实例必须位于同一区域。
  • 对 Key Vault 启用软删除功能,并将保持期设置为 90 天,防止在意外删除密钥(或 Key Vault)时丢失数据。 恢复和清除操作在 Key Vault 访问策略中各自具有相应的权限。 软删除功能默认已关闭,但你可以通过 Azure 门户、PowerShell 或 Azure CLI 启用它。
  • 对密钥保管库启用清除保护功能,并将保留期设置为 90 天。 启用清除保护后,在保留期结束之前,无法清除处于已删除状态的保管库或对象。 可以使用 PowerShell 或 Azure CLI 启用此功能,但只能在启用软删除后启用此功能。

在尝试配置 CMK 之前,请务必满足以下要求。

  • 用于加密 DEK 的客户管理的密钥只能是非对称的 RSA 2048、3072 或 4096。
  • 密钥激活日期(如果已设置)必须是过去的日期和时间。 未设置到期日期。
  • 密钥必须处于“已启用”状态。
  • 密钥必须已启用软删除,保留期设置为 90 天。 这会隐式设置所需的密钥属性 recoveryLevel:“可恢复”。
  • 密钥必须启用清除保护
  • 如果将现有的密钥导入密钥保管库,请确保以支持的文件格式(.pfx、.byok 或 .backup)提供该密钥。

注意

有关如何通过 Azure 门户为 Azure Database for MySQL 灵活服务器配置数据加密的详细分步说明,请参阅使用 Azure 门户为 Azure Database for MySQL 灵活服务器执行数据加密

有关配置数据加密的建议

将 Key Vault 配置为使用客户管理的密钥进行数据加密时,请记住以下建议。

  • 在 Key Vault 中设置资源锁可控制谁能删除该关键资源,并防止意外或未经授权的删除。
  • 对所有加密密钥启用审核和报告功能。 Key Vault 提供可轻松注入到其他安全信息和事件管理工具的日志。 Azure Monitor Log Analytics 就是一项已集成的服务。
  • 将客户管理的密钥副本保存在安全的位置,或将其托管到托管服务。
  • 如果 Key Vault 生成密钥,请在首次使用该密钥之前创建密钥备份。 只能将备份还原到 Key Vault。 要详细了解备份命令,请参阅 Backup-AzKeyVaultKey

注意

  • 建议使用来自同一区域的密钥保管库,但如果需要,你可以通过指定“输入密钥标识符”信息来使用来自其他区域的密钥保管库。

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

使用密钥保管库中的 CMK 配置数据加密时,服务器必须保持联机状态才能持续访问该密钥。 如果灵活服务器无法访问密钥保管库中客户管理的密钥,它将在 10 分钟内开始拒绝所有连接。 灵活服务器会发出相应的错误消息,并将服务器状态更改为“无法访问”。 服务器可能出于各种原因进入此状态。

  • 如果删除密钥保管库,Azure Database for MySQL 灵活服务器实例将无法访问该密钥,并将变为“无法访问”状态。 恢复密钥保管库并重新验证数据加密,使 Azure Database for MySQL 灵活服务器实例变为“可用”状态。
  • 如果删除密钥保管库中的密钥,Azure Database for MySQL 灵活服务器实例将无法访问该密钥,并将变为“无法访问”状态。 恢复密钥并重新验证数据加密,使 Azure Database for MySQL 灵活服务器实例变为“可用”状态。
  • 如果存储在 Azure 密钥保管库中的密钥过期,该密钥将会失效,Azure Database for MySQL 灵活服务器实例将转换为“无法访问”状态。 使用 CLI 延长密钥过期日期,然后重新验证数据加密,使 Azure Database for MySQL 灵活服务器实例变为“可用”状态。

从 Key Vault 意外撤消密钥访问

可能会发生这样的情况:对密钥保管库具有足够访问权限的人员通过下列方式意外禁用了灵活服务器对密钥的访问:

  • 从服务器中撤消密钥保管库的“获取、列出、包装密钥”和“解包密钥”权限
  • 删除密钥
  • 删除密钥保管库
  • 更改密钥保管库的防火墙规则
  • 使用 Microsoft Entra ID 中客户管理的密钥删除用于在灵活服务器上进行加密的用户管理的标识

在 Key Vault 中监视客户管理的密钥

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

  • 活动日志:对密钥保管库中客户管理的密钥访问失败时,活动日志中会添加相应条目。 如果为这些事件创建警报,就可尽快恢复访问。
  • 操作组:定义这些组,使其根据首选项发送通知和警报。

副本和密钥保管库中客户管理的密钥

在使用客户存储在密钥保管库中的托管密钥对 Azure Database for MySQL 灵活服务器实例进行加密后,还将对服务器的任何新创建的副本进行加密。 当你尝试使用已有副本的客户管理的密钥加密 Azure Database for MySQL 灵活服务器实例时,我们建议通过添加托管标识和密钥来配置副本。 假设为 Azure Database for MySQL 灵活服务器实例配置了异地冗余备份。 在这种情况下,必须为副本配置托管标识和密钥,该标识有权访问该密钥,并且该密钥驻留在服务器的异地配对区域中。

使用密钥保管库中客户管理的密钥进行还原

当你尝试还原 Azure Database for MySQL 灵活服务器实例时,可以选择用户托管标识和密钥来加密还原服务器。 假设为 Azure Database for MySQL 灵活服务器实例配置了异地冗余备份。 在这种情况下,必须为还原服务器配置托管标识和密钥,该标识有权访问该密钥,并且该密钥驻留在服务器的异地配对区域中。

为避免在还原或只读副本创建期间设置客户管理的数据加密时出现问题,务必要在源服务器和还原/副本服务器上执行以下步骤:

  • 从源 Azure Database for MySQL 灵活服务器实例启动还原或只读副本创建过程。
  • 在还原/副本服务器上,重新验证数据加密设置中的客户管理的密钥,以确保为用户托管标识授予对存储在密钥保管库中的密钥的“获取、列出、包装密钥”和“解包密钥”权限。

注意

执行还原时,不需使用与源服务器上的标识和密钥相同的标识和密钥。