Compartir a través de


Conexión a Azure DocumentDB mediante el control de acceso basado en rol y el identificador de Microsoft Entra

Azure DocumentDB admite el identificador de Microsoft Entra junto con la autenticación nativa de DocumentDB. Cada clúster se crea con la autenticación nativa habilitada y un usuario administrativo integrado.

El control de acceso basado en roles proporciona un mecanismo centralizado para asignar y aplicar permisos a través de Microsoft Entra ID, lo que garantiza que solo las identidades autorizadas puedan realizar operaciones en los clústeres. Este enfoque simplifica la gobernanza, admite principios de privilegios mínimos y facilita la auditoría, lo que ayuda a las organizaciones a mantener la integridad operativa y el cumplimiento a medida que crecen las implementaciones. La administración del acceso en Azure DocumentDB implica dos niveles distintos:

  • Acceso basado en roles de Azure para administrar el clúster como un recurso de Azure (como leer metadatos, administrar reglas de firewall y configurar puntos de conexión privados)
  • Acceso a DocumentDB para leer y escribir datos en bases de datos y colecciones en el clúster.

Habilite Microsoft Entra ID para permitir que los principales de Microsoft Entra (usuarios, principios de servicio o identidades administradas) puedan autenticarse en el clúster. La autenticación de Microsoft Entra ID se implementa mediante OpenID Connect (OIDC). Los clientes presentan un token de acceso OIDC emitido por Entra al controlador de MongoDB. Un clúster debe tener habilitada la autenticación nativa; las configuraciones admitidas son solo nativas o solo autenticación de Id. de Microsoft Entra o nativa y autenticación de Id. de Microsoft Entra.

Nota:

Puede habilitar o cambiar los métodos de autenticación en un clúster en cualquier momento después del aprovisionamiento. El cambio de métodos de autenticación no requiere un reinicio del clúster y no interrumpe. Cuando se crea un clúster, se debe habilitar la autenticación nativa de DocumentDB. Puede deshabilitar la autenticación nativa después de que el clúster haya terminado de aprovisionar.

Entre las ventajas de usar el identificador de Entra de Microsoft para la autenticación se incluyen:

  • Identidad uniforme e inicio de sesión en los servicios de Azure.
  • Administración centralizada de credenciales, directivas de contraseña y rotación.
  • Compatibilidad con métodos de autenticación sin contraseña y multifactor de Microsoft Entra ID.
  • Autenticación basada en tokens para aplicaciones, lo que elimina las contraseñas almacenadas.

Cuando la autenticación de Microsoft Entra ID está habilitada, puede registrar uno o más principales de Microsoft Entra como usuarios administrativos o no administrativos en el clúster. Las entidades de seguridad registradas se convierten en recursos de Azure bajo Microsoft.DocumentDB/mongoClusters/users y se replican en la base de datos; la asignación de estas entidades de seguridad a los roles de base de datos de MongoDB concede los privilegios de base de datos correspondientes. Esta forma de autenticación admite varios tipos de entidades principales, entre los que se incluyen: usuarios humanos, principales de servicio (aplicaciones), identidades administradas asignadas al usuario y al sistema.

Nota:

Puede configurar varias identidades y tipos de identidades de Microsoft Entra ID como administradores para un clúster al mismo tiempo. Los tipos de identidad de Id. de Microsoft Entra incluyen, pero no se limitan a:

  • Identidades humanas
  • Identidades administradas asignadas por el usuario
  • Identidades administradas asignadas por el sistema
  • Identidades de carga de trabajo

Todos los tipos de identidad pueden ser administradores al mismo tiempo.

Los usuarios administrativos tienen privilegios completos para administrar el clúster y sus datos. Los usuarios no administrativos se pueden agregar para tareas de producción en curso que no requieren privilegios administrativos. Los usuarios no administrativos suelen tener roles restringidos, como acceso de solo lectura o de lectura y escritura a bases de datos específicas, pero no pueden realizar acciones administrativas en todo el clúster.

Revise las consideraciones siguientes antes de usar esta característica:

  • Los métodos de autenticación en el clúster principal y en el clúster de réplica se administran de forma independiente.
  • Las entidades de Microsoft Entra son persistentes en los metadatos del clúster. Si se elimina una entidad de seguridad de Microsoft Entra ID, el usuario correspondiente del clúster sigue existiendo, pero ya no puede obtener nuevos tokens. Los tokens existentes permanecen válidos hasta que expiran (normalmente hasta 90 minutos a partir de la emisión del token).
  • Para revocar inmediatamente el acceso, quite la entidad de seguridad del clúster (elimine el users/<principal-id> recurso) y quite los roles de base de datos asociados; los administradores de bases de datos deben controlar la transferencia de propiedad o limpieza de las entidades de seguridad eliminadas.

Prerrequisitos

  • Una suscripción de Azure

  • Un clúster de Azure DocumentDB existente

  • Una o varias identidades existentes en Microsoft Entra ID.

Administración del control de acceso basado en rol de Azure

El control de acceso basado en rol de Azure hace referencia a la capacidad de administrar recursos para un servicio de Azure sin administrar datos. Por ejemplo, el acceso basado en roles para clústeres de Azure DocumentDB podría incluir la capacidad de:

  • Leer todos los metadatos de la cuenta y del recurso
  • Leer y regenerar cadenas de conexión
  • Administración de bases de datos y recopilaciones
  • Modificación de las propiedades de la cuenta

Azure DocumentDB admite el control de acceso basado en rol de Azure para mongoCluster el tipo de recurso. Las siguientes acciones para el tipo de recurso mongoCluster están disponibles en el control de acceso basado en rol de Azure para las asignaciones individuales y la creación de roles de control de acceso basado en rol personalizado:

Description
Microsoft.DocumentDB/mongoClusters/read Lee un mongoCluster recurso o enumera todos los mongoCluster recursos.
Microsoft.DocumentDB/mongoClusters/write Cree o actualice las propiedades o etiquetas del recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/delete Elimina el recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/PrivateEndpointConnectionsApproval/action Administrar una conexión de punto privado del recurso mongoCluster
Microsoft.DocumentDB/mongoClusters/listConnectionStrings/action Enumeración de cadenas de conexión para un recurso determinado mongoCluster
Microsoft.DocumentDB/mongoClusters/firewallRules/read Lee una regla de firewall o enumera todas las reglas de firewall para el recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/firewallRules/write Cree o actualice una regla de firewall en un recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/firewallRules/delete Elimina una regla de firewall existente para el recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/read Lee un proxy de conexión para el punto de conexión privado del recurso especificado mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/write Cree o actualice un proxy de conexión de punto final privado para un recurso especificado mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/delete Elimina un proxy de punto de conexión privado existente para el recurso especificado mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/validate/action Valida el proxy de conexión del punto privado para el recurso especificado mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/read Lee una conexión de punto de conexión privado o enumera todas las conexiones de punto de conexión privado del recurso especificado mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/write Cree o actualice un punto de conexión privado en un recurso especificado mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/delete Elimina un endpoint privado existente para el recurso especificado mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateLinkResources/read Lee un recurso de vínculo privado o enumera todos los recursos de vínculo privado para el recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/users/read Lee un usuario o enumera todos los usuarios para el recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/users/write Cree o actualice un usuario en un recurso especificado mongoCluster .
Microsoft.DocumentDB/mongoClusters/users/delete Elimina un usuario existente para el recurso especificado mongoCluster .
  1. Abrir un nuevo terminal.

  2. Inicie sesión en la CLI de Azure.

  3. Use az group show para obtener los metadatos del grupo de recursos actual.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. Observe la salida del comando anterior. Registre el valor de la id propiedad para este grupo de recursos, ya que es necesario usar en el paso siguiente.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Nota:

    En este ejemplo, el id valor sería /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. En este ejemplo se usan datos ficticios y el identificador sería distinto de este ejemplo. Esta cadena es un ejemplo truncado de la salida.

  5. Cree un nuevo archivo JSON denominado role-definition.json. En el archivo, cree esta definición de recurso especificando los valores enumerados aquí. En la lista AssignableScopes, agregue la propiedad id del grupo de recursos registrado en el paso anterior.

    {
      "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"
      ]
    }
    

    Nota:

    En este ejemplo se usa el /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example valor registrado en el paso anterior. El identificador de recurso real podría ser diferente.

  6. Cree una nueva definición de roles mediante az role definition create. Use el archivo role-definition.json como entrada para el --role-definition argumento .

    az role definition create \
        --role-definition role-definition.json
    
  7. Revise la salida del comando de creación de definiciones. La salida contiene el identificador único de la definición de rol en la id propiedad . Registre este valor como es necesario para usarlo en el paso de asignación más adelante en esta guía.

    {
      "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"
    }
    

    Nota:

    En este ejemplo, el id valor sería /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. En este ejemplo se usan datos ficticios y el identificador sería distinto de este ejemplo. Este ejemplo es un subconjunto del json típico generado a partir de la implementación para mayor claridad.

  1. Abrir un nuevo terminal.

  2. Inicie sesión en la CLI de Azure.

  3. Cree un nuevo archivo de Bicep para definir tu rol. Asigne al archivo el nombre control-plane-role-definition.bicep. Agregue estos elementos actions a la definición:

    Description
    Microsoft.DocumentDb/mongoClusters/* Habilita todas las acciones posibles.
    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
    
  4. Implemente la plantilla de Bicep usando az deployment group create. Especifique el nombre de la plantilla de Bicep y el grupo de recursos de Azure.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. Revise la salida de la implementación. La salida contiene el identificador único de la definición de rol en la properties.outputs.definitionId.value propiedad . Registre este valor como es necesario para usarlo en el paso de asignación más adelante en esta guía.

    {
      "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"
          }
        }
      }
    }
    

    Nota:

    En este ejemplo, el id valor sería /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. En este ejemplo se usan datos ficticios y el identificador sería distinto de este ejemplo. Este ejemplo es un subconjunto del json típico generado a partir de la implementación para mayor claridad.

  6. Cree un nuevo archivo de Bicep para definir la asignación de roles. Asigne al archivo el nombre 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
      }
    }
    
  7. Cree un nuevo archivo de parámetros de Bicep denominado control-plane-role-assignment.bicepparam. En este archivo de parámetros, asigne los identificadores de definición de roles registrados anteriormente al parámetro roleDefinitionId y el identificador único de su identidad al parámetro identityId.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  8. Implemente esta plantilla de Bicep mediante 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
    
  1. Inicie sesión en Azure Portal (https://portal.azure.com).

  2. Escriba Grupo de recursos en la barra de búsqueda global.

  3. En Servicios, seleccione Grupos de recursos.

  4. En el panel Grupos de recursos, seleccione el grupo de recursos existente.

  5. En el panel del grupo de recursos, seleccione Control de acceso (IAM) en el menú servicio.

  6. En el panel Control de acceso (IAM), seleccione Agregar. A continuación, seleccione Agregar rol personalizado.

  7. En el panel Aspectos básicos , configure las siguientes opciones y, a continuación, seleccione Siguiente:

    Importancia
    Nombre de rol personalizado Azure DocumentDB RBAC Owner
    Descripción Can perform all Azure role-based access control actions for Azure DocumentDB clusters.
    Permisos de línea base Comienzo desde cero
  8. En el panel Permisos , seleccione Agregar permisos. A continuación, busque DocumentDB en el cuadro de diálogo permisos. Por último, seleccione la opción Microsoft.DocumentDB/mongoClusters .

  9. En el cuadro de diálogo Permisos, seleccione todas las acciones para Microsoft.DocumentDB/mongoClusters. A continuación, seleccione Agregar para volver al panel *Permisos .

  10. De nuevo en el panel Permisos , observe la lista de permisos. A continuación, seleccione Revisar y crear.

  11. En el panel Revisar y crear , revise las opciones especificadas para la nueva definición de roles. Por último, seleccione Crear.

  12. Espere a que el portal termine de crear la definición de roles.

  13. En el panel Control de acceso (IAM), seleccione Agregar y, a continuación, Agregar asignación de roles.

  14. En el panel Rol , busque Azure DocumentDB y seleccione el rol Propietario de RBAC de Azure DocumentDB creado anteriormente en esta guía. Después, seleccione Siguiente.

    Sugerencia

    Opcionalmente, puede filtrar la lista de roles para incluir solo roles personalizados.

  15. En el panel Miembros , seleccione la opción Seleccionar miembros . En el cuadro de diálogo miembros, seleccione la identidad que desea conceder a este nivel de acceso para los clústeres de Azure DocumentDB y, a continuación, use la opción Seleccionar para confirmar su elección.

  16. De nuevo en el panel Miembros , revise los miembros seleccionados y, a continuación, seleccione Revisar y asignar.

  17. En el panel Revisar y asignar , revise las opciones especificadas para la nueva asignación de roles. Por último, seleccione Revisar y asignar.

  18. Espere a que el portal termine de crear la asignación de roles.

  1. Abrir un nuevo terminal.

  2. Inicie sesión en la CLI de Azure.

  3. Compruebe la suscripción de Azure de destino.

    az account show
    
  4. Cree un nuevo archivo de Terraform para definir la definición de roles. Asigne al archivo el nombre control-plane-role-definition.tf. Agregue estos elementos actions a la definición:

    Description
    Microsoft.DocumentDb/mongoClusters/* Habilita todas las acciones posibles.
    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
    }
    
  5. Inicialice la implementación de Terraform.

    terraform init --upgrade
    
  6. Cree un plan de ejecución para la definición de roles y guárdelo en un archivo denominado role-definition.tfplan.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --out "role-definition.tfplan"
    
  7. Aplique el plan de ejecución para implementar la definición de roles en Azure.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-definition.tfplan"
    
  8. Revise la salida de la implementación. La salida contiene el identificador único de la definición de rol en la definition_id propiedad . Registre este valor como es necesario para usarlo en el paso de asignación más adelante en esta guía.

  9. Cree un nuevo archivo de Terraform para definir la asignación de roles. Asigne al archivo el nombre 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
    }
    
  10. Cree un nuevo archivo de variables de Terraform denominado control-plane-role-assignment.tfvars. En este archivo de variables, asigne los identificadores de definición de roles registrados previamente a la variable role_definition_id y el identificador único de su identidad a la variable identity_id.

    role_definition_id = "<id-of-new-role-definition>"
    identity_id        = "<id-of-existing-identity>"
    
  11. Inicialice y aplique esta configuración de Terraform.

    terraform init --upgrade
    
    ARM_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"
    

Habilitación de la autenticación de Microsoft Entra ID

Al crear un clúster de Azure DocumentDB, el clúster se configura para usar únicamente la autenticación nativa de forma predeterminada. Para habilitar la autenticación mediante microsoft Entra ID, active el método de autenticación Microsoft Entra ID y agregue identidades de Id. de Microsoft Entra al clúster.

  1. Obtenga los detalles de la cuenta que ha iniciado sesión actualmente con az ad signed-in-user.

    az ad signed-in-user show
    
  2. El comando genera una respuesta JSON que contiene varios campos.

    {
      "@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>"
    }
    

    Sugerencia

    Registre el valor del id campo. En este ejemplo, ese valor sería aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. A continuación, este valor se puede usar en varios scripts para conceder permisos de control de acceso basado en rol de la cuenta actual a los recursos de Azure. Si usa una identidad administrada en su lugar, puede obtener el id para esa identidad administrada mediante el comando az identity show.

  3. Habilite la autenticación de Microsoft Entra ID en el clúster actualizando el recurso del clúster para incluir MicrosoftEntraID en el array 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
    

    Nota:

    Reemplace <resource-group> y <cluster-name> con sus valores.

  4. Compruebe que el cambio se aplicó mediante la lectura de la authConfig propiedad en el clúster mediante az resource show.

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters" \
        --query "properties.authConfig" \
        --latest-include-preview
    

    Nota:

    La salida debe incluir la allowedModes lista. Si Microsoft Entra ID se ha habilitado correctamente, la matriz contiene tanto NativeAuth como MicrosoftEntraID.

  1. (Opcional) Obtenga el identificador único de la entidad de seguridad de Microsoft Entra que planea registrar en el clúster. Puede obtenerlo con la CLI de Azure mediante uno de los siguientes comandos:

    • Identidad de sesión actual

      az ad signed-in-user show      
      
    • Otra identidad humana con el nombre amigable

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Entidad de servicio mediante el identificador de aplicación

      az ad sp show \
        --id "<application-id>"
      
    • Identidad administrada mediante el grupo de recursos y el nombre

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Cree una plantilla de Bicep pequeña que actualice el clúster authConfig para incluir el identificador de Microsoft Entra (guardar como 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'
          ]
        }
      }
    }
    
  3. Implemente la plantilla para actualizar el clúster:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file enable-entra-id.bicep \
        --parameters clusterName="<cluster-name>"
    
  4. Compruebe la authConfig propiedad del clúster mediante az resource show.

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters" \
        --query "properties.authConfig" \
        --latest-include-preview
    

    Nota:

    La salida debe incluir la allowedModes lista. Si Microsoft Entra ID se ha habilitado correctamente, la matriz contiene tanto NativeAuth como MicrosoftEntraID.

  1. En el panel Inicio de Azure Portal, busque y seleccione la opción Id. de Entra de Microsoft .

    Captura de pantalla de la opción Microsoft Entra ID en la página

    Sugerencia

    Si esta opción no aparece, seleccione Más servicios y busque Microsoft Entra ID con el término de búsqueda "Entra".

  2. En el panel Información general del inquilino de Microsoft Entra ID, seleccione Usuarios dentro de la sección Administrar del menú del servicio.

    Captura de pantalla de la opción

  3. En la lista de usuarios, seleccione la identidad (usuario) sobre la que desea obtener más detalles.

    Captura de pantalla de la lista de usuarios de un inquilino de Microsoft Entra ID con un usuario de ejemplo resaltado.

    Nota:

    En esta captura de pantalla se ilustra un usuario de ejemplo denominado "Kai Carter" con un principal de kai@adventure-works.com.

  4. En el panel de detalles del usuario específico, observe el valor de la propiedad ID de objeto.

    Captura de pantalla del panel de detalles de un usuario con el

    Sugerencia

    Registre el valor de la propiedad Id. de objeto . En este ejemplo, ese valor sería aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. A continuación, este valor se puede usar en varios scripts para conceder permisos de control de acceso basado en rol de la cuenta actual a los recursos de Azure. Los pasos son similares si usa una identidad administrada.

  5. Vaya al recurso de clúster de Azure DocumentDB existente.

  6. En el menú del clúster, en Configuración, seleccione Autenticación.

  7. En la sección Métodos de autenticación , seleccione Native DocumentDB y Microsoft Entra ID para habilitar la autenticación de Id. de Microsoft Entra junto con la autenticación nativa.

  8. Seleccione Guardar para conservar el cambio.

  9. La sección Métodos de autenticación ahora debe enumerar NativeAuth y MicrosoftEntraID como métodos habilitados.

  1. (Opcional) Obtenga el identificador único de la entidad de seguridad de Microsoft Entra que planea registrar en el clúster. Puede obtenerlo con la CLI de Azure mediante uno de los siguientes comandos:

    • Identidad de sesión actual

      az ad signed-in-user show      
      
    • Otra identidad humana con el nombre amigable

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Entidad de servicio mediante el identificador de aplicación

      az ad sp show \
        --id "<application-id>"
      
    • Identidad administrada mediante el grupo de recursos y el nombre

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Cree un archivo de configuración de Terraform para habilitar la autenticación de Microsoft Entra ID en su clúster existente. Guarde el archivo como 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
    }
    

    Sugerencia

    Para obtener más información sobre las opciones que usan el recurso, consulte azurerm_mongo_clusterazurerm documentación del proveedor en Terraform Registry.

  3. Cree un archivo de variables denominado enable-entra-id.tfvars con los detalles del clúster:

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    
  4. Inicialice y aplique la configuración de Terraform para habilitar la autenticación de Microsoft Entra ID.

    terraform init --upgrade
    
    ARM_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"
    
  5. Compruebe la authConfig propiedad del clúster mediante az resource show.

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters" \
        --query "properties.authConfig" \
        --latest-include-preview
    

    Nota:

    La salida debe incluir la allowedModes lista. Si Microsoft Entra ID se ha habilitado correctamente, la matriz contiene tanto NativeAuth como MicrosoftEntraID.

Gestión de identidades administrativas de Microsoft Entra ID y usuarios nativos de DocumentDB

Cuando la autenticación de Microsoft Entra ID está habilitada en un clúster de Azure DocumentDB, puede agregar una o varias entidades de Microsoft Entra ID como usuarios de administrador a ese clúster. El administrador del identificador de Microsoft Entra puede ser un usuario de Microsoft Entra ID, una entidad de servicio o una identidad administrada. Se pueden configurar varios administradores de id. de Microsoft Entra en cualquier momento.

Los usuarios de Entra ID administrativos se crean como entidades de Azure en Microsoft.DocumentDB/mongoClusters/users y se replican en la base de datos.

Además, uno o varios usuarios no administrativos de Id. de Entra de Microsoft se pueden agregar a un clúster en cualquier momento una vez habilitada la autenticación de Id. de Microsoft Entra. Los usuarios no administrativos suelen usarse para tareas de producción en curso que no requieren privilegios administrativos.

Para Azure DocumentDB, este acceso se concede al registrar principios de Microsoft Entra en el clúster y asignarlos a roles de base de datos de MongoDB (por ejemplo, readWrite en una base de datos o root en la base de datos admin). Las entidades de servicio se crean como recursos de Azure de tipo Microsoft.DocumentDB/mongoClusters/users cuyos nombres toman la forma <cluster-name>/users/<principal-id>.

Los usuarios administrativos tienen privilegios completos para administrar el clúster y sus datos, incluidas las funcionalidades completas de administración de usuarios. A los usuarios no administrativos se les pueden conceder permisos de lectura y escritura o de solo lectura en el clúster a través de roles de base de datos específicos de MongoDB. Los roles readWriteAnyDatabase y clusterAdmin conceden permisos completos de lectura y escritura en el clúster, incluidos privilegios para las operaciones de base de datos y administración de bases de datos. El rol readAnyDatabase se usa para conceder permisos de solo lectura en el clúster. No se pueden asignar roles readWriteAnyDatabase y clusterAdmin por separado; se deben conceder juntos para el acceso de lectura y escritura completo.

A los usuarios no administrativos (secundarios) y a las entidades de seguridad se les conceden permisos de administración de usuarios limitados en el clúster, como se describe en la tabla siguiente:

Proveedor de seguridad Rol CrearUsuario DeleteUser UpdateUser ListUser
Microsoft Entra ID Lectura y escritura (readWriteAnyDatabase, clusterAdmin) ✔️
Microsoft Entra ID Solo lectura (readAnyDatabase) ✔️
DocumentDB nativo Lectura y escritura (readWriteAnyDatabase, clusterAdmin) Solo para cambiar su propia contraseña ✔️
DocumentDB nativo Solo lectura (readAnyDatabase) Solo para cambiar su propia contraseña ✔️
  1. Obtenga el identificador único (id. de objeto) de la entidad de Microsoft Entra a la que desea conceder acceso mediante uno de los siguientes comandos:

    • Identidad de sesión actual

      az ad signed-in-user show      
      
    • Otra identidad humana con el nombre amigable

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Entidad de servicio mediante el identificador de aplicación

      az ad sp show \
        --id "<application-id>"
      
    • Identidad administrada mediante el grupo de recursos y el nombre

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Registre el principal en el clúster y asígnelo a los roles de base de datos de MongoDB. El siguiente ejemplo registra un principal como usuario readWrite en la base de datos 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
    
    • Reemplazar principalType por servicePrincipal para los principales de aplicaciones o servicios o ManagedIdentity para las identidades administradas.
    • Para conceder privilegios administrativos, use {"db":"admin","role":"root"} en la roles matriz.
  3. Enumerar todos los principales registrados y sus roles asignados (vista de nivel de clúster):

    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"
    
    • La respuesta contiene una matriz de recursos de usuario, cada una con identityProvider metadatos y una roles matriz que muestra los roles de base de datos asignados.
  4. Obtenga los detalles de un principal registrado específico (reemplace <principal-id>):

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  5. Eliminar un principal registrado (revocar acceso al plano de datos):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Cree un archivo de Bicep (por ejemplo register-principal.bicep) para registrar las entidades de seguridad y asignar los roles de la base de datos:

    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
      }
    }
    
  2. Implemente la plantilla de Bicep para registrar la entidad de seguridad:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file register-principal.bicep \
        --parameters clusterName="<cluster-name>" principalId="<principal-id>"
    
  3. Enumerar todas las entidades de seguridad registradas del clúster mediante la API de REST, lo cual es útil después de la implementación con 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"
    
  4. Obtenga los detalles de una entidad de seguridad registrada específica creado por Bicep (reemplace <principal-id>):

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  5. Quite el principal mediante la eliminación del recurso (o implemente una plantilla sin el recurso del usuario):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Abra el clúster de Azure DocumentDB de destino en Azure Portal.

  2. En Configuración, seleccione Autenticación.

  3. En la sección autenticación de Microsoft Entra ID, el portal muestra las entidades de seguridad registradas de Microsoft Entra por identificador de objeto. Utilice esta vista para:

    • Examine la lista para ver los identificadores de objeto esperados.
    • Inspeccione los detalles de una sola entidad principal seleccionando una entrada enumerada (o use la función de búsqueda del portal).
    • Utiliza la acción Quitar junto a una entrada para revocar inmediatamente el acceso al plano de datos de ese principal.
  4. Para obtener nombres comprensibles para los identificadores de objeto que se muestran en la lista del portal, use la página Usuarios de la sección Microsoft Entra ID. A continuación, busque por identificador de objeto o nombre amigable.

  1. Obtenga el identificador único (id. de objeto) de la entidad de Microsoft Entra a la que desea conceder acceso mediante uno de los siguientes comandos:

    • Identidad de sesión actual

      az ad signed-in-user show      
      
    • Otra identidad humana con el nombre amigable

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Entidad de servicio mediante el identificador de aplicación

      az ad sp show \
        --id "<application-id>"
      
    • Identidad administrada mediante el grupo de recursos y el nombre

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Cree un archivo de Terraform (por ejemplo register-principal.tf) para registrar la entidad de seguridad y asignar roles de base de datos utilizando el proveedor 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
        }
      }
    }
    

    Sugerencia

    Para más información sobre el proveedor AzAPI, consulte la documentación del proveedor de Azure AzAPI.

    • Reemplazar principalType por servicePrincipal para los principales de aplicaciones o servicios o ManagedIdentity para las identidades administradas.
    • Para conceder privilegios administrativos, use {"db":"admin","role":"root"} en la roles matriz.
  3. Cree un archivo de variables denominado register-principal.tfvars:

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    principal_id        = "<principal-id>"
    principal_type      = "User"
    roles = [
      {
        db   = "sales"
        role = "readWrite"
      }
    ]
    
  4. Inicie y aplique la configuración de Terraform para registrar la entidad de seguridad:

    terraform init --upgrade
    
    ARM_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"
    
  5. Enumere todos los principales registrados del clúster mediante la API REST (útil después de la implementación de 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"
    
  6. Obtenga detalles de un principal registrado específico creado por Terraform (reemplace <principal-id>):

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  7. Elimine el principal destruyendo el recurso de Terraform:

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform destroy --var-file="register-principal.tfvars"
    

Nota:

Se crea un clúster de Azure DocumentDB con un usuario nativo de DocumentDB administrativo integrado. Puede agregar más usuarios de DocumentDB administrativos nativos después de completar el aprovisionamiento del clúster. Los usuarios administrativos de Microsoft Entra ID agregados al clúster se agregarán además de los usuarios nativos de DocumentDB administrativos definidos en el mismo clúster. Todas las identidades administrativas de Microsoft Entra ID se replican en la base de datos.

Las identidades no administrativas de Microsoft Entra ID se crean en la base de datos. Al enumerar usuarios no administrativos en la base de datos, la lista contiene todas las identidades administrativas y no administrativas de Microsoft Entra ID y todos los usuarios nativos secundarios (no administrativos) de DocumentDB.

Obtener credenciales del clúster

Puede conectarse al clúster mediante un URI de conexión o un objeto de configuración personalizado desde el controlador para su idioma preferido. En cualquiera de las dos opciones, el esquema debe establecerse en mongodb+srv para conectarse al clúster. El host está en el dominio *.global.mongocluster.cosmos.azure.com o *.mongocluster.cosmos.azure.com dependiendo de si estás usando el clúster actual o el punto de conexión global de lectura y escritura. El esquema +srv y el host *.global.* garantizan que el cliente esté conectado dinámicamente al clúster grabable adecuado en una configuración de varios clústeres incluso si se produce una operación de intercambio de región. En una configuración de un solo clúster, puede utilizar cualquiera de las cadenas de conexión indistintamente.

La tls configuración también debe estar habilitada. Las opciones de configuración recomendadas restantes son las mejores prácticas.

Opción Importancia
scheme mongodb+srv
host <cluster-name>.global.mongocluster.cosmos.azure.com o <cluster-name>.mongocluster.cosmos.azure.com
tls true
authMechanism MONGODB-OIDC
retrywrites false
maxIdleTimeMS 120000

Importante

Use Azure Portal para obtener la cadena de conexión.

  1. Vaya al clúster de Azure DocumentDB.

  2. Seleccione la opción de menú de navegación Cadenas de conexión.

  3. Copie o registre el valor del campo Cadena de conexión .

    Sugerencia

    Las cadenas de conexión de Microsoft Entra ID se encuentran en la sección Microsoft Entra ID .

Conexión mediante el identificador de Entra de Microsoft en el shell de MongoDB

Use un dispositivo cliente con el Shell de MongoDB instalado para conectarse al clúster de Azure DocumentDB mediante una identidad de Microsoft Entra ID.

  1. Abra un terminal en un cliente con el shell de MongoDB instalado.

  2. Obtenga el nombre del clúster de Azure DocumentDB y el identificador de cliente de la identidad de destino.

  3. Conéctese mediante la siguiente cadena de conexión:

    mongosh "mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000"
    

Conexión mediante el identificador de Entra de Microsoft en Visual Studio Code

Utilice Visual Studio Code con la extensión DocumentDB para conectarse al clúster de Azure DocumentDB mediante una identidad de Microsoft Entra ID.

Importante

Al autenticarse en un clúster de Azure DocumentDB mediante Microsoft Entra ID en Visual Studio Code con la extensión DocumentDB, la funcionalidad shell no es compatible. Si necesita usar MongoDB Shell con la autenticación de Microsoft Entra ID, use MongoDB Shell directamente en un equipo cliente.

  1. Abre Visual Studio Code.

  2. Navegue por la extensión documentDB en la barra lateral.

  3. En la sección Conexiones , seleccione + Nueva conexión....

  4. En el cuadro de diálogo Tipo de conexión, seleccione Cadena de conexión.

  5. Use la siguiente cadena de conexión:

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
    
  6. Espere a que se muestre el mensaje automático para usar la autenticación de Microsoft Entra ID. Introduzca las credenciales adecuadas para el tipo de identidad.

    Nota:

    Por ejemplo, si inicia sesión con su propia identidad (una identidad humana), use la experiencia de autenticación sin contraseña.

  7. Espere a que finalice la conexión. A continuación, se agrega una nueva entrada de DocumentDB a la sección Conexiones del clúster.

Conexión mediante el identificador de Microsoft Entra en MongoDB Compass

Conéctese al clúster de Azure DocumentDB usando una identidad de Microsoft Entra ID directamente con la aplicación MongoDB Compass.

  1. Inicie la aplicación MongoDB Compass.

  2. Seleccione + en el menú Conexiones para agregar una nueva conexión.

  3. Cambie la opción Editar cadena de conexión para habilitar en el cuadro de diálogo Nueva conexión .

  4. Escriba la siguiente cadena de conexión en el cuadro de entrada del 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
    
  5. Ahora, abra el cuadro de diálogo Opciones de conexión avanzadas .

  6. En la sección General , seleccione mongodb+srv para el esquema de cadena de conexión.

  7. A continuación, vaya a la sección Autenticación .

  8. Asegúrese de que la opción OIDC está seleccionada.

  9. Ahora, vaya a la sección Opciones de OIDC .

  10. Asegúrese de que también está seleccionada la opción Considerar el punto de conexión de destino como confiable.

  11. Seleccione Guardar y conectar.

Administrar identidades secundarias (no administrativas) de DocumentDB de Microsoft Entra ID

Inicie sesión en el clúster con una identidad administrativa de Microsoft Entra ID para realizar operaciones de administración para identidades de identificador de Microsoft Entra no administrativas.

Nota:

Todos los comandos de administración para los usuarios no administrativos se admiten para los tipos principales SecurityPrincipal y user.

  1. Inicie sesión en el clúster con una identidad administrativa de Microsoft Entra ID y use una herramienta como MongoDB Shell.

  2. Agregue una identidad de Microsoft Entra ID no administrativa con permisos de lectura y escritura en el clúster mediante el comando createUser.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "clusterAdmin", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  3. Agregue una identidad de Microsoft Entra ID no administrativa con permisos de solo lectura en el clúster createUser con un conjunto diferente de roles.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "readAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  4. Quite una identidad de Microsoft Entra ID no administrativa del clúster con el comando dropUser.

    db.runCommand(
      {
        dropUser: "<entra-id-unique-identifier>"
      }
    )
    
  5. Enumere todos los usuarios de Microsoft Entra ID y nativos de DocumentDB en el clúster mediante userInfo.

    db.runCommand(
      {
        usersInfo: 1
      }
    )
    

    Nota:

    Todos los usuarios administrativos de Microsoft Entra ID y DocumentDB nativos se replican en la base de datos. Debido a esta replicación, la lista de usuarios incluye todos los usuarios administrativos y no administrativos de Microsoft Entra ID y usuarios nativos de DocumentDB en el clúster.

Conexión mediante Microsoft Entra ID en el código

Valide que ha concedido acceso correctamente mediante código de aplicación y la biblioteca cliente adecuada para su idioma preferido.

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);
    }
}