Partager via


Se connecter à Azure DocumentDB à l’aide du contrôle d’accès en fonction du rôle et de l’ID Microsoft Entra

Azure DocumentDB prend en charge Microsoft Entra ID en même temps que l’authentification DocumentDB native. Chaque cluster est créé avec l’authentification native activée et un utilisateur administratif intégré.

Le contrôle d’accès en fonction du rôle fournit un mécanisme centralisé permettant d’attribuer et d’appliquer des autorisations via l’ID Microsoft Entra, ce qui garantit que seules les identités autorisées peuvent effectuer des opérations sur vos clusters. Cette approche simplifie la gouvernance, prend en charge les principes de privilège minimum et simplifie l’audit, ce qui aide les organisations à maintenir l’intégrité opérationnelle et la conformité à mesure que les déploiements augmentent. La gestion de l’accès dans Azure DocumentDB implique deux niveaux distincts :

  • Accès en fonction du rôle Azure pour la gestion du cluster en tant que ressource Azure (par exemple, lecture des métadonnées, gestion des règles de pare-feu et configuration de points de terminaison privés)
  • Accès DocumentDB pour lire et écrire des données dans des bases de données et des collections sur le cluster.

Activez l’ID Microsoft Entra pour autoriser les principaux Microsoft Entra (utilisateurs, principaux de service ou identités managées) à s’authentifier auprès du cluster. L’authentification Microsoft Entra ID est implémentée à l’aide d’OpenID Connect (OIDC). Les clients présentent un jeton d’accès OIDC émis par Entra au pilote MongoDB. Un cluster doit avoir activé l’authentification native ; les configurations prises en charge sont uniquement natives ou l’authentification Microsoft Entra ID uniquement ou native et l’authentification Microsoft Entra ID.

Note

Vous pouvez activer ou modifier les méthodes d’authentification sur un cluster à tout moment après l’approvisionnement. La modification des méthodes d’authentification ne nécessite pas de redémarrage de cluster et n’est pas perturbatrice. Lorsqu’un cluster est créé, l’authentification DocumentDB native doit être activée. Vous pouvez désactiver l’authentification native une fois le provisionnement terminé du cluster.

Les avantages de l’utilisation de l’ID Microsoft Entra pour l’authentification sont les suivants :

  • Identité uniforme et connexion entre les services Azure.
  • Gestion centralisée des informations d’identification, des stratégies de mot de passe et de la rotation.
  • Prise en charge des méthodes d’authentification sans mot de passe et multifacteur à partir de l’ID Microsoft Entra.
  • Authentification basée sur des jetons pour les applications, éliminant les mots de passe stockés.

Lorsque l’authentification d’ID Microsoft Entra est activée, vous pouvez inscrire un ou plusieurs principaux Microsoft Entra en tant qu’utilisateurs administratifs ou non administrateurs sur le cluster. Les principaux inscrits deviennent des ressources Azure sous Microsoft.DocumentDB/mongoClusters/users et sont répliqués dans la base de données. Le mappage de ces principaux aux rôles de base de données MongoDB accorde les privilèges de base de données correspondants. Cette forme d’authentification prend en charge plusieurs types principaux, notamment : utilisateurs humains, principaux de service (applications), identités managées affectées par l’utilisateur et affectées par le système.

Note

Vous pouvez configurer plusieurs identités et types d’identités Microsoft Entra id en tant qu’administrateurs pour un cluster en même temps. Les types d’identités d’ID Microsoft Entra incluent, mais ne sont pas limités aux éléments suivants :

  • Identités humaines
  • Identités managées attribuées par l’utilisateur
  • Identités managées attribuées par le système
  • Identités de charge de travail

Tous les types d’identité peuvent être des administrateurs simultanément.

Les utilisateurs administratifs disposent de privilèges complets pour gérer le cluster et ses données. Les utilisateurs non administrateurs peuvent être ajoutés pour les tâches de production en cours qui ne nécessitent pas de privilèges d’administration. Les utilisateurs nonadministratifs contiennent généralement des rôles restreints, tels que l’accès en lecture seule ou en lecture-écriture à des bases de données spécifiques, mais n’ont pas la possibilité d’effectuer des actions administratives à l’échelle du cluster.

Passez en revue les considérations suivantes avant d’utiliser cette fonctionnalité :

  • Les méthodes d’authentification sur le cluster principal et sur le cluster réplica sont gérées indépendamment.
  • Les principaux Microsoft Entra sont enregistrés dans les métadonnées du cluster. Si un principal est supprimé de Microsoft Entra ID, l’utilisateur de cluster correspondant reste mais ne peut plus obtenir de nouveaux jetons. Les jetons existants restent valides jusqu’à leur expiration (généralement jusqu’à 90 minutes à partir de l’émission du jeton).
  • Pour révoquer immédiatement l’accès, supprimez le principal du cluster (supprimez la users/<principal-id> ressource) et supprimez les rôles de base de données associés. Les administrateurs de base de données doivent gérer le transfert de propriété ou de nettoyage pour les principaux supprimés.

Prerequisites

  • Un abonnement Azure

  • Un cluster Azure DocumentDB existant

    • Si vous n’avez pas de cluster, créez un cluster
  • Une ou plusieurs identités existantes dans Microsoft Entra ID.

Gérer le contrôle d’accès en fonction du rôle Azure

Le contrôle d’accès en fonction du rôle Azure fait référence à la possibilité de gérer les ressources d’un service Azure sans gérer les données. Par exemple, l’accès en fonction du rôle pour les clusters Azure DocumentDB peut inclure la possibilité de :

  • Lire toutes les métadonnées de compte et de ressource
  • Lire et régénérer des chaînes de connexion
  • Gérer les bases de données et les collections
  • Modifier les propriétés du compte

Azure DocumentDB prend en charge le contrôle d’accès en fonction du rôle Azure pour mongoCluster le type de ressource. Les actions suivantes pour mongoCluster le type de ressource sont disponibles dans le contrôle d’accès en fonction du rôle Azure pour les attributions individuelles et la création de rôles de contrôle d’accès en fonction du rôle personnalisé :

Descriptif
Microsoft.DocumentDB/mongoClusters/read Lit une mongoCluster ressource ou répertorie toutes les mongoCluster ressources.
Microsoft.DocumentDB/mongoClusters/write Créez ou mettez à jour les propriétés ou balises de la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/delete Supprime la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/PrivateEndpointConnectionsApproval/action Gérer la connexion privée de point de terminaison de la ressource mongoCluster
Microsoft.DocumentDB/mongoClusters/listConnectionStrings/action Répertorier les chaînes de connexion pour une ressource donnée mongoCluster
Microsoft.DocumentDB/mongoClusters/firewallRules/read Lit une règle de pare-feu ou répertorie toutes les règles de pare-feu pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/firewallRules/write Créez ou mettez à jour une règle de pare-feu sur une ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/firewallRules/delete Supprime une règle de pare-feu existante pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/read Lit un proxy de connexion de point de terminaison privé pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/write Créez ou mettez à jour un proxy de connexion de point de terminaison privé sur une ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/delete Supprime un proxy de connexion de point de terminaison privé existant pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/validate/action Valide le proxy de connexion de point de terminaison privé pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/read Lit une connexion de point de terminaison privé ou répertorie toutes les connexions de point de terminaison privé pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/write Créez ou mettez à jour une connexion de point de terminaison privé sur une ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/delete Supprime une connexion de point de terminaison privé existante pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/privateLinkResources/read Lit une ressource de liaison privée ou répertorie toutes les ressources de liaison privée pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/users/read Lit un utilisateur ou répertorie tous les utilisateurs pour la ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/users/write Créez ou mettez à jour un utilisateur sur une ressource spécifiée mongoCluster .
Microsoft.DocumentDB/mongoClusters/users/delete Supprime un utilisateur existant pour la ressource spécifiée mongoCluster .
  1. Ouvrez un nouveau terminal.

  2. Connectez-vous à Azure CLI.

  3. Permet az group show d’obtenir les métadonnées de votre groupe de ressources actuel.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. Observez la sortie de la commande précédente. Enregistrez la valeur de la propriété id pour ce groupe de ressources, car elle est nécessaire pour l'utiliser à l'étape suivante.

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

    Note

    Dans cet exemple, la id valeur serait /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. Cet exemple utilise des données fictives et votre identificateur serait distinct de cet exemple. Cette chaîne est un exemple tronqué de la sortie.

  5. Créez un fichier JSON nommé role-definition.json. Dans le fichier, créez cette définition de ressource en spécifiant les valeurs répertoriées ici. Dans la liste AssignableScopes, ajoutez la propriété id du groupe de ressources notée à l’étape précédente.

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

    Note

    Cet exemple utilise la /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example valeur enregistrée à l’étape précédente. Votre identificateur de ressource réel peut être différent.

  6. Créez une nouvelle définition de rôle à l’aide de az role definition create. Utilisez le fichier role-definition.json comme entrée pour l’argument --role-definition .

    az role definition create \
        --role-definition role-definition.json
    
  7. Passez en revue la sortie de la commande de création de définition. La sortie contient l’identificateur unique de la définition de rôle dans la id propriété. Enregistrez cette valeur, car il est nécessaire d’utiliser dans l’étape d’affectation plus loin dans ce guide.

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

    Note

    Dans cet exemple, la id valeur serait /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. Cet exemple utilise des données fictives et votre identificateur serait distinct de cet exemple. Cet exemple est un sous-ensemble de la sortie JSON typique générée par le déploiement pour plus de clarté.

  1. Ouvrez un nouveau terminal.

  2. Connectez-vous à Azure CLI.

  3. Créez un fichier Bicep pour définir votre définition de rôle. Nommez le fichier control-plane-role-definition.bicep. Ajoutez-les actions à la définition :

    Descriptif
    Microsoft.DocumentDb/mongoClusters/* Active toutes les actions possibles.
    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. Déployez le modèle Bicep à l’aide de az deployment group create. Spécifiez le nom du modèle Bicep et du groupe de ressources Azure.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. Passez en revue la sortie du déploiement. La sortie contient l’identificateur unique de la définition de rôle dans la properties.outputs.definitionId.value propriété. Enregistrez cette valeur, car il est nécessaire d’utiliser dans l’étape d’affectation plus loin dans ce guide.

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

    Note

    Dans cet exemple, la id valeur serait /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. Cet exemple utilise des données fictives et votre identificateur serait distinct de cet exemple. Cet exemple est un sous-ensemble de la sortie JSON typique générée par le déploiement pour plus de clarté.

  6. Créez un fichier Bicep pour définir votre attribution de rôle. Nommez le fichier 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. Créez un nouveau fichier de paramètres Bicep nommé control-plane-role-assignment.bicepparam. Dans ce fichier de paramètres ; affectez les identificateurs de définition de rôle précédemment enregistrés au roleDefinitionId paramètre et l’identificateur unique de votre identité au identityId paramètre.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  8. Déployez ce modèle Bicep à l’aide de 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. Connectez-vous au portail Azure (https://portal.azure.com).

  2. Entrez le groupe de ressources dans la barre de recherche globale.

  3. Dans Services, sélectionnez Groupes de ressources.

  4. Dans le volet Groupes de ressources, sélectionnez votre groupe de ressources existant.

  5. Dans le volet du groupe de ressources, sélectionnez Contrôle d’accès (IAM) dans le menu du service.

  6. Dans le volet Contrôle d’accès (IAM), sélectionnez Ajouter. Sélectionnez Ensuite Ajouter un rôle personnalisé.

  7. Dans le volet Informations de base , configurez les options suivantes, puis sélectionnez Suivant :

    Valeur
    Nom du rôle personnalisé Azure DocumentDB RBAC Owner
    Description Can perform all Azure role-based access control actions for Azure DocumentDB clusters.
    Autorisations de référence Commencer à partir de zéro
  8. Dans le volet Autorisations , sélectionnez Ajouter des autorisations. Ensuite, recherchez DocumentDB dans la boîte de dialogue autorisations. Enfin, sélectionnez l’option Microsoft.DocumentDB/mongoClusters .

  9. Dans la boîte de dialogue Autorisations, sélectionnez toutes les actions pour Microsoft.DocumentDB/mongoClusters. Ensuite, sélectionnez Ajouter pour revenir au volet *Autorisations .

  10. De retour dans le volet Autorisations , observez la liste des autorisations. Ensuite, sélectionnez Vérifier + créer.

  11. Dans le volet Vérifier + créer , passez en revue les options spécifiées pour la nouvelle définition de rôle. Enfin, sélectionnez Créer.

  12. Attendez que le portail termine la création de la définition de rôle.

  13. Dans le volet Contrôle d’accès (IAM), sélectionnez Ajouter , puis Ajouter une attribution de rôle.

  14. Dans le volet Rôle , recherchez Azure DocumentDB et sélectionnez le rôle Propriétaire RBAC Azure DocumentDB créé précédemment dans ce guide. Ensuite, sélectionnez Suivant.

    Conseil / Astuce

    Vous pouvez éventuellement filtrer la liste des rôles pour inclure uniquement des rôles personnalisés.

  15. Dans le volet Membres , sélectionnez l’option Sélectionner des membres . Dans la boîte de dialogue membres, sélectionnez l’identité que vous souhaitez accorder à ce niveau d’accès pour vos clusters Azure DocumentDB, puis utilisez l’option Sélectionner pour confirmer votre choix.

  16. De retour dans le volet Membres , passez en revue le membre sélectionné[s], puis sélectionnez Vérifier + affecter.

  17. Dans le volet Révision + affectation , passez en revue les options spécifiées pour la nouvelle attribution de rôle. Enfin, sélectionnez Vérifier + affecter.

  18. Attendez que le portail termine la création de l’attribution de rôle.

  1. Ouvrez un nouveau terminal.

  2. Connectez-vous à Azure CLI.

  3. Vérifiez votre abonnement Azure cible.

    az account show
    
  4. Créez un fichier Terraform pour définir votre définition de rôle. Nommez le fichier control-plane-role-definition.tf. Ajoutez-les actions à la définition :

    Descriptif
    Microsoft.DocumentDb/mongoClusters/* Active toutes les actions possibles.
    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. Initialisez le déploiement Terraform.

    terraform init --upgrade
    
  6. Créez un plan d’exécution pour la définition de rôle et enregistrez-le dans un fichier nommé role-definition.tfplan.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --out "role-definition.tfplan"
    
  7. Appliquez le plan d’exécution pour déployer la définition de rôle sur Azure.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-definition.tfplan"
    
  8. Passez en revue la sortie du déploiement. La sortie contient l’identificateur unique de la définition de rôle dans la definition_id propriété. Enregistrez cette valeur, car il est nécessaire d’utiliser dans l’étape d’affectation plus loin dans ce guide.

  9. Créez un fichier Terraform pour définir votre attribution de rôle. Nommez le fichier 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. Créez un fichier de variables Terraform nommé control-plane-role-assignment.tfvars. Dans ce fichier de variables ; affectez les identificateurs de définition de rôle précédemment enregistrés à la role_definition_id variable et l’identificateur unique de votre identité à la identity_id variable.

    role_definition_id = "<id-of-new-role-definition>"
    identity_id        = "<id-of-existing-identity>"
    
  11. Initialisez et appliquez cette configuration 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"
    

Activer l’authentification d’ID Microsoft Entra

Lorsque vous créez un cluster Azure DocumentDB, le cluster est configuré pour utiliser uniquement l’authentification native par défaut. Pour activer l’authentification à l’aide de l’ID Microsoft Entra, activez la méthode d’authentification Microsoft Entra ID et ajoutez des identités d’ID Microsoft Entra au cluster.

  1. Obtenez les détails du compte actuellement connecté à l’aide de az ad signed-in-user.

    az ad signed-in-user show
    
  2. La commande génère une réponse JSON contenant différents champs.

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

    Conseil / Astuce

    Enregistrez la valeur du id champ. Dans cet exemple, cette valeur serait aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Cette valeur peut ensuite être utilisée dans différents scripts pour accorder des autorisations de contrôle d’accès en fonction du rôle à votre compte actuel aux ressources Azure. Si vous utilisez plutôt une identité managée, vous pouvez obtenir l’identité id managée à l’aide de la az identity show commande.

  3. Activez l’authentification ID Microsoft Entra sur le cluster en mettant à jour la ressource du cluster pour inclure MicrosoftEntraID dans le tableau 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
    

    Note

    Remplacez <resource-group> et <cluster-name> par vos valeurs.

  4. Vérifiez que la modification a bien été appliquée en lisant la propriété authConfig sur le cluster à l’aide de az resource show.

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

    Note

    La sortie doit inclure la allowedModes liste. Si l’ID Microsoft Entra a été activé avec succès, le tableau contient à la fois NativeAuth et MicrosoftEntraID.

  1. (Facultatif) Obtenez l’identificateur unique du principal Microsoft Entra que vous envisagez d’inscrire sur le cluster. Vous pouvez l’obtenir avec Azure CLI à l’aide de l’une des commandes suivantes :

    • Identité de connexion actuelle

      az ad signed-in-user show      
      
    • Une autre identité humaine à l’aide d’un nom convivial

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Principal de service à l’aide de l’identificateur d’application

      az ad sp show \
        --id "<application-id>"
      
    • Identité managée à l’aide du groupe de ressources et du nom

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Créez un petit modèle Bicep qui met à jour le cluster authConfig pour inclure l’ID Microsoft Entra (enregistrer sous 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. Déployez le modèle pour mettre à jour le cluster :

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file enable-entra-id.bicep \
        --parameters clusterName="<cluster-name>"
    
  4. Vérifiez la propriété authConfig sur le cluster à l’aide de az resource show.

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

    Note

    La sortie doit inclure la allowedModes liste. Si l’ID Microsoft Entra a été activé avec succès, le tableau contient à la fois NativeAuth et MicrosoftEntraID.

  1. Dans le volet Accueil du portail Azure, recherchez et sélectionnez l’option Microsoft Entra ID .

    Capture d’écran de l’option Microsoft Entra ID dans la page « Accueil » du portail Azure.

    Conseil / Astuce

    Si cette option n’est pas répertoriée, sélectionnez Plus de services, puis recherchez l’ID Microsoft Entra à l’aide du terme de recherche « Entra ».

  2. Dans le volet Vue d’ensemble du locataire Microsoft Entra ID, sélectionnez Utilisateurs dans la section Gérer du menu de service.

    Capture d’écran de l’option « Utilisateurs » dans le menu de service du locataire Microsoft Entra ID.

  3. Dans la liste des utilisateurs, sélectionnez l’identité (utilisateur) à laquelle vous souhaitez obtenir plus de détails.

    Capture d’écran de la liste des utilisateurs d’un locataire Microsoft Entra ID avec un exemple d’utilisateur mis en surbrillance.

    Note

    Cette capture d’écran illustre un exemple d’utilisateur nommé « Kai Carter » avec un principal de kai@adventure-works.com.

  4. Dans le volet d’informations de l’utilisateur spécifique, observez la valeur de la propriété ID d’objet .

    Capture d’écran du volet d’informations d’un utilisateur avec l’ID d’objet mis en surbrillance.

    Conseil / Astuce

    Enregistrez la valeur de la propriété ID d’objet . Dans cet exemple, cette valeur serait aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Cette valeur peut ensuite être utilisée dans différents scripts pour accorder des autorisations de contrôle d’accès en fonction du rôle à votre compte actuel aux ressources Azure. Les étapes sont similaires si vous utilisez une identité managée.

  5. Accédez à la ressource de cluster Azure DocumentDB existante.

  6. Dans le menu du cluster, sous Paramètres, sélectionnez Authentification.

  7. Dans la section Méthodes d’authentification , sélectionnez Native DocumentDB et Microsoft Entra ID pour activer l’authentification Microsoft Entra ID avec l’authentification native.

  8. Sélectionnez Enregistrer pour conserver la modification.

  9. La section Méthodes d’authentification doit maintenant répertorier nativeAuth et MicrosoftEntraID comme méthodes activées.

  1. (Facultatif) Obtenez l’identificateur unique du principal Microsoft Entra que vous envisagez d’inscrire sur le cluster. Vous pouvez l’obtenir avec Azure CLI à l’aide de l’une des commandes suivantes :

    • Identité de connexion actuelle

      az ad signed-in-user show      
      
    • Une autre identité humaine à l’aide d’un nom convivial

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Principal de service à l’aide de l’identificateur d’application

      az ad sp show \
        --id "<application-id>"
      
    • Identité managée à l’aide du groupe de ressources et du nom

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Créez un fichier de configuration Terraform pour activer l’authentification Microsoft Entra ID sur votre cluster existant. Enregistrez le fichier sous le nom 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
    }
    

    Conseil / Astuce

    Pour plus d’informations sur les options à l’aide de la azurerm_mongo_cluster ressource, consultez azurerm la documentation du fournisseur dans Terraform Registry.

  3. Créez un fichier de variables nommé enable-entra-id.tfvars avec les détails de votre cluster :

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    
  4. Initialisez et appliquez la configuration Terraform pour activer l’authentification 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. Vérifiez la propriété authConfig sur le cluster à l’aide de az resource show.

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

    Note

    La sortie doit inclure la allowedModes liste. Si l’ID Microsoft Entra a été activé avec succès, le tableau contient à la fois NativeAuth et MicrosoftEntraID.

Gérer les identités d'administration Microsoft Entra ID de DocumentDB et les utilisateurs natifs

Quand l’authentification Microsoft Entra ID est activée sur un cluster Azure DocumentDB, vous pouvez ajouter un ou plusieurs principaux Microsoft Entra ID en tant qu’utilisateurs administrateurs à ce cluster. L’administrateur Microsoft Entra ID peut être un utilisateur Microsoft Entra ID, un principal de service ou une identité managée. Plusieurs administrateurs Microsoft Entra ID peuvent être configurés à tout moment.

Les utilisateurs d'ID Entra administratif sont créés en tant qu'entités Azure dans Microsoft.DocumentDB/mongoClusters/users et sont répliqués dans la base de données.

En outre, un ou plusieurs utilisateurs non administrateurs de Microsoft Entra ID peuvent être ajoutés à un cluster à tout moment une fois l’authentification d’ID Microsoft Entra activée. Les utilisateurs non administrateurs sont souvent utilisés pour les tâches de production en cours qui ne nécessitent pas de privilèges d’administration.

Pour Azure DocumentDB, cet accès est accordé en inscrivant les principaux Microsoft Entra sur le cluster et en les mappant aux rôles de base de données MongoDB (par exemple, readWrite sur une base de données ou root sur la admin base de données). Les principaux inscrits sont créés en tant que ressources Azure de type Microsoft.DocumentDB/mongoClusters/users dont les noms prennent la forme <cluster-name>/users/<principal-id>.

Les utilisateurs administratifs disposent de privilèges complets pour gérer le cluster et ses données, notamment des fonctionnalités complètes de gestion des utilisateurs. Les utilisateurs non administrateurs peuvent bénéficier d’autorisations en lecture-écriture ou en lecture seule sur le cluster via des rôles de base de données MongoDB spécifiques. Les rôles readWriteAnyDatabase et clusterAdmin accordent ensemble des autorisations en lecture-écriture complètes sur le cluster, notamment des privilèges pour la gestion de base de données et les opérations de base de données. Le rôle readAnyDatabase est utilisé pour accorder des autorisations en lecture seule sur le cluster. Vous ne pouvez pas attribuer de rôles readWriteAnyDatabase et clusterAdmin séparément. Ils doivent être accordés ensemble pour un accès en lecture-écriture complet.

Les utilisateurs non administrateurs (secondaires) et les principaux de sécurité reçoivent des autorisations de gestion des utilisateurs limitées sur le cluster, comme décrit dans le tableau suivant :

Fournisseur de sécurité Role CréerUtilisateur DeleteUser UpdateUser ListUser
Microsoft Entra ID (système d'identification de Microsoft) Lecture-écriture (readWriteAnyDatabase, clusterAdmin) ✔️
Microsoft Entra ID (système d'identification de Microsoft) Lecture seule (readAnyDatabase) ✔️
DocumentDB natif Lecture-écriture (readWriteAnyDatabase, clusterAdmin) Uniquement pour modifier son propre mot de passe ✔️
DocumentDB natif Lecture seule (readAnyDatabase) Uniquement pour modifier son propre mot de passe ✔️
  1. Obtenez l’identificateur unique (ID d’objet) du principal Microsoft Entra auquel vous souhaitez accorder l’accès à l’aide de l’une des commandes suivantes :

    • Identité de connexion actuelle

      az ad signed-in-user show      
      
    • Une autre identité humaine à l’aide d’un nom convivial

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Principal de service à l’aide de l’identificateur d’application

      az ad sp show \
        --id "<application-id>"
      
    • Identité managée à l’aide du groupe de ressources et du nom

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Inscrivez le principal sur le cluster et mappez-le aux rôles de base de données MongoDB. L’exemple suivant inscrit un principal en tant qu’utilisateur readWrite sur la sales base de données :

    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
    
    • Remplacez principalType par servicePrincipal pour les objets principaux d'application/service ou ManagedIdentity pour les identités gérées.
    • Pour accorder des privilèges d’administration, utilisez-le {"db":"admin","role":"root"} dans le roles tableau.
  3. Répertorier tous les principaux enregistrés et leurs rôles associés (niveau cluster) :

    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 réponse contient un tableau des ressources utilisateur, chacune avec des métadonnées identityProvider et un tableau roles montrant les rôles de base de données mappés.
  4. Obtenir les détails d’un principal inscrit spécifique (remplacement <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. Supprimer un principal inscrit (révoquer l’accès au plan de données) :

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Créez un fichier Bicep (par exemple register-principal.bicep) pour inscrire le principal et mapper les rôles de la base de données :

    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. Déployez le modèle Bicep pour inscrire le principal :

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file register-principal.bicep \
        --parameters clusterName="<cluster-name>" principalId="<principal-id>"
    
  3. Listez tous les principaux inscrits sur le cluster à l’aide de l’API REST (utile après un déploiement 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. Obtenez les détails d’un principal inscrit particulier créé par Bicep (remplacer <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. Supprimez le principal en supprimant la ressource (ou déployez un modèle sans la ressource utilisateur) :

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Ouvrez le cluster Azure DocumentDB cible dans le portail Azure.

  2. Sous Paramètres, sélectionnez Authentication.

  3. Dans la section Authentification Microsoft Entra ID, le portail liste les principaux Microsoft Entra inscrits par ID d’objet. Utilisez cette vue pour :

    • Analysez la liste des identificateurs d’objet attendus.
    • Inspectez les détails d’un seul principal en sélectionnant une entrée répertoriée (ou utilisez la fonctionnalité de recherche du portail).
    • Utilisez l’action Supprimer en regard d’une entrée pour révoquer immédiatement l’accès au plan de données du principal.
  4. Pour obtenir des noms conviviaux pour les identificateurs d’objet affichés dans la liste du portail, utilisez la page Utilisateurs de la section Microsoft Entra ID . Ensuite, recherchez par ID d’objet ou nom convivial.

  1. Obtenez l’identificateur unique (ID d’objet) du principal Microsoft Entra auquel vous souhaitez accorder l’accès à l’aide de l’une des commandes suivantes :

    • Identité de connexion actuelle

      az ad signed-in-user show      
      
    • Une autre identité humaine à l’aide d’un nom convivial

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Principal de service à l’aide de l’identificateur d’application

      az ad sp show \
        --id "<application-id>"
      
    • Identité managée à l’aide du groupe de ressources et du nom

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Créez un fichier Terraform (par exemple register-principal.tf) pour inscrire le principal et mapper les rôles de base de données à l’aide du fournisseur 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
        }
      }
    }
    

    Conseil / Astuce

    Pour plus d’informations sur le fournisseur AzAPI, consultez la documentation du fournisseur Azure AzAPI.

    • Remplacez principalType par servicePrincipal pour les objets principaux d'application/service ou ManagedIdentity pour les identités gérées.
    • Pour accorder des privilèges d’administration, utilisez-le {"db":"admin","role":"root"} dans le roles tableau.
  3. Créez un fichier de variables nommé 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. Initialisez et appliquez la configuration Terraform pour inscrire le principal :

    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. Répertoriez toutes les entités enregistrées pour le cluster à l’aide de l’API REST (utile après le déploiement 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. Obtenez les détails d’un principal inscrit spécifique créé par Terraform (remplacement <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. Supprimez le principal en détruisant la ressource Terraform :

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

Note

Un cluster Azure DocumentDB est créé avec un utilisateur DocumentDB natif intégré. Vous pouvez ajouter des utilisateurs DocumentDB administratifs natifs une fois l’approvisionnement de cluster terminé. Les utilisateurs administratifs Microsoft Entra ID ajoutés au cluster vont être en plus des utilisateurs DocumentDB administratifs natifs définis sur le même cluster. Toutes les identités d’ID Microsoft Entra d’administration sont répliquées dans la base de données.

Les identités d’ID Microsoft Entra nonadministratives sont créées dans la base de données. Quand vous lister des utilisateurs non administratifs dans la base de données, la liste contient toutes les identités d’ID Microsoft Entra administratives et non administratives et tous les utilisateurs DocumentDB natifs (non administratifs) secondaires.

Obtenir les informations d’identification du cluster

Vous pouvez vous connecter au cluster à l’aide d’un URI de connexion ou d’un objet de paramètres personnalisés à partir du pilote pour votre langue préférée. Dans les deux cas, le schéma doit être défini à mongodb+srv afin de se connecter au cluster. L’hôte se trouve soit sur le domaine *.global.mongocluster.cosmos.azure.com, soit sur le domaine *.mongocluster.cosmos.azure.com, selon que vous utilisez le cluster actuel ou le point de terminaison global en lecture et écriture. Le +srv schéma et l’hôte *.global.* garantissent que votre client est connecté dynamiquement au cluster accessible en écriture approprié dans une configuration multi-cluster, même si une opération d’échange de région se produit. Dans une configuration à cluster unique, vous pouvez utiliser une chaîne de connexion sans discrimination.

Le tls paramètre doit également être activé. Les paramètres recommandés restants sont les paramètres de configuration recommandés.

Choix Valeur
scheme mongodb+srv
host <cluster-name>.global.mongocluster.cosmos.azure.com ou <cluster-name>.mongocluster.cosmos.azure.com
tls true
authMechanism MONGODB-OIDC
retrywrites false
maxIdleTimeMS 120000

Important

Utilisez le portail Azure pour obtenir la chaîne de connexion.

  1. Accédez au cluster Azure DocumentDB.

  2. Sélectionnez l’option de menu de navigation chaînes de connexion.

  3. Copiez ou enregistrez la valeur à partir du champ chaîne de connexion .

    Conseil / Astuce

    Les chaînes de connexion Microsoft Entra ID se trouvent dans la section Microsoft Entra ID .

Se connecter à l’aide de Microsoft Entra ID dans MongoDB Shell

Utilisez un appareil client avec MongoDB Shell installé pour vous connecter à votre cluster Azure DocumentDB à l’aide d’une identité Microsoft Entra ID.

  1. Ouvrez un terminal sur un client avec l’interpréteur de commandes MongoDB installé.

  2. Obtenez le nom de votre cluster Azure DocumentDB et l’ID client de l’identité cible.

  3. Connectez-vous à l’aide de la chaîne de connexion suivante :

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

Se connecter à l’aide de Microsoft Entra ID dans Visual Studio Code

Utilisez Visual Studio Code avec l’extension DocumentDB pour vous connecter à votre cluster Azure DocumentDB à l’aide d’une identité Microsoft Entra ID.

Important

Lorsque vous vous authentifiez auprès d’un cluster Azure DocumentDB à l’aide de Microsoft Entra ID dans Visual Studio Code avec l’extension DocumentDB, shell la fonctionnalité n’est pas prise en charge. Si vous devez utiliser l’interpréteur de commandes MongoDB avec l’authentification Microsoft Entra ID, utilisez MongoDB Shell directement sur une machine cliente.

  1. Ouvrez Visual Studio Code.

  2. Accédez à l’extension DocumentDB dans la barre latérale.

  3. Dans la section Connexions , sélectionnez + Nouvelle connexion....

  4. Dans la boîte de dialogue de type de connexion, sélectionnez Chaîne de connexion.

  5. Utilisez la chaîne de connexion suivante :

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
    
  6. Attendez que l’invite automatique utilise l’authentification Microsoft Entra ID. Entrez les informations d’identification appropriées pour votre type d’identité.

    Note

    Par exemple, si vous vous connectez à l’aide de votre propre identité (identité humaine), utilisez l’expérience d’authentification sans mot de passe.

  7. Attendez la finalisation de la connexion. Une nouvelle entrée DocumentDB est ensuite ajoutée à la section Connexions du cluster.

Se connecter à l’aide de l’ID Microsoft Entra dans MongoDB Compass

Connectez-vous à votre cluster Azure DocumentDB à l’aide d’une identité Microsoft Entra ID directement avec l’application MongoDB Compass .

  1. Démarrez l’application MongoDB Compass.

  2. Sélectionnez + le menu Connexions pour ajouter une nouvelle connexion.

  3. Activez le paramètre Modifier la chaîne de connexion pour l’activer dans la boîte de dialogue Nouvelle connexion .

  4. Entrez la chaîne de connexion suivante dans la zone de saisie d’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. Ouvrez maintenant la boîte de dialogue Options de connexion avancées .

  6. Dans la section Général , sélectionnez mongodb+srv le schéma de chaîne de connexion.

  7. Ensuite, accédez à la section Authentification .

  8. Vérifiez que l’option OIDC est sélectionnée.

  9. À présent, accédez à la section Options OIDC .

  10. Vérifiez que l’option Considérer l'endpoint cible de confiance est également sélectionnée.

  11. Sélectionnez Enregistrer &Se connecter.

Gérer les identités secondaires (nonadministrative) de DocumentDB dans Microsoft Entra ID

Connectez-vous au cluster avec une identité d’ID Microsoft Entra administratif pour effectuer des opérations de gestion pour les identités d’ID Microsoft Entra nonadministratives.

Note

Toutes les commandes de gestion pour les utilisateurs non administrateurs sont prises en charge pour les types principaux SecurityPrincipal et user.

  1. Connectez-vous au cluster à l’aide d’une identité d’ID Microsoft Entra administratif et à l’aide d’un outil tel que MongoDB Shell.

  2. Ajoutez une identité Microsoft Entra ID nonadministrative avec des autorisations lecture-écriture sur le cluster à l’aide de la commande 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. Ajoutez une identité Microsoft Entra ID nonadministrative avec des autorisations en lecture seule sur le cluster avec createUser et un autre ensemble de rôles.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "readAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  4. Supprimez une identité Microsoft Entra ID nonadministrative du cluster avec la dropUser commande.

    db.runCommand(
      {
        dropUser: "<entra-id-unique-identifier>"
      }
    )
    
  5. Répertoriez tous les utilisateurs de Microsoft Entra ID et DocumentDB natifs sur le cluster à l’aide de userInfo.

    db.runCommand(
      {
        usersInfo: 1
      }
    )
    

    Note

    Tous les utilisateurs administratifs Microsoft Entra ID et DocumentDB natifs sont répliqués dans la base de données. En raison de cette réplication, la liste des utilisateurs inclut tous les utilisateurs administratifs et non administrateurs Microsoft Entra ID et utilisateurs DocumentDB natifs sur le cluster.

Se connecter à l’aide de Microsoft Entra ID dans un code

Vérifiez que vous avez correctement accordé l’accès à l’aide du code d’application et de la bibliothèque cliente appropriée pour votre langue préférée.

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