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

适用对象: Azure Cosmos DB for PostgreSQL(由 PostgreSQL 的 Citus 数据库扩展提供支持)

存储在 Azure Cosmos DB for PostgreSQL 群集中的数据会使用由 Azure 管理的密钥自动进行无缝加密。 这些密钥称为 服务托管密钥。 默认情况下,Azure Cosmos DB for PostgreSQL 使用 Azure 存储加密通过服务管理的密钥来加密静态数据。 可以选择通过客户管理的密钥启用加密来添加额外的安全层。

服务托管的密钥

Azure Cosmos DB for PostgreSQL 服务使用 FIPS 140-2 验证的加密模块对静态数据进行存储加密。 在运行查询时创建的所有数据(包括备份和临时文件)都会在磁盘上进行加密。 该服务使用包含在 Azure 存储加密中的 AES 256 位密码,并且密钥由系统进行管理。 存储加密始终处于启用状态,无法禁用。

客户管理的密钥

许多组织要求使用客户管理的密钥 (CMK) 来完全控制对数据的访问权限。 使用 Azure Cosmos DB for PostgreSQL 的客户管理密钥进行数据加密,可创建自己的密钥来保护静态数据。 通过它,组织还可在管理密钥和数据时实现职责分离。 使用客户管理的加密时,密钥的生命周期、使用权限以及对操作的审核由你负责并全权控制。

通过 Azure Cosmos DB for PostgreSQL 的客户管理密钥进行数据加密是在服务器级别设置的。 数据(包括备份)在磁盘上进行加密。 此加密包括运行查询时创建的临时文件。 客户管理的密钥被称为密钥加密密钥(KEK),对于给定群集,它用于对服务的数据加密密钥(DEK)进行加密。 KEK 是一种非对称密钥,它存储在客户自有和客户管理的 Azure Key Vault 实例中。

说明
数据加密密钥 (DEK) 数据加密密钥是对称 AES256 密钥,用于加密数据分区或块。 使用不同的密钥加密每个数据块可以增加加密分析攻击的难度。 对特定块进行加密和解密的资源提供程序或应用程序实例需要 DEK 的访问权限。 将 DEK 替换为新密钥时,只需使用新密钥对其关联的块中的数据重新加密。
密钥加密密钥 (KEK) 密钥加密密钥是用于加密 DEK 的加密密钥。 由于 KEK 始终位于密钥保管库中,因此 DEK 本身可以得到加密和控制。 具有 KEK 访问权限的实体可能不是需要 DEK 的实体。 由于解密 DEK 需要使用 KEK,因此 KEK 实际上构成了一个单点机制,删除 KEK 实际上就会删除 DEK。

DEK 使用 KEK 加密且单独存储。 只有有权访问 KEK 的实体才能解密这些 DEK。 有关详细信息,请参阅静态加密中的安全性

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

对于要使用存储在密钥保管库中的客户管理的密钥加密 DEK 的群集,密钥保管库管理员会向服务器授予以下访问权限:

说明
get 支持检索密钥保管库中密钥的公共部件和属性。
wrapKey 启用 DEK 加密。 已加密的 DEK 存储在 Azure Cosmos DB for PostgreSQL 中。
unwrapKey 启用 DEK 解密。 Azure Cosmos DB for PostgreSQL 需要使用已解密的 DEK 来加密/解密数据。

Key Vault 管理员还可启用 Key Vault 审核事件的日志记录,便于稍后对其进行审核。 当 Azure Cosmos DB for PostgreSQL 配置为使用存储在密钥保管库中的客户管理的密钥时,该群集会将 DEK 发送到密钥保管库进行加密。 Key Vault 返回存储在用户数据库中已加密的 DEK。 同样在必要时,服务器会将受保护的 DEK 发送到 Key Vault 进行解密。 如果启用了日志记录,则审核者可使用 Azure Monitor 查看密钥保管库审核事件日志。

Screenshot of architecture of data enrcryption with customer-managed keys.

好处

使用 Azure Cosmos DB for PostgreSQL 的客户管理的密钥进行数据加密可提供以下优势:

  • 能够移除密钥和将数据库设置为不可访问的功能,因此可以完全控制数据访问。
  • 完全控制密钥生命周期,包括根据特定的公司策略轮换密钥。
  • 在 Azure Key Vault 中集中管理和整理密钥。
  • 可实现安全管理人员、数据库管理员和系统管理员之间的职责分离。
  • 无论是否使用客户管理的密钥,启用加密都不会产生任何额外的性能影响。 Azure Cosmos DB for PostgreSQL 依赖于 Azure 存储在客户管理的密钥和服务管理的密钥方案中进行数据加密。

后续步骤