Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DocumentDB поддерживает идентификатор Microsoft Entra, а также собственную проверку подлинности DocumentDB. Каждый кластер создается с включенной собственной проверкой подлинности и одним встроенным администратором.
Управление доступом на основе ролей предоставляет централизованный механизм назначения и обеспечения соблюдения разрешений с помощью Microsoft Entra ID, гарантируя, что только авторизованные личности могут выполнять операции на ваших кластерах. Этот подход упрощает управление, поддерживает принципы наименьших привилегий и упрощает аудит, помогая организациям поддерживать целостность операций и соответствие требованиям по мере роста развертываний. Управление доступом в Azure DocumentDB включает два различных уровня:
- Доступ на основе ролей Azure для управления кластером в качестве ресурса Azure (например, чтения метаданных, управления правилами брандмауэра и настройки частных конечных точек)
- Доступ DocumentDB для чтения и записи данных в базах данных и коллекциях в кластере.
Включите идентификатор Microsoft Entra, чтобы разрешить субъектам Microsoft Entra (пользователям, субъектам-службам или управляемым удостоверениям) проходить проверку подлинности в кластере. Проверка подлинности идентификатора Microsoft Entra реализована с помощью OpenID Connect (OIDC). Клиенты предоставляют драйверу MongoDB OIDC токен доступа, выданный Entra. Кластер должен иметь включенную встроенную аутентификацию; поддерживаемые конфигурации: только встроенная аутентификация, только проверка подлинности с Microsoft Entra ID, или встроенная аутентификация и проверка подлинности с Microsoft Entra ID.
Замечание
Вы можете включить или изменить методы проверки подлинности в кластере в любое время после подготовки. Изменение методов проверки подлинности не требует перезапуска кластера и не является неразрывным. При создании кластера необходимо включить родную аутентификацию DocumentDB. После завершения подготовки кластера можно отключить нативную аутентификацию.
Преимущества использования идентификатора Microsoft Entra для проверки подлинности:
- Единообразная идентификация и вход между службами Azure.
- Централизованное управление учетными данными, политиками паролей и сменой.
- Поддержка методов без пароля и многофакторной проверки подлинности из идентификатора Microsoft Entra.
- Проверка подлинности на основе маркеров для приложений, устранение сохраненных паролей.
Если включена проверка подлинности идентификатора Microsoft Entra, вы можете зарегистрировать один или несколько субъектов Microsoft Entra в качестве административных или неадминистрирующих пользователей в кластере. Зарегистрированные субъекты становятся ресурсами Microsoft.DocumentDB/mongoClusters/users Azure и реплицируются в базу данных; сопоставление этих субъектов с ролями базы данных MongoDB предоставляет соответствующие привилегии базы данных. Эта форма проверки подлинности поддерживает несколько типов субъектов, включая; пользователи, субъекты-службы (приложения), назначаемые пользователем и назначаемые системой управляемые удостоверения.
Замечание
Вы можете настроить несколько удостоверений и типов удостоверений Microsoft Entra в качестве администраторов кластера одновременно. Типы удостоверений личности Microsoft Entra включают, но не ограничиваются следующими:
- Человеческие идентичности
- Управляемые идентификаторы, назначенные пользователем
- Управляемые удостоверения, назначаемые системой
- Идентичности рабочих нагрузок
Все типы удостоверений могут быть администраторами одновременно.
Администраторы имеют полные привилегии для управления кластером и его данными. Неадминистрационные пользователи могут быть добавлены для текущих рабочих задач, для которых не требуются права администратора. Неадминистративные пользователи обычно занимают ограниченные роли, такие как доступ только для чтения или доступа для чтения и записи к определенным базам данных, но не имеют возможности выполнять административные действия на уровне кластера.
Прежде чем использовать эту функцию, ознакомьтесь со следующими рекомендациями.
- Методы проверки подлинности в основном кластере и кластере реплики управляются независимо.
- Субъекты Microsoft Entra сохраняются в метаданных кластера. Если субъект удаляется из идентификатора Microsoft Entra, соответствующий пользователь кластера остается, но больше не может получить новые маркеры. Существующие маркеры остаются действительными до истечения срока их действия (обычно до 90 минут после выдачи маркера).
- Чтобы немедленно отозвать доступ, удалите субъект из кластера (удалите
users/<principal-id>ресурс) и удалите все связанные роли базы данных; администраторы базы данных должны обрабатывать передачу владения или очистку для удаленных субъектов.
Это важно
Проверка подлинности маркера доступа и вопросы безопасности:
Время существования токена доступа, выданного Microsoft Entra ID, представляет максимально возможное окно атаки, если токен скомпрометирован. Если злоумышленник получает действительный маркер доступа и устанавливает подключение, система может продолжать принимать запросы с помощью этого маркера до истечения срока действия, даже если связанный маркер обновления отозван или учетная запись пользователя отключена.
Рекомендуется следовать рекомендациям, как описано, отменять маркер доступа в Entra
Предпосылки
подписка Azure
- Если у вас нет подписки Azure, создайте бесплатную учетную запись.
Существующий кластер Azure DocumentDB
- Если у вас нет кластера, создайте новый кластер
- Одно или несколько существующих удостоверений в идентификаторе Microsoft Entra.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Terraform 1.2.0 или более поздней версии.
Управление контроль доступа на основе ролей в Azure
Управление доступом на основе ролей Azure относится к возможности управления ресурсами для службы Azure без управления данными. Например, доступ на основе ролей для кластеров Azure DocumentDB может включать возможность:
- Читать все учетные записи и метаданные ресурсов
- Чтение и восстановление строк подключения
- Управление базами данных и коллекциями
- Изменение свойств учетной записи
Azure DocumentDB поддерживает управление доступом на основе ролей Azure для mongoCluster типа ресурса. Следующие действия для типа ресурсов доступны в управлении доступом на основе ролей Azure для mongoCluster отдельных назначений и создания роли управления доступом на основе ролей.
| Description | |
|---|---|
Microsoft.DocumentDB/mongoClusters/read |
Считывает mongoCluster ресурс или выводит список всех mongoCluster ресурсов. |
Microsoft.DocumentDB/mongoClusters/write |
Создайте или обновите свойства или теги указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/delete |
Удаляет указанный mongoCluster ресурс. |
Microsoft.DocumentDB/mongoClusters/PrivateEndpointConnectionsApproval/action |
Управление подключением к частной конечной точке mongoCluster ресурса |
Microsoft.DocumentDB/mongoClusters/listConnectionStrings/action |
Список строк подключения для заданного mongoCluster ресурса |
Microsoft.DocumentDB/mongoClusters/firewallRules/read |
Считывает правило брандмауэра или перечисляет все правила брандмауэра для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/firewallRules/write |
Создайте или обновите правило брандмауэра для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/firewallRules/delete |
Удаляет существующее правило брандмауэра для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/read |
Считывает прокси частного подключения конечной точки для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/write |
Создайте или обновите прокси-сервер подключения частной конечной точки для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/delete |
Удаляет существующий прокси-сервер подключения к частной конечной точке для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/validate/action |
Проверяет прокси-сервер подключения частной конечной точки для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/read |
Считывает подключение к частной конечной точке или выводит список всех подключений к частной конечной точке для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/write |
Создайте или обновите подключение частной конечной точки для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/delete |
Удаляет существующее подключение частной конечной точки для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/privateLinkResources/read |
Считывает ресурс приватного канала или выводит список всех ресурсов приватного канала для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/users/read |
Считывает пользователя или отображает список всех пользователей для указанного mongoCluster ресурса. |
Microsoft.DocumentDB/mongoClusters/users/write |
Создайте или обновите пользователя в указанном mongoCluster ресурсе. |
Microsoft.DocumentDB/mongoClusters/users/delete |
Удаляет существующего пользователя для указанного mongoCluster ресурса. |
Откройте новый терминал.
Войдите в Azure CLI.
Используйте
az group showдля получения метаданных для текущей группы ресурсов.az group show \ --name "<name-of-existing-resource-group>"Просмотрите выходные данные предыдущей команды. Запишите значение
idсвойства для этой группы ресурсов, так как оно необходимо использовать на следующем шаге.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }Замечание
В этом примере значение
idбудет/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера. Эта строка является усеченным примером выходных данных.Создайте файл JSON с именем role-definition.json. В файле создайте это определение ресурса, указывающее значения, перечисленные здесь. В списке
AssignableScopesдобавьтеidсвойство группы ресурсов, записанной на предыдущем шаге.{ "Name": "Azure DocumentDB RBAC Owner", "IsCustom": true, "Description": "Can perform all Azure role-based access control actions for Azure DocumentDB clusters.", "Actions": [ "Microsoft.DocumentDb/mongoClusters/*" ], "AssignableScopes": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example" ] }Замечание
В этом примере используется
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-exampleзначение, записанное на предыдущем шаге. Фактический идентификатор ресурса может отличаться.Создайте новое определение роли с помощью
az role definition create. Используйте файлrole-definition.json в качестве входных данных для аргумента--role-definition.az role definition create \ --role-definition role-definition.jsonПросмотрите выходные данные команды создания определения. Выходные данные содержат уникальный идентификатор определения роли в свойстве
id. Запишите это значение, так как оно необходимо использовать на шаге назначения далее в этом руководстве.{ "assignableScopes": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example" ], "description": "Can perform all Azure role-based access control actions for Azure DocumentDB clusters.", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1", "name": "e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5", "permissions": [ { "actions": [ "Microsoft.DocumentDb/*" ] } ], "roleName": "Azure DocumentDB RBAC Owner", "roleType": "CustomRole" }Замечание
В этом примере значение
idбудет/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера. Этот пример является подмножеством типичного JSON, выводимого развертыванием для ясности.
Откройте новый терминал.
Войдите в Azure CLI.
Создайте новый файл Bicep для определения роли. Назовите файл control-plane-role-definition.bicep. Добавьте эти
actionsв определение.Description Microsoft.DocumentDb/mongoClusters/*Включает все возможные действия. metadata description = 'Create RBAC definition for Azure role-based access control access to Azure DocumentDB.' @description('Name of the role definition.') param roleDefinitionName string = 'Azure DocumentDB RBAC Owner' @description('Description of the role definition.') param roleDefinitionDescription string = 'Can perform all Azure role-based access control actions for Azure DocumentDB clusters.' resource definition 'Microsoft.Authorization/roleDefinitions@2022-04-01' = { name: guid(subscription().id, resourceGroup().id, roleDefinitionName) scope: resourceGroup() properties: { roleName: roleDefinitionName description: roleDefinitionDescription type: 'CustomRole' permissions: [ { actions: [ 'Microsoft.DocumentDb/mongoClusters/*' ] } ] assignableScopes: [ resourceGroup().id ] } } output definitionId string = definition.idРазверните шаблон Bicep с помощью
az deployment group create. Укажите имя шаблона Bicep и группы ресурсов Azure.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --template-file control-plane-role-definition.bicepПросмотрите выходные данные развертывания. Выходные данные содержат уникальный идентификатор определения роли в свойстве
properties.outputs.definitionId.value. Запишите это значение, так как оно необходимо использовать на шаге назначения далее в этом руководстве.{ "properties": { "outputs": { "definitionId": { "type": "String", "value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1" } } } }Замечание
В этом примере значение
idбудет/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера. Этот пример является подмножеством типичного JSON, выводимого развертыванием для ясности.Создайте новый файл Bicep для определения вашего назначения роли. Назовите файл control-plane-role-assignment.bicep.
metadata description = 'Assign RBAC role for Azure role-based access control access to Azure DocumentDB.' @description('Id of the role definition to assign to the targeted principal in the context of the cluster.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the cluster.') param identityId string resource assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId) scope: resourceGroup() properties: { roleDefinitionId: roleDefinitionId principalId: identityId } }Создайте файл параметров Bicep с именем control-plane-role-assignment.
bicepparamВ этом файле параметров, назначьте параметруroleDefinitionIdранее записанные идентификаторы определения ролей, а параметруidentityId– уникальный идентификатор вашей учетной записи.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'Разверните этот шаблон Bicep с помощью
az deployment group create.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters control-plane-role-assignment.bicepparam \ --template-file control-plane-role-assignment.bicep
Войдите на портал Azure (https://portal.azure.com).
Введите группу ресурсов в глобальной строке поиска.
В службах выберите группы ресурсов.
В области групп ресурсов выберите существующую группу ресурсов.
На панели группы ресурсов выберите управление доступом (IAM) в служебном меню.
В области управления доступом (IAM) нажмите кнопку "Добавить". Затем нажмите кнопку "Добавить настраиваемую роль".
В области "Основные сведения" настройте следующие параметры и нажмите кнопку "Далее".
Ценность Имя настраиваемой роли Azure DocumentDB RBAC OwnerОписание Can perform all Azure role-based access control actions for Azure DocumentDB clusters.Базовые разрешения Начало с нуля В области "Разрешения" выберите "Добавить разрешения". Затем найдите
DocumentDBв диалоговом окне разрешений. Наконец, выберите параметр Microsoft.DocumentDB/mongoClusters .В диалоговом окне разрешений выберите все действия для
Microsoft.DocumentDB/mongoClusters. Затем нажмите кнопку "Добавить", чтобы вернуться в область "Разрешения".Вернитесь в область разрешений , просмотрите список разрешений. Затем нажмите кнопку "Проверить и создать".
В области "Просмотр и создание " просмотрите указанные параметры для определения новой роли. Наконец, нажмите кнопку "Создать".
Дождитесь завершения создания определения роли на портале.
В области управления доступом (IAM) выберите "Добавить " и "Добавить назначение ролей".
На панели ролей найдите
Azure DocumentDBи выберите роль владельца RBAC в Azure DocumentDB, созданную ранее в этом руководстве. Затем выберите Далее.Подсказка
При необходимости можно отфильтровать список ролей, чтобы включить только пользовательские роли.
В области "Участники" выберите параметр "Выбрать участников". В диалоговом окне "Участники" выберите удостоверение, которое вы хотите предоставить этому уровню доступа для кластеров Azure DocumentDB, а затем используйте параметр Select , чтобы подтвердить выбор.
Вернитесь в область "Участники", просмотрите выбранных участников и выберите "Проверить + назначить".
В области "Проверка и назначение " просмотрите указанные параметры для нового назначения ролей. Наконец, нажмите кнопку "Проверить и назначить".
Подождите, пока портал завершит создание назначения роли.
Откройте новый терминал.
Войдите в Azure CLI.
Проверьте целевую подписку Azure.
az account showСоздайте файл Terraform, чтобы определить определение роли. Назовите файл control-plane-role-definition.
tf. Добавьте этиactionsв определение.Description Microsoft.DocumentDb/mongoClusters/*Включает все возможные действия. variable "role_definition_name" { type = string description = "Name of the role definition." default = "Azure DocumentDB RBAC Owner" } variable "role_definition_description" { type = string description = "Description of the role definition." default = "Can perform all Azure role-based access control actions for Azure DocumentDB clusters." } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } data "azurerm_client_config" "current" {} data "azurerm_resource_group" "existing" { name = "<name-of-existing-resource-group>" } resource "azurerm_role_definition" "control_plane" { name = var.role_definition_name scope = data.azurerm_resource_group.existing.id description = var.role_definition_description permissions { actions = [ "Microsoft.DocumentDb/mongoClusters/*" ] } assignable_scopes = [ data.azurerm_resource_group.existing.id ] } output "definition_id" { value = azurerm_role_definition.control_plane.id }Инициализация развертывания Terraform.
terraform init --upgradeСоздайте план выполнения для определения роли и сохраните его в файле с именем role-definition.tfplan.
ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --out "role-definition.tfplan"Примените план выполнения для развертывания определения роли в Azure.
ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-definition.tfplan"Просмотрите выходные данные развертывания. Выходные данные содержат уникальный идентификатор определения роли в свойстве
definition_id. Запишите это значение, так как оно необходимо использовать на шаге назначения далее в этом руководстве.Создайте файл Terraform для определения назначения роли. Назовите файл control-plane-role-assignment.
tf.variable "role_definition_id" { type = string description = "Id of the role definition to assign to the targeted principal in the context of the cluster." } variable "identity_id" { type = string description = "Id of the identity/principal to assign this role in the context of the cluster." } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } data "azurerm_resource_group" "existing" { name = "<name-of-existing-resource-group>" } resource "azurerm_role_assignment" "control_plane" { scope = data.azurerm_resource_group.existing.id role_definition_id = var.role_definition_id principal_id = var.identity_id }Создайте файл переменных Terraform с именем control-plane-role-assignment.tfvars. В этом файле переменных, назначьте ранее записанные идентификаторы определения ролей переменной
role_definition_idи уникальный идентификатор вашего удостоверения переменнойidentity_id.role_definition_id = "<id-of-new-role-definition>" identity_id = "<id-of-existing-identity>"Инициализируйте и примените эту конфигурацию Terraform.
terraform init --upgradeARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --var-file="control-plane-role-assignment.tfvars" --out "role-assignment.tfplan"ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-assignment.tfplan"
Включение проверки подлинности идентификатора Microsoft Entra
При создании кластера Azure DocumentDB кластер настроен исключительно для использования собственной проверки подлинности по умолчанию. Чтобы включить проверку подлинности с помощью идентификатора Microsoft Entra, включите метод проверки подлинности Microsoft Entra ID и добавьте удостоверения идентификаторов Microsoft Entra в кластер.
Получите сведения об учетной записи, вошедшей в систему, с помощью
az ad signed-in-user.az ad signed-in-user showКоманда выводит ответ JSON, содержащий различные поля.
{ "@odata.context": "<https://graph.microsoft.com/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поля. В этом примере это значение будетaaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Это значение можно использовать в различных сценариях для предоставления разрешений на управление доступом на основе ролей текущей учетной записи ресурсам Azure. В качестве альтернативы, если используется управляемое удостоверение, можно получитьidдля этой управляемой учетной записи с помощью командыaz identity show.Включите проверку подлинности Microsoft Entra ID в кластере, обновив ресурс кластера и добавив
MicrosoftEntraIDв массивauthConfig.allowedModes.az resource patch \ --resource-group "<resource-group>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --properties '{"authConfig":{"allowedModes":["MicrosoftEntraID","NativeAuth"]}}' \ --latest-include-previewЗамечание
Замените
<resource-group>и<cluster-name>собственными значениями.Убедитесь в том, что изменение применено, считывая свойство
authConfigна кластере с помощьюaz resource show.az resource show \ --resource-group "<resource-group>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --query "properties.authConfig" \ --latest-include-previewЗамечание
Выходные данные должны содержать
allowedModesсписок. Если идентификатор Microsoft Entra был включен успешно, массив содержит обаNativeAuthиMicrosoftEntraID.
(Необязательно) Получите уникальный идентификатор учетной записи Microsoft Entra, которую вы планируете зарегистрировать в кластере. Его можно получить с помощью Azure CLI с помощью одной из следующих команд:
Текущее удостоверение для входа
az ad signed-in-user showДругая человеческая идентичность с дружественным именем
az ad user show \ --id "<user-alias-and-domain>"Service principal с использованием идентификатора приложения
az ad sp show \ --id "<application-id>"Управляемое удостоверение с помощью группы ресурсов и имени
az identity show \ --resource-group "<resource-group>" \ --name "<managed-identity-name>"
Создайте небольшой шаблон Bicep, который обновляет кластер
authConfig, чтобы интегрировать Microsoft Entra ID (сохраните какenable-entra-id.bicep):param clusterName string param location string = resourceGroup().location resource cluster 'Microsoft.DocumentDB/mongoClusters@2025-09-01' = { name: clusterName location: location properties: { authConfig: { allowedModes: [ 'MicrosoftEntraID' 'NativeAuth' ] } } }Разверните шаблон для обновления кластера:
az deployment group create \ --resource-group "<resource-group>" \ --template-file enable-entra-id.bicep \ --parameters clusterName="<cluster-name>"Проверьте свойство
authConfigна кластере с помощьюaz resource show.az resource show \ --resource-group "<resource-group>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --query "properties.authConfig" \ --latest-include-previewЗамечание
Выходные данные должны содержать
allowedModesсписок. Если идентификатор Microsoft Entra был включен успешно, массив содержит обаNativeAuthиMicrosoftEntraID.
На домашней панели портала Azure найдите и выберите параметр идентификатора Microsoft Entra .
Подсказка
Если этот параметр не указан, выберите "Дополнительные службы" и найдите идентификатор Microsoft Entra с помощью поискового термина "Entra".
В области "Обзор " для клиента Идентификатора Microsoft Entra выберите "Пользователи " в разделе "Управление " меню службы.
В списке пользователей выберите пользователя, о котором вы хотите получить больше сведений.
Замечание
На этом снимке экрана показан примерный пользователь Kai Carter с основным элементом
kai@adventure-works.com.В области сведений для конкретного пользователя обратите внимание на значение свойства идентификатора объекта .
Подсказка
Запишите значение свойства Object ID . В этом примере это значение будет
aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Это значение можно использовать в различных сценариях для предоставления разрешений на управление доступом на основе ролей текущей учетной записи ресурсам Azure. Действия аналогичны, если вы используете управляемое удостоверение.Перейдите к существующему ресурсу кластера Azure DocumentDB.
В меню кластера в разделе "Параметры" выберите "Проверка подлинности".
В разделе "Методы проверки подлинности " выберите Native DocumentDB и Microsoft Entra ID , чтобы включить проверку подлинности Microsoft Entra ID вместе с собственной проверкой подлинности.
Нажмите кнопку "Сохранить", чтобы сохранить изменение.
В разделе "Методы проверки подлинности " теперь должен быть указан как nativeAuth , так и MicrosoftEntraID в качестве включенных методов.
(Необязательно) Получите уникальный идентификатор учетной записи Microsoft Entra, которую вы планируете зарегистрировать в кластере. Его можно получить с помощью Azure CLI с помощью одной из следующих команд:
Текущее удостоверение для входа
az ad signed-in-user showДругая человеческая идентичность с дружественным именем
az ad user show \ --id "<user-alias-and-domain>"Service principal с использованием идентификатора приложения
az ad sp show \ --id "<application-id>"Управляемое удостоверение с помощью группы ресурсов и имени
az identity show \ --resource-group "<resource-group>" \ --name "<managed-identity-name>"
Создайте файл конфигурации Terraform, чтобы включить проверку подлинности идентификатора Microsoft Entra в существующем кластере. Сохраните файл как enable-entra-id.
tf:variable "cluster_name" { type = string description = "Name of the existing cluster" } variable "resource_group_name" { type = string description = "Name of the existing resource group" } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } data "azurerm_resource_group" "existing" { name = var.resource_group_name } data "azurerm_mongo_cluster" "existing" { name = var.cluster_name resource_group_name = data.azurerm_resource_group.existing.name } resource "azurerm_mongo_cluster" "enable_entra" { name = data.azurerm_mongo_cluster.existing.name resource_group_name = data.azurerm_resource_group.existing.name location = data.azurerm_mongo_cluster.existing.location administrator_username = data.azurerm_mongo_cluster.existing.administrator_username administrator_password = data.azurerm_mongo_cluster.existing.administrator_password shard_count = data.azurerm_mongo_cluster.existing.shard_count compute_tier = data.azurerm_mongo_cluster.existing.compute_tier high_availability_mode = data.azurerm_mongo_cluster.existing.high_availability_mode storage_size_in_gb = data.azurerm_mongo_cluster.existing.storage_size_in_gb version = data.azurerm_mongo_cluster.existing.version # Enable both Microsoft Entra ID and Native authentication authentication_enabled = true }Подсказка
Дополнительные сведения о параметрах использования ресурса
azurerm_mongo_clusterсмотрите в документации поставщика в Реестре Terraformazurerm.Создайте файл переменных с именем enable-entra-id.tfvars со сведениями о кластере:
cluster_name = "<cluster-name>" resource_group_name = "<resource-group>"Инициализация и применение конфигурации Terraform для включения проверки подлинности идентификатора Microsoft Entra:
terraform init --upgradeARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --var-file="enable-entra-id.tfvars" --out "enable-entra.tfplan"ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "enable-entra.tfplan"Проверьте свойство
authConfigна кластере с помощьюaz resource show.az resource show \ --resource-group "<resource-group>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --query "properties.authConfig" \ --latest-include-previewЗамечание
Выходные данные должны содержать
allowedModesсписок. Если идентификатор Microsoft Entra был включен успешно, массив содержит обаNativeAuthиMicrosoftEntraID.
Управление административными удостоверениями Microsoft Entra ID и локальными пользователями в DocumentDB
Если на кластере Azure DocumentDB включена аутентификация Microsoft Entra ID, вы можете добавить одного или нескольких пользователей-администраторов Microsoft Entra ID в этот кластер. Администратор Microsoft Entra ID может быть пользователем Microsoft Entra ID, учётной записью службы или управляемым удостоверением. Несколько администраторов идентификатора Microsoft Entra можно настроить в любое время.
Пользователи с административным идентификатором Entra создаются в качестве сущностей Azure Microsoft.DocumentDB/mongoClusters/users и реплицируются в базу данных.
Кроме того, один или несколько пользователей, не являющихся неадминистрирующими пользователями Идентификатора Microsoft Entra, можно добавлять в кластер в любое время после включения проверки подлинности идентификатора Microsoft Entra. Неадминистрационные пользователи часто используются для текущих рабочих задач, которые не требуют прав администратора.
В Azure DocumentDB доступ предоставляется путем регистрации субъектов Microsoft Entra в кластере и сопоставления их с ролями в базах данных MongoDB (например, readWrite в базе данных или root в базе данных admin). Зарегистрированные основные объекты создаются как ресурсы Azure типа Microsoft.DocumentDB/mongoClusters/users, с именами в форме <cluster-name>/users/<principal-id>.
Администраторы имеют полные привилегии для управления кластером и его данными, включая полные возможности управления пользователями. Неадминистративные пользователи могут получать разрешения на чтение и запись или только на чтение в кластере с помощью определённых ролей базы данных MongoDB. Роли readWriteAnyDatabase и clusterAdmin вместе предоставляют полные разрешения на чтение и запись в кластере, включая привилегии для управления базами данных и операций с базами данных. Роль readAnyDatabase используется для предоставления разрешений только для чтения в кластере. Нельзя назначать роли readWriteAnyDatabase и clusterAdmin отдельно. Они должны быть предоставлены вместе для полного доступа на чтение и запись.
Неадминистрационные (вторичные) пользователи и субъекты безопасности предоставляют ограниченные разрешения на управление пользователями в кластере, как описано в следующей таблице:
| Поставщик безопасности | Role | СоздатьПользователя | DeleteUser | ОбновитьПользователя | ListUser |
|---|---|---|---|---|---|
| Майкрософт Ентра айди | Чтение и запись (readWriteAnyDatabase, clusterAdmin) | ❌ | ❌ | ❌ | ✔️ |
| Майкрософт Ентра айди | Только для чтения (доступ к любому экземпляру базы данных) | ❌ | ❌ | ❌ | ✔️ |
| Native DocumentDB | Чтение и запись (readWriteAnyDatabase, clusterAdmin) | ❌ | ❌ | Только для изменения собственного пароля | ✔️ |
| Native DocumentDB | Только для чтения (доступ к любому экземпляру базы данных) | ❌ | ❌ | Только для изменения собственного пароля | ✔️ |
Получите уникальный идентификатор (идентификатор объекта) субъекта Microsoft Entra, к которому требуется предоставить доступ с помощью одной из следующих команд:
Текущее удостоверение для входа
az ad signed-in-user showДругая человеческая идентичность с дружественным именем
az ad user show \ --id "<user-alias-and-domain>"Service principal с использованием идентификатора приложения
az ad sp show \ --id "<application-id>"Управляемое удостоверение с помощью группы ресурсов и имени
az identity show \ --resource-group "<resource-group>" \ --name "<managed-identity-name>"
Зарегистрируйте субъект в кластере и сопоставийте его с ролями базы данных MongoDB. В следующем примере субъект регистрируется в качестве
readWriteпользователя вsalesбазе данных:az resource create \ --resource-group "<resource-group>" \ --name "<cluster-name>/users/<principal-id>" \ --resource-type "Microsoft.DocumentDB/mongoClusters/users" \ --location "<cluster-region>" \ --properties '{"identityProvider":{"type":"MicrosoftEntraID","properties":{"principalType":"User"}},"roles":[{"db":"sales","role":"readWrite"}]}' \ --latest-include-preview- Замените
principalTypeнаservicePrincipalдля учетных записей приложения или службы иManagedIdentityдля управляемых удостоверений. - Чтобы предоставить права администратора, используйте
{"db":"admin","role":"root"}в массивеroles.
- Замените
Список всех зарегистрированных субъектов и сопоставленных ролей (представление на уровне кластера):
az rest \ --method "GET" \ --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>/users?api-version=2025-09-01"- Ответ содержит массив ресурсов пользователя, каждый из
identityProviderкоторых содержит метаданные иrolesмассив с сопоставленными ролями базы данных.
- Ответ содержит массив ресурсов пользователя, каждый из
Получение сведений о конкретном зарегистрированном субъекте (замените
<principal-id>):az resource show \ --resource-group "<resource-group>" \ --name "<cluster-name>/users/<principal-id>" \ --resource-type "Microsoft.DocumentDB/mongoClusters/users" \ --latest-include-previewУдалите зарегистрированного принципала (отмените доступ к плоскости данных):
az resource delete \ --resource-group "<resource-group>" \ --name "<cluster-name>/users/<principal-id>" \ --resource-type "Microsoft.DocumentDB/mongoClusters/users" \ --latest-include-preview
Создайте файл Bicep (например
register-principal.bicep), чтобы зарегистрировать главную учётную запись и сопоставить роли базы данных.param clusterName string param principalId string param location string = resourceGroup().location param principalType string = 'User' param roles array = [ { db: 'sales' role: 'readWrite' } ] resource user 'Microsoft.DocumentDB/mongoClusters/users@2025-09-01' = { name: '${clusterName}/users/${principalId}' location: location properties: { identityProvider: { type: 'Microsoft.EntraID' properties: { principalType: principalType } } roles: roles } }Разверните шаблон Bicep, чтобы зарегистрировать принципала:
az deployment group create \ --resource-group "<resource-group>" \ --template-file register-principal.bicep \ --parameters clusterName="<cluster-name>" principalId="<principal-id>"Список всех зарегистрированных субъектов для кластера с помощью REST API (полезно после развертывания Bicep):
az rest \ --method GET \ --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>/users?api-version=2025-09-01"Получение сведений о конкретном зарегистрированном субъекте, созданном Bicep (замените
<principal-id>):az resource show \ --resource-group "<resource-group>" \ --name "<cluster-name>/users/<principal-id>" \ --resource-type "Microsoft.DocumentDB/mongoClusters/users" \ --latest-include-previewУдалите субъект, удалив ресурс (или разверните шаблон без ресурса пользователя):
az resource delete \ --resource-group "<resource-group>" \ --name "<cluster-name>/users/<principal-id>" \ --resource-type "Microsoft.DocumentDB/mongoClusters/users" \ --latest-include-preview
Откройте целевой кластер Azure DocumentDB на портале Azure.
В разделе Параметры выберите Проверка подлинности.
В разделе проверки подлинности идентификатора Microsoft Entra на портале перечислены зарегистрированные субъекты Microsoft Entra по идентификатору объекта. Используйте это представление для:
- Проверьте список ожидаемых идентификаторов объектов.
- Проверьте сведения об одном субъекте, выбрав указанную запись (или используйте функцию поиска на портале).
- Используйте действие Remove рядом с записью, чтобы немедленно отозвать доступ к плоскости данных субъекта.
Чтобы получить понятные имена идентификаторов объектов, отображаемых в списке портала, используйте страницу "Пользователи " в разделе идентификатора Microsoft Entra ID . Затем выполните поиск по идентификатору объекта или понятному имени.
Получите уникальный идентификатор (идентификатор объекта) субъекта Microsoft Entra, к которому требуется предоставить доступ с помощью одной из следующих команд:
Текущее удостоверение для входа
az ad signed-in-user showДругая человеческая идентичность с дружественным именем
az ad user show \ --id "<user-alias-and-domain>"Service principal с использованием идентификатора приложения
az ad sp show \ --id "<application-id>"Управляемое удостоверение с помощью группы ресурсов и имени
az identity show \ --resource-group "<resource-group>" \ --name "<managed-identity-name>"
Создайте файл Terraform (например
register-principal.tf), чтобы зарегистрировать роли основной базы данных и сопоставить их с помощью поставщика AzAPI:variable "cluster_name" { type = string description = "Name of the existing cluster" } variable "resource_group_name" { type = string description = "Name of the existing resource group" } variable "principal_id" { type = string description = "Object ID of the Microsoft Entra principal" } variable "principal_type" { type = string description = "Type of principal: User, ServicePrincipal, or ManagedIdentity" default = "User" } variable "roles" { type = list(object({ db = string role = string })) description = "Database roles to assign" default = [ { db = "sales" role = "readWrite" } ] } terraform { required_providers { azapi = { source = "azure/azapi" version = "~> 2.0" } azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } provider "azapi" {} data "azurerm_resource_group" "existing" { name = var.resource_group_name } data "azurerm_mongo_cluster" "existing" { name = var.cluster_name resource_group_name = var.resource_group_name } resource "azapi_resource" "mongo_cluster_user" { type = "Microsoft.DocumentDB/mongoClusters/users@2025-09-01" name = var.principal_id parent_id = data.azurerm_mongo_cluster.existing.id location = data.azurerm_resource_group.existing.location body = { properties = { identityProvider = { type = "MicrosoftEntraID" properties = { principalType = var.principal_type } } roles = var.roles } } }Подсказка
Дополнительные сведения о поставщике AzAPI см. в документации по поставщику Azure AzAPI.
- Замените
principalTypeнаservicePrincipalдля учетных записей приложения или службы иManagedIdentityдля управляемых удостоверений. - Чтобы предоставить права администратора, используйте
{"db":"admin","role":"root"}в массивеroles.
- Замените
Создайте файл переменных с именем
register-principal.tfvars:cluster_name = "<cluster-name>" resource_group_name = "<resource-group>" principal_id = "<principal-id>" principal_type = "User" roles = [ { db = "sales" role = "readWrite" } ]Инициализация и применение конфигурации Terraform для регистрации субъекта:
terraform init --upgradeARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --var-file="register-principal.tfvars" --out "register-principal.tfplan"ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "register-principal.tfplan"Список всех зарегистрированных субъектов для кластера с помощью REST API (полезно после развертывания Terraform):
az rest \ --method GET \ --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>/users?api-version=2025-09-01"Получение сведений о конкретном зарегистрированном субъекте, созданном Terraform (замените
<principal-id>):az resource show \ --resource-group "<resource-group>" \ --name "<cluster-name>/users/<principal-id>" \ --resource-type "Microsoft.DocumentDB/mongoClusters/users" \ --latest-include-previewУдалите объект, уничтожив ресурс Terraform.
ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform destroy --var-file="register-principal.tfvars"
Замечание
Кластер Azure DocumentDB создается с одним встроенным администратором DocumentDB. Вы можете добавить больше штатных административных пользователей DocumentDB после завершения подготовки кластера. Администраторы Microsoft Entra ID, добавленные в кластер, будут дополнением к собственным администраторам DocumentDB, определенным в том же кластере. Все административные идентификаторы Microsoft Entra ID реплицируются в базу данных.
Не административные идентификаторы Microsoft Entra ID создаются в базе данных. При перечислении неадминистративных пользователей в базе данных список содержит все административные и неадминистративные удостоверения Microsoft Entra ID и всех вторичных (неадминистративных) собственных пользователей DocumentDB.
Получение учетных данных кластера
Вы можете подключиться к кластеру с помощью URI подключения или пользовательского объекта параметров из драйвера для предпочтительного языка. В любом случае для подключения к кластеру необходимо установить схему на mongodb+srv.
Узел находится в домене *.global.mongocluster.cosmos.azure.com или *.mongocluster.cosmos.azure.com, в зависимости от того, используете ли вы текущий кластер или глобальную конечную точку чтения и записи. Схема +srv и узел *.global.* обеспечивают динамическое подключение клиента к соответствующему записываемому кластеру в конфигурации с несколькими кластерами, даже если происходит смена региона. В конфигурации с одним кластером можно использовать любую строку подключения неизбирательно.
Этот tls параметр также должен быть включен. Остальные рекомендуемые параметры являются рекомендациями по настройке.
| Вариант | Ценность |
|---|---|
scheme |
mongodb+srv |
host |
<cluster-name>.global.mongocluster.cosmos.azure.com или <cluster-name>.mongocluster.cosmos.azure.com |
tls |
true |
authMechanism |
MONGODB-OIDC |
retrywrites |
false |
maxIdleTimeMS |
120000 |
Это важно
Чтобы получить строку подключения, используйте портал Azure .
Перейдите к кластеру Azure DocumentDB.
Выберите пункт навигационного меню "Строки подключения".
Скопируйте или запишите значение из поля строки подключения.
Подсказка
Строки подключения Microsoft Entra ID находятся в разделе Microsoft Entra ID.
Подключитесь с использованием Microsoft Entra ID в Visual Studio Code
Используйте Visual Studio Code с расширением DocumentDB для подключения к кластеру Azure DocumentDB с помощью удостоверения Идентификатора Microsoft Entra.
Это важно
При проверке подлинности в кластере Azure DocumentDB с помощью Microsoft Entra ID в Visual Studio Code с расширением DocumentDB, функциональность shell не поддерживается. Если необходимо использовать оболочку MongoDB с проверкой подлинности идентификатора Microsoft Entra ID, используйте оболочку MongoDB непосредственно на клиентском компьютере.
Откройте Visual Studio Code.
Перейдите к расширению DocumentDB на боковой панели.
В разделе "Подключения" выберите +Создать подключение....
В диалоговом окне типа подключения выберите Строка подключения.
Используйте следующую строку подключения:
mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000Ожидайте появления автоматического запроса для использования аутентификации Microsoft Entra ID. Введите соответствующие учетные данные для типа удостоверения.
Замечание
Например, если вы вошли с помощью собственного удостоверения (человеческого удостоверения), используйте интерфейс проверки подлинности без пароля.
Дождитесь завершения подключения. Затем в раздел "Подключения" кластера добавляется новая запись DocumentDB.
Подключение с использованием Microsoft Entra ID в MongoDB Compass или MongoDB Shell
Подключитесь к кластеру Azure DocumentDB с помощью учётной записи Microsoft Entra ID непосредственно через приложение MongoDB Compass.
Настройте среду выполнения для подключения к кластеру Azure DocumentDB, создав вычислительный ресурс Azure, например виртуальную машину Azure.
Создайте управляемое удостоверение, назначаемое системой, или управляемое удостоверение, назначаемое пользователем, и свяжите его с виртуальной машиной.
Зарегистрируйте управляемое удостоверение в кластере Azure DocumentDB.
Запустите приложение Compass MongoDB или оболочку Mongo в терминале.
В Compass MongoDB выберите + в меню "Подключения" , чтобы добавить новое соединение. При использовании оболочки получите имя кластера Azure DocumentDB и идентификатор клиента для целевого объекта идентификации.
Введите следующие учетные данные в поле ввода URI .
mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:https://ossrdbms-aad.database.windows.netОткройте диалоговое окно "Дополнительные параметры подключения ".
В разделе "Общие " выберите
mongodb+srvсхему строки подключения.Перейдите к разделу проверки подлинности и убедитесь, что выбран параметр OIDC .
Перейдите к разделу «Параметры OIDC», а затем убедитесь, что выбран параметр «Рассматривать целевую конечную точку как доверенную».
Нажмите кнопку "Сохранить" и "Подключить".
Управление вторичными (неадминистративными) удостоверениями личности Microsoft Entra ID
Войдите в кластер с помощью административной учетной записи Microsoft Entra ID, чтобы выполнять операции управления для неадминистративных учетных записей Microsoft Entra ID.
Замечание
Все команды управления для неадминистративных пользователей поддерживаются для securityPrincipal и user типов принципалов.
Неадминистрационные пользователи не зарегистрированы на портале Azure.
Войдите в кластер с административным идентификатором Microsoft Entra ID и с помощью средства, например, MongoDB Shell.
Добавьте неадминистративное удостоверение Microsoft Entra ID с разрешениями на чтение и запись в кластере
createUserс помощью команды:db.runCommand( { createUser: "<entra-id-unique-identifier>", roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ], customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } } } )Добавьте неадминистративную идентификацию Microsoft Entra ID с разрешениями только для чтения для кластера
createUserи другим набором ролей.db.runCommand( { createUser: "<entra-id-unique-identifier>", roles: [ { role: "readAnyDatabase", db: "admin" } ], customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } } } )Удалите неадминистративный идентификатор Microsoft Entra ID из кластера командой
dropUser.db.runCommand( { dropUser: "<entra-id-unique-identifier>" } )Перечислите всех пользователей Microsoft Entra ID и локальных пользователей DocumentDB на кластере с помощью
userInfo.db.runCommand( { usersInfo: 1 } )Замечание
Все пользователи Microsoft Entra ID и DocumentDB с административными правами реплицируются в базу данных. Из-за этой репликации список пользователей включает всех административных и неадминистративных пользователей Microsoft Entra ID и собственных пользователей DocumentDB в кластере.
Подключитесь с помощью Microsoft Entra ID в программном коде
Убедитесь, что вы правильно предоставили доступ с помощью кода приложения и соответствующей клиентской библиотеки для предпочитаемого языка.
class AzureIdentityTokenCallback(OIDCCallback):
def __init__(self, credential):
self.credential = credential
def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
token = self.credential.get_token(
"https://ossrdbms-aad.database.windows.net/.default").token
return OIDCCallbackResult(access_token=token)
clusterName = "<cluster-name>"
credential = DefaultAzureCredential()
authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
client = MongoClient(
f"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/",
connectTimeoutMS=120000,
tls=True,
retryWrites=True,
authMechanism="MONGODB-OIDC",
authMechanismProperties=authProperties
)
const AzureIdentityTokenCallback = async (params: OIDCCallbackParams, credential: TokenCredential): Promise<OIDCResponse> => {
const tokenResponse: AccessToken | null = await credential.getToken(['https://ossrdbms-aad.database.windows.net/.default']);
return {
accessToken: tokenResponse?.token || '',
expiresInSeconds: (tokenResponse?.expiresOnTimestamp || 0) - Math.floor(Date.now() / 1000)
};
};
const clusterName: string = '<cluster-name>';
const credential: TokenCredential = new DefaultAzureCredential();
const client = new MongoClient(
`mongodb+srv://${clusterName}.global.mongocluster.cosmos.azure.com/`, {
connectTimeoutMS: 120000,
tls: true,
retryWrites: true,
authMechanism: 'MONGODB-OIDC',
authMechanismProperties: {
OIDC_CALLBACK: (params: OIDCCallbackParams) => AzureIdentityTokenCallback(params, credential),
ALLOWED_HOSTS: ['*.azure.com']
}
}
);
string tenantId = "<microsoft-entra-tenant-id>";
string clusterName = "<cluster-name>";
DefaultAzureCredential credential = new();
AzureIdentityTokenHandler tokenHandler = new(credential, tenantId);
MongoUrl url = MongoUrl.Create($"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/");
MongoClientSettings settings = MongoClientSettings.FromUrl(url);
settings.UseTls = true;
settings.RetryWrites = false;
settings.MaxConnectionIdleTime = TimeSpan.FromMinutes(2);
settings.Credential = MongoCredential.CreateOidcCredential(tokenHandler);
settings.Freeze();
MongoClient client = new(settings);
internal sealed class AzureIdentityTokenHandler(
TokenCredential credential,
string tenantId
) : IOidcCallback
{
private readonly string[] scopes = ["https://ossrdbms-aad.database.windows.net/.default"];
public OidcAccessToken GetOidcAccessToken(OidcCallbackParameters parameters, CancellationToken cancellationToken)
{
AccessToken token = credential.GetToken(
new TokenRequestContext(scopes, tenantId: tenantId),
cancellationToken
);
return new OidcAccessToken(token.Token, token.ExpiresOn - DateTimeOffset.UtcNow);
}
public async Task<OidcAccessToken> GetOidcAccessTokenAsync(OidcCallbackParameters parameters, CancellationToken cancellationToken)
{
AccessToken token = await credential.GetTokenAsync(
new TokenRequestContext(scopes, parentRequestId: null, tenantId: tenantId),
cancellationToken
);
return new OidcAccessToken(token.Token, token.ExpiresOn - DateTimeOffset.UtcNow);
}
}