使用 Azure 密钥保管库管理客户密钥
注意
您可以使用Azure Key Vault (AKV) 中的客户托管密钥 ( 集合扫描 ) 进一步加密Atlas中的静态静态数据。 您还可以将 AKV的所有流量配置为使用Azure Private Link。
Atlas使用Azure Key Vault 集合扫描来加密和解密MongoDB主密钥。 这些MongoDB主密钥用于加密集群数据库文件和云提供商快照。 要详细学习;了解Atlas如何使用集合扫描进行加密,请参阅关于使用Azure Key Vault的客户托管密钥。
当您使用自己的云提供商KMS时, Atlas至少每 天自动轮换MongoDB主密钥。90如果您配置了密钥轮换,则密钥轮换将在维护窗口期间开始。推迟维护(手动或自动)可能会导致密钥轮换超过 90 天。密钥滚动轮换,并且该进程不需要重写数据。
重要
Azure将集合扫描的客户端密钥生命周期限制为两年。 客户端密钥过期后, Atlas将无法访问权限集合扫描 。 因此,请在客户端密钥过期之前轮换客户端密钥,以防止集群失去可用性。
本页介绍在Atlas项目上使用AKV配置客户密钥管理。 您还可以使用Atlas Administration API在AKV中自动设立Azure Private Link,以确保Atlas和AKV之间的所有流量都通过Azure的专用网络接口进行。
您必须先为 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 Key
Atlas 集群中的每个节点都会创建一个MongoDB主密钥。 MongoDB主密钥是MongoDB Server用于加密每数据库加密密钥的加密密钥。 Atlas在本地保存密钥的加密副本。
此密钥使用 CMK 加密,并对每个数据库的加密密钥进行加密。
Per-Database Encryption Key
Atlas 集群中的每个节点还会为集群中的每个数据库创建一个加密密钥。Atlas 使用这些密钥,通过 WiredTiger 读取和写入数据,WiredTiger 还对这些密钥进行加密和存储。
此密钥使用 MongoDB 主密钥加密。
例子
请考虑以下针对三节点副本集的加密层次结构。 Atlas 使用 Azure Key Vault 中的CMK为集群中的每个节点加密唯一的 MongoDB 主密钥。 每个节点还包含三个数据库,每个数据库都使用每个数据库唯一的加密密钥进行加密。 当集群启动时,Atlas 使用 Azure Key Vault 中的CMK解密 MongoDB 主密钥,并将其提供给 MongoDB Server。
注意
如果您撤销 Atlas 对客户主密钥的访问权限,Atlas 就会关闭集群中的节点,并且在您恢复对客户主密钥的访问权限之前,您无法访问数据。
您需要了解的信息
配置Atlas以使用 AKV 集合扫描后,详细学习;了解关于轮换Azure密钥标识符和关于停电期间的Azure Key Vault故障转移。
关于轮换Azure密钥标识符
注意
MongoDB 主密钥 - MongoDB 责任
当您使用自己的云提供商KMS时, Atlas至少每 天自动轮换MongoDB主密钥。90如果您配置了密钥轮换,则密钥轮换将在维护窗口期间开始。推迟维护(手动或自动)可能会导致密钥轮换超过 90 天。密钥滚动轮换,并且该进程不需要重写数据。
轮换 Azure 密钥 ID - 您的责任
Atlas 不会自动轮换用于 Azure Key Vault 的密钥标识符。
当您为Atlas项目 启用静态加密时, Atlas会自动创建一个 来提醒您默认每encryption key rotation alert
天轮换一次Azure密钥标识符。90
您可以 轮换 您自己将 集合扫描 存储在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
添加到项目中。
您必须使用 授予Atlas访问权限您的 AKV Permission Model的权限。您可以使用“密钥保管库访问策略”或Azure RBAC 授予访问权限。
如果使用访问权限策略,请在Azure用户界面中执行以下操作,授予Atlas访问权限AKV 的权限。
在 Access Control (IAM) 设置下,向您的应用程序授予
Microsoft.KeyVault/vaults/read
权限。在 Access Policies 页面中,使用以下 Key Permissions 创建访问权限策略:
授予此权限...要...获取
读取有关存储在 AKV 中的密钥的元数据。
加密
使用 AKV 中的密钥加密数据。
解密
使用 AKV 中的密钥对之前使用这些密钥加密的数据进行解密。
添加与主体相同的应用并配置访问权限策略。
如果您的 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) 的客户管理密钥 ( 集合扫描 )。 要学习;了解详情,请参阅以下内容:
注意
如果启用了使用客户密钥管理进行静态加密,就可以在中断期间至少一个节点仍然可用的情况下执行加密和解密操作。