通过私有端点使用Azure Key Vault管理客户数密钥
注意
您可以使用Azure Key Vault (AKV) 中的客户托管密钥 ( 集合扫描 ) 进一步加密Atlas中的静态静态数据。 您还可以将 AKV的所有流量配置为使用Azure Private Link。
本页介绍如何使用Atlas Administration API在AKV中自动设立Azure Private Link,确保Atlas和AKV之间的所有流量都通过Azure的专用网络接口进行。
Considerations
在通过私有端点使用AKV启用静态加密之前,请查看以下使用案例、优势、限制和先决条件。
用例(Use Case)
假设您的Atlas部署在单个云服务提供商上。 现在,您要求对AKV的所有访问权限都通过云提供商的私有网络基础架构进行。 本页将引导您完成为Atlas项目启用私有端点连接的步骤。
收益分析
您可以使用Atlas Administration API ,允许Atlas使用私有端点通过AKV配置静态加密。 这样,流向AKV的所有流量都可以通过一设立私有端点,避免将AKV暴露给公共互联网或公共IP地址。 它无需维护允许的IP地址,同时通过将所有AKV流量保持在Azure的专用网络内来增强数据安全性。
限制
Atlas不支持使用通过私有端点的集合扫描对多云部署进行静态加密。 如果您在具有多云集群的现有项目中通过Azure Private Link使用集合扫描启用静态静态加密, Atlas会禁用项目中的多云集群。
Atlas不支持通过私有端点使用集合扫描对处于INACTIVE
状态的项目进行静态加密。
先决条件
要使用AKV为MongoDB项目启用客户管理的密钥,您必须:
使用 M10 或更大的集群。
拥有Azure帐户和 Key Vault凭证,以及AKV中加密密钥的密钥标识符。
对于该帐户,您必须拥有客户端ID、租户ID和密钥。
对于 Key Vault,您必须拥有订阅ID、资源组名称 和 Key Vault 名称。
要学习;了解如何配置这些Azure组件,请参阅 Azure文档。
Atlas 在为 Atlas 项目中的集群启用静态加密时使用这些资源。
注意
您必须在 Azure 订阅资源提供程序下注册 Microsoft .Network 。要学习;了解详情,请参阅 Azure文档。
步骤
为项目启用客户托管密钥
您必须为项目启用集合扫描 ,然后才能在该项目中的集群上启用CMK。 您可以通过Atlas用户界面和Atlas Administration API为项目启用集合扫描 。
请输入您的 Account Credentials(激活码)。
客户 ID | 输入Azure应用程序的 Client ID(或 Application ID)。确保您已为 Active Directory Application 分配必要的访问权限。要学习;了解更多信息,请参阅所需的访问权限。 |
租户 ID | 输入 Active Directory 租户的 Tenant ID(或 Directory ID)。 |
密钥 | 输入与 Active Directory 租户关联的应用程序的未过期客户端密钥之一。 |
Azure 环境 | 选择 Active Directory 租户所在的 Azure 云。 |
输入 Encryption Key(密钥保管库凭证)。
密钥标识符 | 输入在密钥库中创建的密钥的完整 URL。 重要提示: 密钥标识符必须以完整的 Azure通用格式提供:
|
(可选)配置与 AKV 的私有端点连接。
要学习;了解更多信息,请参阅为项目启用和设置私有端点连接
验证网络设置。
如果使用Atlas Administration API配置Atlas使用Azure Private Link与AKV通信,以确保Atlas和 Key Vault 之间的所有流量都通过Azure的专用网络接口进行,则Atlas会将Require Private Networking状态设置为Active 。 如果状态为Inactive ,并且您希望Atlas使用 AKV 的私有端点连接,则可以选择完成 为项目启用和设置私有端点连接 的步骤。
向 encryptionAtRest
端点发送 PATCH
请求。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2024-05-30+json" \ --header "Content-Type: application/vnd.atlas.2024-05-30+json" \ --request PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/66c9e8f1dd6c9960802420e9/encryptionAtRest" \ --data ' { "azureKeyVault": { "azureEnvironment": "AZURE", "clientID": "b054a9ff-b60a-4cb6-8df6-20726eaefce6", "enabled": true, "keyIdentifier": "https://test-tf-export.vault.azure.net/keys/test/78b9134f9bc94fda8027a32b4715bf3f", "keyVaultName": "test-tf-export", "resourceGroupName": "test-tf-export", "secret": "", "subscriptionID": "009774e0-124f-4a69-83e0-ca8cd8acb4e2", "tenantID": "1f6ef922-9303-402a-bae2-cc68810b023c" } }'
注意
启用并设立与 AKV 的私有端点连接后,无法修改以下设置:
keyVaultName
resourceGroupName
subscriptionID
验证项目的使用集合扫描的静态加密配置。
要验证使用您通过AKV管理的密钥启用和配置静态加密的请求,请向encryptionAtRest
端点发送GET
请求。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2024-05-30+json" \ --header "Content-Type: application/vnd.atlas.2024-05-30+json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest"
{ "azureKeyVault": { "azureEnvironment": "AZURE", "clientID": "632ff709-32a8-48a3-8224-30d2386fadaf", "enabled": true, "keyIdentifier": "https://EXAMPLEKeyVault.vault.azure.net/keys/EXAMPLEKey/d891821e3d364e9eb88fbd3d11807b86", "keyVaultName": "string", "requirePrivateNetworking": false, "resourceGroupName": "string", "subscriptionID": "a39012fb-d604-4cd1-8841-77f705f3e6d5", "tenantID": "ee46317d-36a3-4472-a3dd-6549e901da0b", "valid": true } }
在响应中,如果您的项目已成功启用使用集合扫描的静态加密,则enabled
为true
。 您可以设立私有网络,确保Atlas和 Key Vault 之间的所有流量都通过Azure的私有网络接口进行。 要学习;了解更多信息,请参阅为项目启用和设置私有端点连接。
为项目启用和设置私有端点连接
您可以使用Atlas用户界面和Atlas Administration API启用和设立私有端点。要启用私有网络并在 AKV 中设立私有端点,您必须执行以下操作:
完成为项目启用客户管理密钥的步骤。
要学习;了解更多信息,请参阅为项目启用客户管理的密钥。
批准私有端点。
您可以使用 Azure 用户界面, CLI 或 Terraform 以批准私有端点连接。
批准后, Atlas会自动迁移您启用了客户托管密钥的所有集群(包括允许使用公共互联网连接的现有集群),以仅使用私有端点连接。在迁移集群以使用私有端点连接后,您可以选择禁用对 AKV 的公共互联网访问权限。默认下,Azure上的所有新Atlas集群将仅使用活动的私有端点连接。Atlas仅在私有端点获批的区域为现有集群部署额外节点。
批准私有端点后, Atlas最多可能需要三分钟才能反映私有端点的当前状态。对于每个地区中的私有端点,Approve Endpoints 页面显示每个私有端点的状态。要学习;了解更多信息,请参阅查看私有端点及其状态。
启用专用网络。
向端点发送PATCH
请求,设立requirePrivateNetworking
标志值设置为true
。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2023-01-01+json" \ --header "Content-Type: application/vnd.atlas.2023-01-01+json" \ --include \ --request PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest/" \ --data ' { "azureKeyVault": { "azureEnvironment": "AZURE", "clientID": "632ff709-32a8-48a3-8224-30d2386fadaf", "enabled": true, "keyIdentifier": "https://EXAMPLEKeyVault.vault.azure.net/keys/EXAMPLEKey/d891821e3d364e9eb88fbd3d11807b86", "keyVaultName": "string", "requirePrivateNetworking": true, "resourceGroupName": "string", "secret": "string", "subscriptionID": "a39012fb-d604-4cd1-8841-77f705f3e6d5", "tenantID": "ee46317d-36a3-4472-a3dd-6549e901da0b" } }'
创建私有端点。
向您希望Atlas创建私有端点的 Azure POST
地区 端点 发送 请求。您必须为希望Atlas创建私有端点的每个地区发送单独的请求。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2023-01-01+json" \ --header "Content-Type: application/vnd.atlas.2023-01-01+json" \ --include \ --request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest/AZURE/privateEndpoints" \ --data ' { "regionName": "US_CENTRAL" }'
批准私有端点后,将应用以下限制:
Atlas仅在私有端点获批的地区创建所有新集群。
Atlas仅在私有端点获批的区域为现有集群部署额外节点。
检查请求的状态。
要检查私有端点的状态,请向encryptionAtRest
端点发送GET
请求。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2023-01-01+json" \ --header "Content-Type: application/vnd.atlas.2023-01-01+json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest/AZURE/privateEndpoints"
{ "links": [ { "href": "https://cloud.mongodb.com/api/atlas", "rel": "self" } ], "results": [ { "cloudProvider": "AZURE", "errorMessage": "string", "id": "24-hexadecimal-digit-string", "regionName": "string", "status": "INITIATING", "privateEndpointConnectionName": "string" } ], "totalCount": 0 }
批准私有端点后, Atlas最多可能需要三分钟才能反映私有端点的当前状态。 私有端点可能处于以下状态之一:
INITATING | 指示Atlas进程创建私有端点。 |
PENDING_ACCEPTANCE | 表示私有端点尚未获得批准。 您必须接受私有端点才能允许Atlas使用它。 |
活跃的 | 表示私有端点已获批准, Atlas可以或正在使用它。 |
PENDING_RECREATION | 表示私有端点被拒绝或删除, Atlas进程同一地区创建新的私有端点。 |
已失败 | 表示创建私有端点失败。 |
删除 | 表示Atlas进程删除私有端点。 |
为项目启用使用 集合扫描 的静态加密(通过专用网络)后,您可以为项目中的每个Atlas 集群启用使用 集合扫描 的静态 加密 。
为 Atlas 集群启用客户密钥管理
为项目启用客户管理的密钥后,您必须为包含要加密的数据的每个Atlas 集群启用客户密钥管理。 如果您为Atlas项目配置了私有端点连接, Atlas会自动迁移您已启用客户托管密钥的所有集群(包括允许使用公共互联网连接的现有集群),以仅使用私有端点连接。
注意
您必须拥有 Project Owner
角色才能为该项目中的集群启用客户密钥管理。
对于新集群,请在创建集群时将“管理自己的加密密钥”设置切换为Yes (如果尚未启用)。
对于现有群组:
禁用项目的客户管理密钥
要为项目禁用集合扫描 ,必须先删除与项目关联的所有私有端点,无论其状态如何。如果您尝试为与活动私有端点关联的项目禁用集合扫描 , Atlas会显示错误。
删除项目的所有私有端点后,必须先禁用项目中每个集群的客户密钥管理,然后再禁用项目的功能。
警告
在禁用Atlas项目中的客户密钥管理之前,请勿禁用或删除Atlas项目中的任何集群使用的任何AKV密钥。 如果Atlas无法访问权限AKV密钥,则任何经该密钥加密的数据都将无法访问。
为项目创建新端点
为项目启用并设置私有端点连接后,您可以随时从Atlas用户界面和Atlas Administration API添加其他端点。
批准私有端点。
您必须批准 AKV 中的每个端点才能使用私有端点。您可以使用Azure用户界面、CLI或 Terraform 批准私有端点连接。
对于每个地区中的私有端点,Approve Endpoints 页面显示每个私有端点的状态。批准私有端点后, Atlas最多可能需要三分钟才能反映私有端点的当前状态。要学习;了解有关私有端点状态的更多信息,请参阅查看私有端点及其状态。
创建私有端点。
向您希望Atlas创建私有端点的 Azure POST
地区 端点 发送 请求。您必须为希望Atlas创建私有端点的每个地区发送单独的请求。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2023-01-01+json" \ --header "Content-Type: application/vnd.atlas.2023-01-01+json" \ --include \ --request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest/AZURE/privateEndpoints" \ --data ' { "regionName": "US_CENTRAL" }'
批准与 AKV 的私有端点连接。
您可以使用 Azure 用户界面, CLI 或 Terraform 以批准私有端点连接。
检查请求的状态。
要检查私有端点的状态,请向encryptionAtRest
端点发送GET
请求。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2023-01-01+json" \ --header "Content-Type: application/vnd.atlas.2023-01-01+json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest/AZURE/privateEndpoints"
{ "links": [ { "href": "https://cloud.mongodb.com/api/atlas", "rel": "self" } ], "results": [ { "cloudProvider": "AZURE", "errorMessage": "string", "id": "24-hexadecimal-digit-string", "regionName": "string", "status": "INITIATING", "privateEndpointConnectionName": "string" } ], "totalCount": 0 }
批准私有端点后, Atlas最多可能需要三分钟才能反映私有端点的当前状态。 私有端点可能处于以下状态之一:
INITATING | 指示Atlas进程创建私有端点。 |
PENDING_ACCEPTANCE | 表示私有端点尚未获得批准。 您必须接受私有端点才能允许Atlas使用它。 |
活跃的 | 表示私有端点已获批准, Atlas可以或正在使用它。 |
PENDING_RECREATION | 表示私有端点被拒绝或删除, Atlas进程同一地区创建新的私有端点。 |
已失败 | 表示创建私有端点失败。 |
删除 | 表示Atlas进程删除私有端点。 |
拒绝或删除私有端点连接
您可以从Atlas用户界面和Atlas Administration API删除私有端点连接。
要删除私有端点,请向Atlas Administration API 端点发送 DELETE
请求,并指定项目的ID和要删除的私有端点的 ID。您可以通过向Atlas Administration API “为一个提供商端点返回一个私有端点服务”发送 GET
请求检索要删除的私有端点的ID 。
例子
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2024-10-23+json" \\ or a different version of the Atlas Admin API --header "Content-Type: application/json" \ --include \ --request DELETE "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest/AZURE/privateEndpoints/{endpointId}" \ --data ' { "cloudProvider": "AZURE", "regions": [ "string" ] }'
删除私有端点时,在Atlas删除私有端点时,私有端点会转换为 DELETING
状态。
如果您从Azure用户界面中删除或拒绝活动的私有端点, Atlas会自动尝试在同一地区中重新创建新的私有端点。您可以从Atlas用户界面和Atlas Administration API检查私有端点的状态。要学习;了解更多信息,请参阅查看私有端点及其状态。
当Atlas尝试创建新的私有端点时,您拒绝或删除的私有端点的状态将转换为PENDING_RECREATION
,并且Atlas尝试创建的新端点处于INITIATING
状态。 创建新的私有端点后,必须予以批准。
查看私有端点及其状态
您可以从Atlas用户界面和Atlas Administration API查看各个区域中的私有端点及其状态。
每个私有端点均可处于以下状态之一:
待批准 | 表示私有端点尚未获得批准。 您必须接受私有端点才能允许Atlas使用它。 |
活跃的 | 表示私有端点已获批准, Atlas可以或正在使用它。 |
已失败 | 表示创建私有端点失败。 |
您可以从Atlas AdministrationGET
API查看私有端点及其状态,方法是向Atlas Administration APIencryptionAtRest
获取所有端点或获取一个端点发送 请求,为此,您必须在路径。
例子
返回一个项目的所有私有端点
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/vnd.atlas.2024-10-23+json" \\ or a different version of the Atlas Admin API --header "Content-Type: application/json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/encryptionAtRest/AZURE/privateEndpoints/"
每个私有端点均可处于以下状态之一:
INITATING | 指示Atlas进程创建私有端点。 |
PENDING_ACCEPTANCE | 表示私有端点尚未获得批准。 您必须接受私有端点才能允许Atlas使用它。 |
活跃的 | 表示私有端点已获批准, Atlas可以或正在使用它。 |
PENDING_RECREATION | 表示私有端点被拒绝或删除, Atlas进程同一地区创建新的私有端点。 |
已失败 | 表示创建私有端点失败。 |
删除 | 表示Atlas进程删除私有端点。 |
禁用项目的私有端点连接
要禁用项目的私有端点连接,必须首先删除与项目关联的所有私有端点,无论其状态如何。如果项目与活动的私有端点关联, Atlas不会禁用项目的私有端点连接。
删除项目的所有私有端点后,您可以使用Atlas用户界面和Atlas Administration API禁用项目的私有端点连接。
要禁用私有端点连接,请向端点发送 PATCH
请求,并将 requirePrivateNetworking
布尔标志值设立为 false
。
例子
{ "azureKeyVault": { "azureEnvironment": "AZURE", "clientID": "632ff709-32a8-48a3-8224-30d2386fadaf", "enabled": true, "keyIdentifier": "https://EXAMPLEKeyVault.vault.azure.net/keys/EXAMPLEKey/d891821e3d364e9eb88fbd3d11807b86", "keyVaultName": "string", "requirePrivateNetworking": false, "resourceGroupName": "string", "secret": "string", "subscriptionID": "a39012fb-d604-4cd1-8841-77f705f3e6d5", "tenantID": "ee46317d-36a3-4472-a3dd-6549e901da0b" } }
撤销对加密密钥的访问权限
您可以从AKV中撤销 Atlas 对加密密钥的访问权限,以冻结您的数据。 当您撤销对加密密钥的访问权限时, Atlas会自动暂停您的集群。
轮换 Azure 密钥标识符
注意
开始之前,请学习;了解关于轮换Azure密钥标识符。
您必须在与Atlas项目关联的AKV中创建新密钥。 以下过程介绍如何通过在Atlas中指定新的密钥标识符来轮换Atlas项目密钥标识符。
更新 Azure 档案。
如果 Azure Key Vault 选择器尚未激活,请单击 Azure Key Vault 。
如果 Encryption Key 选择器尚未激活,请单击 Encryption Key 。
在 Key Identifier(密钥标识符)字段中输入 Azure 密钥标识符。
包括新加密密钥标识符的完整 URL。 例如:
https://mykeyvault.vault.azure.net/keys/AtlasKMSKey/a241124e3d364e9eb99fbd3e11124b23 重要
加密密钥必须属于为该项目配置的密钥保管库。单击 Key Vault 部分可查看当前为项目配置的密钥保管库。
单击 Update Credentials(连接)。
在密钥标识符轮换过程中,Atlas 在 Atlas 用户界面中显示横幅。在部署更改之前,请勿删除或禁用原始密钥标识符。
如果集群使用备份集群,在您验证没有快照使用过原始密钥密钥进行加密之前,请勿删除或禁用原始密钥标识符。
相关主题
如需在部署 Atlas 集群时使用“密钥管理”启用“静态加密”,请参阅“管理加密密钥”。
如需使用“密钥管理”对现有 Atlas 集群启用“静态加密”,请参阅“启用静态加密”。
如需进一步了解如何在 Atlas 中使用“密钥管理”进行静态加密,请参阅“使用客户密钥管理进行静态加密”。
要了解有关 MongoDB 静态加密的更多信息,请参阅 MongoDB Server 文档中的静态加密。
要了解有关使用云备份进行静态加密的更多信息,请参阅存储引擎和云备份加密。