您可以使用Azure Key Vault (AKV) 中的客户托管密钥 ( 集合扫描 ) 进一步加密Atlas中的静态静态数据。 您还可以将AKV的所有流量配置为使用Azure Private Link。
注意
MongoDB Atlas责任共担模型定义了MongoDB及其客户在维护安全和弹性数据环境方面的互补职责。在此框架下, MongoDB管理根本的平台的安全性和操作完整性,而客户则负责其特定部署的配置、管理和数据策略。有关安全性和卓越运营之间所有权的详细划分,请参阅责任共担模型。
Atlas使用Azure Key Vault 集合扫描来加密和解密MongoDB主密钥。这些MongoDB主密钥用于加密集群数据库文件和云提供商快照。要详细学习;了解Atlas如何使用集合扫描进行加密,请参阅关于使用Azure Key Vault的客户托管密钥。
当您使用自己的云提供商KMS时, Atlas至少每 90 天自动轮换MongoDB主密钥。如果您配置了密钥轮换,则密钥轮换将在维护窗口期间开始。推迟维护(手动或自动)可能会导致密钥轮换超过 90 天标记。密钥滚动轮换,并且该进程不需要重写数据。
重要
Azure将集合扫描的客户端密钥生命周期限制为两年。客户端密钥过期后, Atlas将无法访问权限集合扫描 。因此,请在客户端密钥过期之前轮换客户端密钥,以防止集群失去可用性。要学习;了解无密钥选项,请参阅使用Azure Key Vault管理客户数密钥(无密钥)。
本页介绍在Atlas项目上使用 AKV 配置客户密钥管理。您还可以使用Atlas Administration API在 AKV 中自动设立Azure Private Link,以确保Atlas和 AKV 之间的所有流量都通过Azure的专用网络接口进行。
注意
Atlas Infinite
在公开预览期间, Azure Key Vault不适用于Atlas Infinite。在公开预览期间, Atlas Infinite 仅支持通过 AWS KMS托管客户密钥。要学习;了解Atlas Infinite 的静态加密工作原理,请参阅Atlas Infinite Encryption。
您必须先为 Atlas 项目配置客户密钥管理,然后才能在该项目中的集群上启用它。
关于使用Azure Key Vault的客户托管密钥
Atlas中的客户数密钥管理遵循称为信封加密的进程。此进程通过使用一个密钥加密另一个密钥来创建多层加密。为了启用客户密钥管理, Atlas使用以下加密密钥:
Customer-Managed Key (CMK)客户管理的密钥是你在Azure Key Vault中创建、拥有和管理的加密密钥。您可以在Azure Key Vault中创建集合扫描 ,并在项目级别将其连接到Atlas 。要学习;了解有关Azure Key Vault中使用的集合扫描的更多信息,请参阅Azure文档。
Atlas 仅使用此密钥来加密 MongoDB 主密钥。
MongoDB Master KeyAtlas 集群中的每个节点都会创建一个MongoDB主密钥。 MongoDB主密钥是MongoDB Server用于加密每数据库加密密钥的加密密钥。 Atlas在本地保存密钥的加密副本。
此密钥使用集合扫描加密,并对每个数据库的加密密钥进行加密。
Per-Database Encryption KeyAtlas 集群中的每个节点还会为集群中的每个数据库创建一个加密密钥。Atlas 使用这些密钥,通过 WiredTiger 读取和写入数据,WiredTiger 还对这些密钥进行加密和存储。
此密钥使用 MongoDB 主密钥加密。
例子
请考虑以下针对三节点副本集的加密层次结构。 Atlas使用Azure Key Vault中的集合扫描为集群中的每个节点加密唯一的MongoDB主密钥。每个节点还包含三个数据库,每个数据库都使用唯一的数据库加密密钥加密。当集群启动时, Atlas使用Azure Key Vault中的集合扫描解密MongoDB主密钥,并将其提供给MongoDB Server。
注意
如果您撤销 Atlas 对集合扫描的访问权限, Atlas会关闭集群中的节点,并且在您恢复对集合扫描 的访问权限之前,您无法访问权限数据。

您需要了解的信息
配置Atlas以使用 AKV 集合扫描后,详细学习;了解关于轮换Azure密钥标识符和关于停电期间的Azure Key Vault故障转移。
关于轮换Azure密钥标识符
MongoDB 主密钥 - MongoDB 责任
当您使用自己的云提供商KMS时, Atlas至少每 90 天自动轮换MongoDB主密钥。如果您配置了密钥轮换,则密钥轮换将在维护窗口期间开始。推迟维护(手动或自动)可能会导致密钥轮换超过 90 天标记。密钥滚动轮换,并且该进程不需要重写数据。
轮换 Azure 密钥 ID - 您的责任
Atlas 不会自动轮换用于 Azure Key Vault 的密钥标识符。
当您为Atlas项目启用静态加密时, Atlas默认下会自动创建encryption key rotation alert 来提醒您每 90 天轮换Azure密钥标识符。
您可以自行轮换Azure Key Vault中存储的集合扫描 ,也可以将Azure Key Vault配置为自动轮换密钥。如果在Azure Key Vault中配置自动轮换,默认轮换时间段约为 365 天。
您如果已在 Azure 密钥保管库中设置自动轮换,并且不希望收到每 90 天轮换 Azure 密钥标识符的 Atlas 警报,则可以将默认警报期限修改为大于 365 天。
关于停电期间的Azure Key Vault故障转移
在区域中断期间,您的 AKV地区可能不可用。如果发生这种情况, Azure会自动将传入的 Key Vault 请求路由到预先分配的从节点(secondary node from replica set)地区。要学习;了解更多信息,请参阅Azure Key Vault故障转移和区域配对。
如果两个区域均已关闭,您可以手动将密钥迁移到区域配对之外的地区。要学习;了解更多信息,请参阅跨区域移动密钥保管库。
注意
如果您已启用使用客户数密钥管理进行静态加密 ,则可以在中断期间至少一个节点仍然可用的情况下执行加密和解密操作。 Atlas不会关闭您的集群。
对于某些区域,Azure不支持自动故障转移。要学习;了解详情,请参阅Azure文档。
必需的访问权限
要配置客户密钥管理,您必须拥有对项目的 Project Owner 访问权限。
拥有 Organization Owner 访问权限的用户必须将自己作为 Project Owner 添加到项目中。
您必须使用 Permission Model 授予Atlas访问权限AKV 的权限。可以使用“密钥保管库访问策略”或Azure RBAC 授予访问权限。
在授予数据平面权限之前,必须先将读取者角色分配给您的服务主体。这对于两种权限模型(RBAC 和访问策略)都是必需的:
PowerShell
New-AzRoleAssignment ` -ObjectId "<SERVICE_PRINCIPAL_ID>" ` -RoleDefinitionName "Reader" ` -Scope "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT_NAME>"
Azure CLI
az role assignment create \ --assignee-object-id "<SERVICE_PRINCIPAL_ID>" \ --assignee-principal-type ServicePrincipal \ --role "Reader" \ --scope "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT_NAME>"
分配“读取者”角色后,使用以下权限模型之一授予数据平面权限:
如果使用访问权限策略,请在Azure用户界面中执行以下操作,授予Atlas访问权限AKV 的权限。
按照Azure文档在Access Control (IAM) 设置中向您的应用程序授予
Microsoft.KeyVault/vaults/read权限:添加角色分配时,选择 Key Vault Reader 角色。
选择节点时,请选择应用程序。
在 Access Policies 页面中,使用以下 Key Permissions 创建访问权限策略:
授予此权限...要...获取
读取有关存储在 AKV 中的密钥的元数据。
加密
使用 AKV 中的密钥加密数据。
解密
使用 AKV 中的密钥对之前使用这些密钥加密的数据进行解密。
添加与主体相同的应用并配置访问权限策略。
按照Azure文档创建新的 RSA 密钥。打开密钥版本详细信息并复制 Key Identifier URI,您需要在后续步骤中配置Atlas 。
如果您的 AKV 使用 RBAC,则必须在Azure用户界面Access Control (IAM) 设置中执行以下操作,授予Atlas访问权限您的 AKV 的权限。
向应用程序授予以下
actions权限。授予此权限...要...Microsoft.KeyVault/vaults/read读取密钥保管库的属性
Microsoft.KeyVault/vaults/keys/read读取有关存储在 AKV 中的密钥的元数据。
{ "permissions": [ { "actions": [ "Microsoft.KeyVault/vaults/read" "Microsoft.KeyVault/vaults/keys/read" ] } ... ] } 向应用程序授予以下
dataActions权限。授予此权限...要...Microsoft.KeyVault/vaults/keys/read读取有关存储在 AKV 中的密钥的元数据。
Microsoft.KeyVault/vaults/keys/encrypt/action使用 AKV 中的密钥加密数据。
Microsoft.KeyVault/vaults/keys/decrypt/action使用 AKV 中的密钥对之前使用这些密钥加密的数据进行解密。
{ "permissions": [ ... { "dataActions": [ "Microsoft.KeyVault/vaults/keys/read", "Microsoft.KeyVault/vaults/keys/encrypt/action", "Microsoft.KeyVault/vaults/keys/decrypt/action" ] } ] }
后续步骤
您可以通过公共网络或Azure私有端点使用来自Azure Key Vault (AKV) 的客户管理密钥 ( 集合扫描 )。要学习;了解详情,请参阅以下内容:
如果使用Azure私有端点,要学习;了解Azure资源锁如何区块私有端点创建和删除,请参阅Azure资源锁。
注意
如果启用了使用客户密钥管理进行静态加密,就可以在中断期间至少一个节点仍然可用的情况下执行加密和解密操作。
为搜索节点启用客户管理的密钥
默认下, MongoDB和搜索进程在同一节点上运行。在这种架构中,客户管理的加密适用于数据库数据,但不适应用搜索索引。
启用专用搜索节点后,搜索进程将在单独的节点上运行。这允许您启用搜索节点数据加密,以便您可以使用相同的客户托管密钥对数据库数据和搜索索引进行加密,以实现全面的加密覆盖范围。
在公开预览期间, Atlas Infinite 集群不支持专用搜索节点。
重要
此功能适用于所有KMS提供商。