对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

使用 Azure Key Vault 管理客户数密钥(无密钥身份验证)

注意

此功能不适用于以下任何部署:

  • 免费集群

  • Flex 集群

要学习;了解更多信息,请参阅限制。

Atlas支持使用带有静态加密 (EAR) 的Azure Key Vault ( AKV ) 进行无密钥身份验证。使用此模型,您无需向Atlas提供长期静态凭证(租户ID、客户端ID和客户端密钥)。相反,您可以在Azure租户中授权 Atlas 托管的Azure服务主体,然后Atlas使用Azure Active Directory ( Azure AD) 颁发的短期 OAuth 2.0访问权限令牌向 AKV 进行身份验证。

注意

MongoDB Atlas责任共担模型定义了MongoDB及其客户在维护安全和弹性数据环境方面的互补职责。在此框架下, MongoDB管理根本的平台的安全性和操作完整性,而客户则负责其特定部署的配置、管理和数据策略。有关安全性和卓越运营之间所有权的详细划分,请参阅责任共担模型。

这种方法:

  • 无需在Atlas中创建、存储、轮换客户端密钥。

  • 使用Azure RBAC 或 Key Vault访问权限策略在Azure中完全集中访问权限控制。

  • 保留集群和应用程序的现有 EAR 行为。仅身份验证机制发生变化

Secretless EAR 依赖Azure AD 和Azure Key Vault作为安全边界。Atlas不存储可重用的客户托管密钥,而是在运行时使用Azure颁发的令牌。访问是使用最小权限原则执行的,您可以删除Azure权限以立即撤销这些权限。

Atlas使用直接角色分配给 Atlas 托管的服务主体,以实现更简单、安全的身份验证模型。

要为MongoDB项目启用使用AKV的客户托管密钥,您必须具备:

  • M10 或更大的集群。

  • Azure帐户,以及AKV中的加密密钥。

    要学习;了解如何配置这些Azure组件,请参阅Azure文档。

    Atlas 在为 Atlas 项目中的集群启用静态加密时使用这些资源。

  • Azure中的以下权限:

  • Atlas中要启用静态加密的项目的“项目所有者”访问权限。

要使用存储在 AKV for EAR 中的客户托管密钥,Atlas 托管的服务主体必须有权对特定 Key Vault 密钥执行加密操作。

所需的关键权限包括:

  • get

  • encrypt

  • decrypt

您应尽可能缩小权限范围,并使用以下选项之一授予权限:

要学习;了解详情,请参阅快速入门:添加企业应用程序。

要使用无密钥身份验证配置静态加密 (EAR),您必须:

  1. 创建 Atlas 托管的Azure服务主体。

  2. 授予服务主体对 Key Vault 密钥的访问权限。

  3. 配置 EAR 以使用服务主体。

在租户中为 Atlas 拥有的Azure应用程序创建Azure服务主体,并使用 Cloud Provider Access API将其注册到Atlas 。 Atlas返回启用EAR 时使用的 roleId。

Atlas使用以下Azure应用程序标识:

atlasAzureAppId: 9efedfcc-2eca-4b27-a613-0cad1e114cb7
1

运行以下命令,检索服务主体所在资源的租户ID :

az account show --query tenantId -o tsv
2

如果Atlas应用程序已存在服务主体,运行以下命令进行查找:

az ad sp list --filter "appId eq '9efedfcc-2eca-4b27-a613-0cad1e114cb7'"

如果不存在,运行以下命令进行创建:

az ad sp create --id 9efedfcc-2eca-4b27-a613-0cad1e114cb7

如果此命令返回权限被拒绝错误,请确认您的Microsoft Entra ID帐户具有先决条件中列出的角色之一。

从输出中复制 id字段,即Atlas所需的服务主体对象ID 。

3

使用 Cloud Provider Access API:

终结点:

POST /api/atlas/v2/groups/{groupId}/cloudProviderAccess

请求正文示例:

{
"providerName": "AZURE",
"tenantId": "<azure-tenant-id>",
"servicePrincipalId": "<service-principal-object-id>",
"atlasAzureAppId": "9efedfcc-2eca-4b27-a613-0cad1e114cb7"
}

Atlas预配和管理服务主体,并返回 id 值,这是配置 EAR 时所需的 roleId。

授权 Atlas 托管的服务主体对用于 EAR 的 Key Vault 密钥执行加密操作。

您可以使用Azure RBAC 或 Key Vault访问权限策略授予访问权限。

要使用Azure RBAC 授予访问权限,请执行以下操作:

1

运行以下命令:

az role assignment create \
--assignee-object-id "$SERVICE_PRINCIPAL_OBJECT_ID" \
--assignee-principal-type ServicePrincipal \
--role "Reader" \
--scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME"
2

运行以下命令:

az role assignment create \
--assignee-object-id "$SERVICE_PRINCIPAL_OBJECT_ID" \
--assignee-principal-type ServicePrincipal \
--role "Key Vault Crypto User" \
--scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME"

注意

您还可以使用自定义角色,只要它授予等效的密钥权限。

如果您的密钥保管库使用了访问权限策略,运行以下命令直接授予密钥权限:

az keyvault set-policy \
--subscription "$SUBSCRIPTION_ID" \
--resource-group "$RESOURCE_GROUP" \
--name "$KEY_VAULT_NAME" \
--object-id "$SERVICE_PRINCIPAL_OBJECT_ID" \
--key-permissions get encrypt decrypt wrapKey unwrapKey

在Azure中注册并授权服务主体后,使用 Cloud Provider Access API返回的 roleId更新EAR 配置。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Database & Network Access。

  4. 在侧边栏中,单击 Advanced。

    显示“高级”页面。

2
3
4

Atlas支持两种 AKV身份验证方法:

5

订阅 ID

输入密钥保管库的 Subscription ID(订阅 ID)。

资源组名称

输入包含密钥保管库的Azure Resource Group的Resource Group名称。

Key Vault 名称

输入密钥保管库的名称。确保密钥保管库具有必要的访问策略。要学习;了解更多信息,请参阅所需的访问权限。

注意

启用并设立与 AKV 的私有端点连接后,您无法在此处修改 AKV 配置。

6

密钥标识符

输入在密钥库中创建的密钥的完整 URL。

重要提示:密钥标识符必须以完整的Azure通用格式提供:

https://{keyvault-name}.vault.azure.net/{object-type}/{object-name}

您可以附加 /{object-version}。但是,我们建议您省略版本,以启用自动解析到最新版本的功能。

7

要学习;了解更多信息,请参阅为项目启用和设置私有端点连接

8

如果使用Atlas Administration API将Atlas配置为使用Azure Private Link与 AKV 通信,以确保Atlas和 Key Vault 之间的所有流量都通过Azure的专用网络接口进行,Atlas会将 Require Private Networking 状态设置为 Active。如果状态为 Inactive,并且您希望Atlas使用 AKV 的私有端点连接,则可以选择完成为项目启用和设置私有端点连接的步骤。

9

在加密过程中,Atlas 会在 Atlas 控制台中显示横幅。

在此更新后, Atlas使用短期Azure AD 令牌而不是静态凭证对 AKV 进行身份验证。

如果您的项目已使用静态凭证(tenantId、clientId、secret),则无需集群即可迁移。

  1. 创建 Atlas 托管的服务主体。

  2. 授予密钥保管库权限。

  3. 使用新的 roleId 修补 EAR 配置。

如果验证失败, Atlas会继续使用静态凭证。

如果验证成功, Atlas会删除存储的静态凭证,并且 roleId 成为身份验证的可信来源。

如果您的集群使用专用网络, Atlas会从数据节点异步验证“密钥保管库”访问权限。

  • 接受 PATCH请求时,不会立即完成验证。

  • 应用配置后,数据节点会验证 Key Vault访问权限。

在使用 roleId 修补 EAR 之前,请确保所有密钥保管库权限均已正确配置。访问权限权限配置错误可能导致数据节点验证失败,最终可能扰乱 EAR 操作并导致集群关闭。

在修补 EAR 之前,请验证您的服务主体是否具有所需的密钥保管库权限。

运行以下命令:

az role assignment list \
--assignee "$SERVICE_PRINCIPAL_OBJECT_ID" \
--scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME"

确认分配的角色授予密钥权限,例如 get、encrypt 和 decrypt。

运行以下命令:

az keyvault show \
--name "$KEY_VAULT_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query "properties.accessPolicies"

确认服务主体已列出并包含所需的密钥权限。