本文介绍如何为 Azure Cosmos DB for MongoDB vCore 配置 Microsoft Entra ID 身份验证。 本指南中的步骤旨在将现有的 Azure Cosmos DB for MongoDB vCore 群集配置为使用 Microsoft Entra ID 身份验证,与用户当前登录的个人身份账号结合使用。 Microsoft Entra ID 身份验证允许使用组织的现有标识安全无缝地访问数据库。 本指南介绍设置身份验证、注册用户或服务主体以及验证配置的步骤。
先决条件
- 现有的 Azure Cosmos DB for MongoDB (vCore) 群集。
-
- 如果想要在本地运行 CLI 引用命令,请使用
az login
该命令登录到 Azure CLI。
- 如果想要在本地运行 CLI 引用命令,请使用
获取登录标识元数据
首先,获取当前已登录身份的唯一标识符。
使用
az ad signed-in-user
获取当前登录帐户的详细信息。az ad signed-in-user show
该命令将输出包含各种字段的 JSON 响应。
{ "@odata.context": "<https://microsoftgraph.chinacloudapi.cn/v1.0/$metadata#users/$entity>", "businessPhones": [], "displayName": "Kai Carter", "givenName": "Kai", "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "jobTitle": "Senior Sales Representative", "mail": "<kai@adventure-works.com>", "mobilePhone": null, "officeLocation": "Redmond", "preferredLanguage": null, "surname": "Carter", "userPrincipalName": "<kai@adventure-works.com>" }
记录
id
属性的值。 此属性是主体的唯一标识符,有时称为 主体 ID。 在接下来的步骤中将使用此值。
配置现有群集以进行身份验证
创建 Azure Cosmos DB for MongoDB vCore 群集时,群集默认配置为本机身份验证。 使用 Azure CLI 配置现有群集以支持Microsoft Entra ID 身份验证。 然后,将群集配置为将当前用户映射到您的已登录标识。
现在,使用
authConfig
从现有群集中获取az resource show
属性。az resource show \ --resource-group "<resource-group-name>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --query "properties.authConfig" \ --latest-include-preview
观察输出。 如果未配置 Microsoft Entra ID 身份验证,输出中仅包含数组
NativeAuth
中的allowedModes
值。{ "allowedModes": [ "NativeAuth" ] }
然后,使用 HTTP
PATCH
操作通过将MicrosoftEntraID
值添加到allowedModes
来更新现有群集。az resource patch \ --resource-group "<resource-group-name>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --properties '{"authConfig":{"allowedModes":["MicrosoftEntraID","NativeAuth"]}}' \ --latest-include-preview
小窍门
如果希望直接使用
az rest
Azure REST API,请使用以下替代命令:az rest \ --method "PUT" \ --url "https://management.chinacloudapi.cn/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>?api-version=2025-04-01-preview" \ --body '{"location":"<cluster-region>","properties":{"authConfig":{"allowedModes":["MicrosoftEntraID","NativeAuth"]}}}'
再次使用
az resource show
验证配置是否成功,并观察整个群集的配置,其中包括properties.authConfig
。az resource show \ --resource-group "<resource-group-name>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --latest-include-preview
{ ... "properties": { ... "authConfig": { "allowedModes": [ "MicrosoftEntraID", "NativeAuth" ] }, ... }, ... }
使用
az resource create
创建一个新的Microsoft.DocumentDB/mongoClusters/users
类型的资源。 通过将父群集的名称与您的身份的主体 ID连接起来来生成资源的名称。az resource create \ --resource-group "<resource-group-name>" \ --name "<cluster-name>/users/<principal-id>" \ --resource-type "Microsoft.DocumentDB/mongoClusters/users" \ --location "<cluster-region>" \ --properties '{"identityProvider":{"type":"MicrosoftEntraID","properties":{"principalType":"User"}},"roles":[{"db":"admin","role":"dbOwner"}]}' \ --latest-include-preview
小窍门
例如,如果父资源已命名
example-cluster
,并且主体 ID 为aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
,则资源的名称为:"example-cluster/users/aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
此外,如果要注册服务主体(如托管标识),则会将
identityProvider.properties.principalType
属性的值替换为ServicePrincipal
。最后,如果希望直接使用
az rest
Azure REST API,请使用以下替代命令:az rest \ --method "PUT" \ --url "https://management.chinacloudapi.cn/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>/users/<principal-id>?api-version=2025-04-01-preview" \ --body '{"location":"<cluster-region>","properties":{"identityProvider":{"type":"MicrosoftEntraID","properties":{"principalType":"User"}},"roles":[{"db":"admin","role":"dbOwner"}]}}'
注释
Microsoft Entra ID 用户添加到群集后,将成为同一群集上已定义的本机 DocumentDB 用户之外的附加用户。 使用至少一个内置本机 DocumentDB 用户创建 Azure Cosmos DB for MongoDB vCore 群集。 完成群集预配后,可以添加更多本机 DocumentDB 用户。
连接至群集
可以使用首选语言的驱动程序中的连接 URI 或自定义设置对象连接到群集。 在任一选项中,要连接到副本集,必须将 模式 设置为 mongodb+srv
。
主机位于*.global.mongocluster.cosmos.azure.com
或*.mongocluster.cosmos.azure.com
域,具体取决于使用的是当前群集还是全局读写终结点。
+srv
方案和 *.global.*
主机确保您的客户端在多群集配置中,即使发生区域交换操作,也可以动态连接到适当的可写群集。 在单群集配置中,可以不分青红皂白地使用任一主机。
还必须启用 tls
设置。 其余建议的设置是最佳实践配置。
选项 | 价值 |
---|---|
方案 | mongodb+srv |
主机 |
<cluster-name>.global.mongocluster.cosmos.azure.com 或 <cluster-name>.mongocluster.cosmos.azure.com |
tls |
true |
authMechanism |
MONGODB-OIDC |
retrywrites |
false |
maxIdleTimeMS |
120000 |
全球
mongodb+srv://<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
群集
mongodb+srv://<cluster-name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000