你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Cosmos DB for MongoDB vCore 中的数据加密

Azure Cosmos DB for MongoDB vCore 管理的所有数据始终静态加密。 这些数据包括所有系统和用户数据库、临时文件、日志和备份。

重要

Azure Cosmos DB for MongoDB vCore 中的客户管理的密钥(CMK)加密目前为预览版。 此预览版在没有服务级别协议的情况下提供,不建议用于生产工作负荷。 某些功能不受支持或功能有限。

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

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

客户管理的密钥 模式下,可以自带加密密钥来加密数据。 指定客户托管密钥时,该密钥用于保护和控制对数据加密密钥的访问。 客户管理的密钥提供更大的灵活性来管理访问控制。 必须部署自己的 Azure Key Vault 并将其配置为存储 Azure Cosmos DB for MongoDB vCore 群集使用的加密密钥。

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

为了实现数据的加密,Azure Cosmos DB for MongoDB vCore 对 静态数据使用 Azure 存储加密。 使用 CMK 时,你负责提供密钥来加密和解密 Azure 存储服务中的数据。 这些密钥必须存储在 Azure Key Vault 中。

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

使用 Azure Cosmos DB for MongoDB vCore 的服务托管密钥 进行数据加密具有以下优势:

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

使用 Azure Cosmos DB for MongoDB vCore 的客户管理的密钥 进行数据加密具有以下优势:

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

CMK 要求

使用 客户管理的加密密钥 ,你承担了维护 CMK 正常运行所需的正确配置组件的所有责任。 因此,必须部署自己的 Azure Key Vault 并提供 用户分配的托管标识。 必须生成或导入自己的密钥。 必须向 Key Vault 授予所需的权限,以便 Azure Cosmos DB for MongoDB vCore 可以对密钥执行必要的作。 必须负责配置保留密钥的 Azure Key Vault 的所有网络方面,以便 Azure Cosmos DB for MongoDB vCore 实例可以访问密钥。 审核对密钥的访问权限也是你的责任。

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

Azure Key Vault 是一种基于云的外部密钥管理系统。 它具有高可用性,并为 RSA 加密密钥提供可扩展的安全存储。 它不允许直接访问存储的密钥,而是为已获授权的实体提供加密和解密服务。 Key Vault 可以生成密钥并将其导入,或者接收从本地 HSM 设备传输的密钥。

下面是 Azure Cosmos DB for MongoDB vCore 数据加密配置的要求和建议列表:

  • 密钥保管库
    • Key Vault 和 Azure Cosmos DB for MongoDB vCore 必须属于同 一Microsoft Entra 租户
    • 建议:将 Key Vault 的已删除保管库 设置设置为 90 天。 只能在密钥保管库创建时定义此配置设置。 创建实例后,无法修改此设置。
    • soft-delete 启用密钥保管库中的功能,以帮助防止数据丢失,如果意外删除了密钥或密钥保管库实例。 密钥保管库将软删除的资源保留 90 天,除非用户在此期间恢复或清除它们。 恢复和清除作具有与密钥保管库、RBAC 角色或访问策略权限关联的自己的权限。 软删除功能默认处于打开状态。 如果密钥保管库部署了很久以前,它可能仍禁用软删除。 在这种情况下,可以 打开它
    • 启用 清除保护 以强制删除的保管库和保管库对象保留期。
  • 密钥
    • 用于加密数据加密密钥的密钥只能是非对称、RSA 或 RSA-HSM 密钥。 支持的密钥大小为 2048、3072 和 4096。
      • 建议:使用 4,096 位密钥来提高安全性。
    • 密钥激活的日期和时间(如果已设置)必须是过去的日期和时间。 过期的日期和时间(如果已设置)必须在未来。
    • 密钥必须处于“已启用”状态
    • 如果要将现有密钥导入 Azure Key Vault,请以受支持的文件格式(.pfx.byok.backup提供它。
  • 权限:通过以下方式授予 Azure Cosmos DB for MongoDB vCore 用户分配的托管标识对密钥的访问权限:
    • 首选:应使用 RBAC 权限模型配置 Azure Key Vault,并应为托管标识分配 Key Vault 加密服务加密用户角色
    • 旧版:如果为 Azure Key Vault 配置了访问策略权限模型,请向托管标识授予以下权限:
      • get:检索密钥保管库中密钥的属性和公共部分。
      • list:列出并循环访问密钥保管库中存储的密钥。
      • wrapKey:加密数据加密密钥
      • unwrapKey:解密数据加密密钥

CMK 密钥版本更新

Azure Cosmos DB for MongoDB vCore 中的 CMK 支持自动密钥版本更新,也称为无版本密钥。 Azure Cosmos DB for MonogoDB vCore 服务会自动选取新密钥版本并重新加密数据加密密钥。 此功能可与 Azure Key Vault 的 自动启动功能结合使用。

注意事项

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

  • 若要防止意外或未经授权的删除此关键资源,请对密钥保管库设置 资源锁
  • 查看并启用 Azure Key Vault 可用性和冗余 选项。
  • 在用于存储密钥的 Azure 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 中群集的托管标识。

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

使用存储在密钥保管库中的客户管理的密钥配置数据加密时,群集需要持续访问此密钥才能保持联机状态。 如果不是这种情况,群集会将其状态更改为 “不可访问 ”,并开始拒绝所有连接。

注释

在预览版中,群集状态可能继续为 “就绪” ,不会更改为 “不可访问”。

群集状态可能 变得不可访问 的一些可能原因如下:

原因 决议
群集指向的任何加密密钥都配置了到期日期和时间,并且达到该日期和时间。 你必须延长密钥的到期日期。 然后,必须等待服务重新验证密钥,并自动将群集状态转换为“就绪”。 仅当群集恢复 就绪 状态时,才能将密钥轮换到较新版本或创建新密钥,并更新群集,使其引用同一密钥的新版本或新密钥。
删除 Key Vault 实例,Azure Cosmos DB for MongoDB vCore 实例无法访问密钥并移动到 不可访问 状态。 恢复 Key Vault 实例 并等待服务运行密钥的定期重新验证,并自动将群集状态转换为 “就绪”。
从 Microsoft Entra ID 中删除托管标识,该 标识 用于检索密钥保管库中存储的任何加密密钥。 恢复标识 并等待服务运行密钥的定期重新验证,并自动将群集状态转换为 “就绪”。
密钥保管库权限模型配置为使用基于角色的访问控制。 你从为检索任何密钥而配置的托管标识中移除了密钥保管库加密服务加密用户 RBAC 角色分配。 再次将 RBAC 角色授予 托管标识 ,并等待服务运行密钥的定期重新验证,并自动将群集状态转换为 “就绪”。 另一种方法包括向密钥保管库授予其他 托管标识的角色,并更新群集,以便它使用此其他 托管标识 来访问密钥。
密钥保管库权限模型配置为使用访问策略。 你从为检索任何密钥而配置的托管标识中撤销了 list、get、wrapKey 或 unwrapKey 访问策略 将 RBAC 角色授予托管标识,并等待服务运行密钥的定期重新验证,并自动将群集状态转换为 就绪。 另一种方法包括向密钥保管库授予其他托管标识所需的访问策略,并更新群集,以便它使用此其他托管标识来访问密钥。
设置了过于严格的密钥保管库防火墙规则,以便 Azure Cosmos DB for MongoDB vCore 群集无法与密钥保管库通信以检索密钥。 配置密钥保管库防火墙时,请确保选择允许 受信任的Microsoft服务 的选项,以便 Azure Cosmos DB for MongoDB vCore 可以绕过防火墙。

注释

禁用、删除、过期或无法访问密钥时,使用该密钥加密数据的群集将 变得不可访问,如前所述。 在重新验证加密密钥之前,群集状态不会再次更改为 “就绪 ”。

通常,在禁用、删除、过期或无法访问密钥后,群集在 60 分钟内 变得不可访问 。 密钥可用后,群集可能需要长达 60 分钟才能再次 准备就绪

恢复删除的托管标识

如果用于访问密钥保管库中存储的加密密钥的用户分配托管标识在 Microsoft Entra ID 中删除,则应按照以下步骤恢复:

  1. 恢复标识 或创建新的托管 Entra ID 标识。
  2. 如果创建了一个新标识(即使其名称与已删除的标识相同),请更新 Azure Database for 灵活群集属性,使其知道必须使用此新标识来访问加密密钥。
  3. 请确保此标识对 Azure Key Vault (AKV) 中的密钥具有适当的操作权限。
  4. 等待大约一小时,直到群集重新评估密钥。

重要

仅仅创建一个与已删除标识具有相同名称的新 Entra ID 标识,并不能恢复删除的托管标识。