使用客户管理的密钥对 Azure Database for MySQL 进行数据加密,您可以自带密钥(BYOK)用于静态数据保护,以实现管理密钥和数据的职责分离。 使用客户管理的密钥(CMK),客户控制:
- 密钥生命周期管理(密钥创建、上传、轮换、删除)
- 密钥使用权限
- 对密钥的审核操作
客户管理的密钥的优势(CMK)
使用客户管理的密钥为 Azure Database for MySQL 进行数据加密提供以下优势:
- 数据访问完全由你控制,你可删除密钥并使数据库无法访问
- 可完全控制密钥生命周期,包括根据公司策略轮换密钥
- 在 Azure Key Vault 中集中管理和整理密钥
- 可实现安全管理人员与 DBA 和系统管理员之间的职责分离
使用客户管理的密钥进行数据加密的工作原理
Microsoft Entra ID 中的托管标识提供了一种更安全的方式来对服务进行客户端认证。 CMK 加密使用 Azure Database for MySQL 服务器的托管标识连接到存储 CMK 的 Azure Key Vault。 Azure Database for MySQL 目前仅支持用户分配的托管标识(UAMI)来访问 Key Vault。 有关详细信息,请参阅 Azure 中的托管标识类型。
若要为 Azure Database for MySQL 配置 CMK,需要将 UAMI 链接到服务器,并指定要使用的 Azure Key Vault 和密钥。
UAMI 必须具有对密钥保管库的以下访问权限:
- 获取:用于检索密钥保管库中密钥的公共部分和属性。
- 列出:列出存储在密钥保管库中的密钥版本。
- 包装密钥:能够加密 DEK。 加密的 DEK 存储在 Azure Database for MySQL 灵活服务器实例中。
- 解包密钥:能够解密 DEK。 Azure Database for MySQL 需要解密的 DEK 来加密/解密数据。
如果已启用 Azure RBAC,则必须分配 UAMI 角色,而不是单独访问。
-
密钥保管库加密服务加密用户或具有权限的角色:
- Microsoft.KeyVault/vaults/keys/wrap/action
- Microsoft.KeyVault/vaults/keys/unwrap/action
- Microsoft.KeyVault/vaults/keys/read,如“密钥保管库加密服务加密用户”
使用 CMK 的数据加密是在服务器级别设置的。 CMK 称为密钥加密密钥 (KEK),它在给定的服务器中用于加密服务的数据加密密钥 (DEK)。 KEK 是一种非对称密钥,它存储在客户自有和客户管理的 Azure 密钥保管库实例中。 Key Vault 是用于存储 RSA 加密密钥的高度可用且可缩放的安全存储。 密钥保管库不允许直接访问存储的密钥,但会向已获授权的实体提供使用该密钥进行加密/解密的服务。 导入的密钥保管库可以生成密钥。
将灵活服务器配置为使用存储在 Key Vault 中的 CMK 时,该服务器会将 DEK 发送到 Key Vault 进行加密。 Key Vault 返回存储在用户数据库中已加密的 DEK。 同样,灵活服务器会根据需要将受保护的 DEK 发送到密钥保管库进行解密。
启用日志记录后,审核员可以使用 Azure Monitor 查看密钥保管库审核事件日志。 若要启用密钥保管库审核事件的日志记录,请参阅“使用密钥保管库见解监视密钥保管库服务”。
注释
权限更改最多可能需要在 10 分钟后才会影响密钥保管库。 这包括撤销对 AKV 中 TDE 保护程序的访问权限,并且此时间范围内的用户可能仍然拥有访问权限。
为 Azure Database for MySQL 配置数据加密的要求
在尝试配置密钥保管库之前,请务必满足以下要求。
- 密钥保管库和 Azure Database for MySQL 灵活服务器实例必须属于同一个 Microsoft Entra 租户。 需要支持跨租户的 Key Vault 和灵活服务器交互。 如果在执行配置后移动 Key Vault 资源,则需要重新配置数据加密。
- 密钥保管库和 Azure Database for MySQL 灵活服务器实例必须位于同一区域。
- 在密钥保管库上启用 软删除 功能
- 启用 清除保护。
- 将保留期设置为 90 天。
- 恢复和清除操作在 Key Vault 访问策略中各自具有相应的权限。
- 默认情况下,软删除功能处于关闭状态。
在尝试配置 CMK 之前,请务必满足以下要求。
- 用于加密 DEK 的客户管理的密钥只能是非对称的 RSA 2048、3072 或 4096。
- 密钥激活日期(如果已设置)必须是过去的日期和时间。 到期日期未设置。
- 密钥必须处于“已启用”状态。
- 密钥必须已启用软删除,保留期设置为 90 天。 此设置将所需的键属性
recoveryLevel隐式设置为Recoverable。 - 密钥必须启用清除保护。
- 要将现有密钥导入密钥保管库,请确保以受支持的文件格式(
.pfx、.byok、.backup)提供该密钥。
注释
有关如何配置数据加密的详细分步说明,请参阅 Azure 门户的 Azure Database for MySQL 数据加密,或使用 Azure CLI 对 Azure Database for MySQL 灵活服务器进行数据加密。
有关配置数据加密的建议
将 Key Vault 配置为使用客户管理的密钥进行数据加密时,请记住以下建议。
- 在 Key Vault 中设置资源锁可控制谁能删除该关键资源,并防止意外或未经授权的删除。
- 对所有加密密钥启用审核和报告功能。 Key Vault 提供可轻松注入到其他安全信息和事件管理工具的日志。
- 将客户管理的密钥副本保存在安全的位置,或将其托管到托管服务。
- 如果 Key Vault 生成密钥,请在首次使用该密钥之前创建密钥备份。 只能将备份还原到 Key Vault。 要详细了解备份命令,请参阅 Backup-AzKeyVaultKey。
注释
使用的密钥保管库必须来自与数据库服务器相同的区域。
无法访问客户管理的密钥的情形
使用密钥保管库中的 CMK 配置数据加密时,服务器必须保持联机状态才能持续访问该密钥。 如果灵活服务器无法访问密钥保管库中客户管理的密钥,它将在 10 分钟内开始拒绝所有连接。 灵活服务器会发出相应的错误消息,并将服务器状态更改为“无法访问”。 服务器可能出于各种原因进入此状态。
如果删除密钥保管库,则 Azure Database for MySQL 灵活服务器实例无法访问密钥并移动到 Inaccessible 状态。 若要创建服务器实例 Available:
- 恢复 密钥保管库。
- 重新验证数据加密。
如果从密钥保管库中删除密钥,则 Azure Database for MySQL 灵活服务器实例无法访问密钥并移动到 Inaccessible 状态。 若要创建服务器实例 Available:
- 恢复 密钥。
- 重新验证数据加密。
注释
即使密钥已过期,服务器仍可通过设计访问,以防止停机。
从 Key Vault 意外撤消密钥访问
可能会发生这样的情况:对密钥保管库具有足够访问权限的人员通过下列方式意外禁用了灵活服务器对密钥的访问:
- 撤销服务器对密钥保管库获取、列出、包装密钥和拆解密钥的权限
- 删除密钥
- 删除密钥保管库
- 更改密钥保管库的防火墙规则
- 使用 Microsoft Entra ID 中客户管理的密钥删除用于在灵活服务器上进行加密的用户管理的标识
在密钥保管库中监视客户管理的密钥
若要监视数据库状态并在透明数据加密保护程序访问权限丢失时发出警报,请配置以下 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 灵活服务器实例启动还原或只读副本创建过程。
- 在还原/副本服务器上,重新验证数据加密设置中的 CMK,以验证对密钥的 UAMI 权限。
注释
执行还原时,使用与源服务器上相同的标识(UAMI)和密钥并不是必需的。