Delen via


Verbinding maken met Azure DocumentDB met behulp van op rollen gebaseerd toegangsbeheer en Microsoft Entra-id

Azure DocumentDB ondersteunt Microsoft Entra ID naast systeemeigen DocumentDB-verificatie. Elk cluster wordt gemaakt met systeemeigen verificatie ingeschakeld en één ingebouwde gebruiker met beheerdersrechten.

Op rollen gebaseerd toegangsbeheer biedt een gecentraliseerd mechanisme voor het toewijzen en afdwingen van machtigingen via Microsoft Entra ID, zodat alleen geautoriseerde identiteiten bewerkingen op uw clusters kunnen uitvoeren. Deze aanpak vereenvoudigt governance, ondersteunt beginselen met minimale bevoegdheden en maakt controle eenvoudig. Organisaties kunnen de operationele integriteit en naleving behouden naarmate de implementaties toenemen. Het beheren van toegang in Azure DocumentDB omvat twee verschillende niveaus:

  • Op rollen gebaseerde toegang van Azure voor het beheren van het cluster als een Azure-resource (zoals het lezen van metagegevens, het beheren van firewallregels en het configureren van privé-eindpunten)
  • DocumentDB-toegang voor het lezen en schrijven van gegevens in databases en verzamelingen in het cluster.

Schakel Microsoft Entra ID in om Microsoft Entra-principals (gebruikers, service-principals of beheerde identiteiten) toe te staan om te authenticeren bij het cluster. Microsoft Entra ID-verificatie wordt geïmplementeerd met behulp van OpenID Connect (OIDC). Clients presenteren een door Entra uitgegeven OIDC-toegangstoken aan het MongoDB-stuurprogramma. Voor een cluster moet systeemeigen verificatie zijn ingeschakeld; de ondersteunde configuraties zijn alleen systeemeigen verificatie of Microsoft Entra ID-verificatie of systeemeigen en Microsoft Entra ID-verificatie.

Opmerking

U kunt verificatiemethoden op elk gewenst moment na het inrichten in- of wijzigen in een cluster. Voor het wijzigen van verificatiemethoden is niet opnieuw opstarten van het cluster vereist en is dit niet storend. Wanneer een cluster wordt gemaakt, moet systeemeigen DocumentDB-verificatie zijn ingeschakeld. U kunt systeemeigen verificatie uitschakelen nadat het cluster is ingericht.

Voordelen van het gebruik van Microsoft Entra ID voor verificatie zijn:

  • Uniforme identiteit en aanmelding bij Azure-services.
  • Gecentraliseerd beheer van referenties, wachtwoordbeleid en rotatie.
  • Ondersteuning voor methoden voor wachtwoordloze en meervoudige verificatie van Microsoft Entra ID.
  • Verificatie op basis van tokens voor toepassingen, waardoor opgeslagen wachtwoorden worden geëlimineerd.

Wanneer Microsoft Entra ID-verificatie is ingeschakeld, kunt u een of meer Microsoft Entra-principals registreren als beheerder- of niet-beheerdergebruikers op de cluster. Geregistreerde principals worden Azure-resources onder Microsoft.DocumentDB/mongoClusters/users en worden gerepliceerd naar de database; het toewijzen van deze principals aan MongoDB-databaserollen verleent de bijbehorende databasebevoegdheden. Deze vorm van verificatie ondersteunt meerdere principal-typen, waaronder; menselijke gebruikers, service-principals (apps), door de gebruiker toegewezen en door het systeem toegewezen beheerde identiteiten.

Opmerking

U kunt meerdere Microsoft Entra ID-identiteiten en typen identiteiten tegelijk configureren als beheerders voor een cluster. Identiteitstypen voor Microsoft Entra-id's omvatten, maar zijn niet beperkt tot:

  • Menselijke identiteiten
  • Door de gebruiker toegewezen beheerde identiteiten
  • Door het systeem toegewezen beheerde identiteiten
  • Workload-identiteiten

Alle identiteitstypen kunnen tegelijkertijd beheerders zijn.

Gebruikers met beheerdersrechten hebben volledige bevoegdheden voor het beheren van het cluster en de bijbehorende gegevens. Niet-beheerders kunnen worden toegevoegd voor lopende productietaken waarvoor geen beheerdersbevoegdheden zijn vereist. Niet-beheerders hebben doorgaans beperkte rollen, zoals alleen-lezen of lees-schrijftoegang tot specifieke databases, maar beschikken niet over de mogelijkheid om beheeracties voor het hele cluster uit te voeren.

Bekijk de volgende overwegingen voordat u deze functie gebruikt:

  • Verificatiemethoden op het primaire cluster en op het replicacluster worden onafhankelijk beheerd.
  • Microsoft Entra-principals zijn persistent in de metagegevens van het cluster. Als een principal wordt verwijderd uit Microsoft Entra ID, blijft de bijbehorende clustergebruiker behouden, maar kan deze geen nieuwe tokens meer ontvangen. Bestaande tokens blijven geldig totdat ze verlopen (meestal tot 90 minuten na de uitgifte van het token).
  • Als u de toegang onmiddellijk wilt intrekken, verwijdert u de principal uit het cluster (verwijdert u de users/<principal-id> resource) en verwijdert u alle bijbehorende databaserollen. Databasebeheerders moeten de overdracht van eigendom afhandelen of opschonen voor verwijderde principals.

Vereiste voorwaarden

  • Een Azure-abonnement

  • Een bestaand Azure DocumentDB-cluster

  • Een of meer bestaande identiteiten in Microsoft Entra ID.

Op rollen gebaseerd toegangsbeheer van Azure beheren

Op rollen gebaseerd toegangsbeheer van Azure verwijst naar de mogelijkheid om resources voor een Azure-service te beheren zonder gegevens te beheren. Op rollen gebaseerde toegang voor Azure DocumentDB-clusters kan bijvoorbeeld de volgende mogelijkheden omvatten:

  • Alle account- en resourcemetagegevens lezen
  • Verbindingsreeksen lezen en opnieuw genereren
  • Databases en verzamelingen beheren
  • Accounteigenschappen wijzigen

Azure DocumentDB ondersteunt op rollen gebaseerd toegangsbeheer van Azure voor mongoCluster het resourcetype. De volgende acties voor mongoCluster het resourcetype zijn beschikbaar in op rollen gebaseerd toegangsbeheer van Azure voor afzonderlijke toewijzingen en het maken van aangepaste op rollen gebaseerd toegangsbeheer:

Description
Microsoft.DocumentDB/mongoClusters/read U leest een mongoCluster-resource of geeft een lijst van alle mongoCluster-resources weer.
Microsoft.DocumentDB/mongoClusters/write De eigenschappen of tags van de opgegeven mongoCluster resource maken of bijwerken.
Microsoft.DocumentDB/mongoClusters/delete Hiermee verwijdert u de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/PrivateEndpointConnectionsApproval/action De privé-eindpuntverbinding van mongoCluster resource beheren
Microsoft.DocumentDB/mongoClusters/listConnectionStrings/action Verbindingsreeksen voor een bepaalde mongoCluster resource weergeven
Microsoft.DocumentDB/mongoClusters/firewallRules/read Leest een firewallregel of vermeldt alle firewallregels voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/firewallRules/write Een firewallregel voor een opgegeven mongoCluster resource maken of bijwerken.
Microsoft.DocumentDB/mongoClusters/firewallRules/delete Hiermee verwijdert u een bestaande firewallregel voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/read Leest een proxy voor een privé-eindpuntverbinding voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/write Een privé-eindpuntverbindingsproxy maken of bijwerken voor een opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/delete Hiermee verwijdert u een bestaande proxy voor een privé-eindpuntverbinding voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/validate/action Valideert de proxy voor de privé-eindpuntverbinding voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/read Hiermee wordt een privé-eindpuntverbinding gelezen of worden alle privé-eindpuntverbindingen voor de opgegeven mongoCluster resource weergegeven.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/write Een privé-eindpuntverbinding maken of bijwerken voor een opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/delete Hiermee verwijdert u een bestaande privé-eindpuntverbinding voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/privateLinkResources/read Leest een private link-resource of geeft een lijst weer van alle private link-resources voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/users/read Leest een gebruiker of geeft een lijst weer van alle gebruikers voor de opgegeven mongoCluster resource.
Microsoft.DocumentDB/mongoClusters/users/write Een gebruiker voor een opgegeven mongoCluster resource maken of bijwerken.
Microsoft.DocumentDB/mongoClusters/users/delete Hiermee verwijdert u een bestaande gebruiker voor de opgegeven mongoCluster resource.
  1. Open een nieuwe terminal.

  2. Meld u aan bij Azure CLI.

  3. Gebruik az group show dit om de metagegevens voor uw huidige resourcegroep op te halen.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. Bekijk de uitvoer van de vorige opdracht. Noteer de waarde van de id eigenschap voor deze resourcegroep, omdat deze in de volgende stap moet worden gebruikt.

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

    Opmerking

    In dit voorbeeld zou de id waarde /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Deze tekenreeks is een ingekort voorbeeld van de uitvoer.

  5. Maak een nieuw JSON-bestand met de naamrole-definition.json. Maak in het bestand deze resourcedefinitie die de waarden opgeeft die hier worden vermeld. Voeg voor de AssignableScopes-lijst de id-eigenschap toe van de resource-groep die in de vorige stap is genoteerd.

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

    Opmerking

    In dit voorbeeld wordt de /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example waarde gebruikt die is vastgelegd in de vorige stap. De werkelijke resource-id kan afwijken.

  6. Maak een nieuwe roldefinitie met behulp van az role definition create. Gebruik het role-definition.json-bestand als invoer voor het --role-definition argument.

    az role definition create \
        --role-definition role-definition.json
    
  7. Controleer de uitvoer van de opdracht voor het maken van de definitie. De uitvoer bevat de unieke id van de roldefinitie in de id eigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.

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

    Opmerking

    In dit voorbeeld zou de id waarde /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Dit voorbeeld is een subset van de typische JSON die wordt uitgevoerd vanuit de implementatie voor duidelijkheid.

  1. Open een nieuwe terminal.

  2. Meld u aan bij Azure CLI.

  3. Maak een nieuw Bicep-bestand om uw roldefinitie te definiëren. Geef het bestand de naam control-plane-role-definition.bicep. Voeg deze actions toe aan de definitie:

    Description
    Microsoft.DocumentDb/mongoClusters/* Hiermee schakelt u alle mogelijke acties in.
    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. Implementeer de Bicep-sjabloon met behulp van az deployment group create. Geef de naam op van de Bicep-sjabloon en de Azure-resourcegroep.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. Controleer de uitvoer van de implementatie. De uitvoer bevat de unieke id van de roldefinitie in de properties.outputs.definitionId.value eigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.

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

    Opmerking

    In dit voorbeeld zou de id waarde /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Dit voorbeeld is een subset van de typische JSON die wordt uitgevoerd vanuit de implementatie voor duidelijkheid.

  6. Maak een nieuw Bicep-bestand om uw roltoewijzing te definiëren. Geef het bestand de naam 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. Maak een nieuw Bicep-parametersbestand met de naam control-plane-role-assignment.bicepparam. In dit parameterbestand; wijs de eerder vastgelegde roldefinitie-id's toe aan de roleDefinitionId parameter en de unieke id voor uw identiteit aan de identityId parameter.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  8. Implementeer deze Bicep-sjabloon met behulp van 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. Meld u aan bij Azure Portal (https://portal.azure.com).

  2. Voer de resourcegroep in de algemene zoekbalk in.

  3. Selecteer resourcegroepen in Services.

  4. Selecteer uw bestaande resourcegroep in het deelvenster Resourcegroepen .

  5. Selecteer in het deelvenster voor de resourcegroep toegangsbeheer (IAM) in het servicemenu.

  6. Selecteer Toevoegen in het deelvenster Toegangsbeheer (IAM). Selecteer vervolgens Aangepaste rol toevoegen.

  7. Configureer in het deelvenster Basisbeginselen de volgende opties en selecteer vervolgens Volgende:

    Waarde
    Aangepaste rolnaam Azure DocumentDB RBAC Owner
    Beschrijving Can perform all Azure role-based access control actions for Azure DocumentDB clusters.
    Standaardmachtigingen Helemaal opnieuw beginnen
  8. Selecteer Machtigingen toevoegen in het deelvenster Machtigingen. Zoek vervolgens in het dialoogvenster Machtigingen naar DocumentDB. Selecteer ten slotte de optie Microsoft.DocumentDB/mongoClusters .

  9. Selecteer in het machtigingen-dialoogvenster alle acties voor Microsoft.DocumentDB/mongoClusters. Selecteer Vervolgens Toevoegen om terug te keren naar het deelvenster *Machtigingen .

  10. Ga weer naar het deelvenster Machtigingen en bekijk hoe de lijst met machtigingen eruitziet. Selecteer vervolgens Beoordelen en maken.

  11. Controleer in het deelvenster Beoordelen en maken de opgegeven opties voor de nieuwe roldefinitie. Ten slotte, selecteer Maken.

  12. Wacht totdat de portal klaar is met het maken van de roldefinitie.

  13. Selecteer In het deelvenster Toegangsbeheer (IAM)de optie Toevoegen en vervolgens Roltoewijzing toevoegen.

  14. Zoek en selecteer in het deelvenster Azure DocumentDB de rol Azure DocumentDB RBAC-eigenaar die eerder in deze handleiding is gemaakt. Klik vervolgens op Volgende.

    Aanbeveling

    U kunt desgewenst de lijst met rollen filteren om alleen aangepaste rollen op te nemen.

  15. Selecteer in het deelvenster Leden de optie Leden selecteren . Selecteer in het dialoogvenster Leden de identiteit die u dit toegangsniveau wilt verlenen voor uw Azure DocumentDB-clusters en gebruik vervolgens de optie Selecteren om uw keuze te bevestigen.

  16. Terug in het deelvenster Leden controleert u het geselecteerde lid[s] en selecteert u Beoordelen en toewijzen.

  17. Controleer in het deelvenster Beoordelen en toewijzen de opgegeven opties voor de nieuwe roltoewijzing. Selecteer ten slotte Beoordelen en toewijzen.

  18. Wacht totdat de portal klaar is met het maken van de roltoewijzing.

  1. Open een nieuwe terminal.

  2. Meld u aan bij Azure CLI.

  3. Controleer uw Azure-doelabonnement.

    az account show
    
  4. Maak een nieuw Terraform-bestand om uw roldefinitie te definiëren. Noem het bestand control-plane-role-definition.tf. Voeg deze actions toe aan de definitie:

    Description
    Microsoft.DocumentDb/mongoClusters/* Hiermee schakelt u alle mogelijke acties in.
    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. Initialiseer de Terraform-implementatie.

    terraform init --upgrade
    
  6. Maak een uitvoeringsplan voor de roldefinitie en sla het op in een bestand met de naam role-definition.tfplan.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --out "role-definition.tfplan"
    
  7. Pas het uitvoeringsplan toe om de roldefinitie te implementeren in Azure.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-definition.tfplan"
    
  8. Controleer de uitvoer van de implementatie. De uitvoer bevat de unieke id van de roldefinitie in de definition_id eigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.

  9. Maak een nieuw Terraform-bestand om uw roltoewijzing te definiëren. Geef het bestand control-plane-role-assignmenttf de naam.

    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. Maak een nieuw Terraform-variabelenbestand met de naam control-plane-role-assignment.tfvars. In dit variabelenbestand; wijs de eerder vastgelegde roldefinitie-id's toe aan de role_definition_id variabele en de unieke id voor uw identiteit aan de identity_id variabele.

    role_definition_id = "<id-of-new-role-definition>"
    identity_id        = "<id-of-existing-identity>"
    
  11. Initialiseer en pas deze Terraform-configuratie toe.

    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"
    

Microsoft Entra ID-verificatie inschakelen

Wanneer u een Azure DocumentDB-cluster maakt, is het cluster geconfigureerd om standaard alleen systeemeigen verificatie te gebruiken. Als u verificatie wilt inschakelen met behulp van Microsoft Entra ID, schakelt u de verificatiemethode Microsoft Entra ID in en voegt u Microsoft Entra ID-identiteiten toe aan het cluster.

  1. Verkrijg de gegevens voor het momenteel aangemelde account met behulp van az ad signed-in-user.

    az ad signed-in-user show
    
  2. Met de opdracht wordt een JSON-antwoord uitgevoerd dat verschillende velden bevat.

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

    Aanbeveling

    Noteer de waarde van het id veld. In dit voorbeeld zou dat aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb zijn. Deze waarde kan vervolgens worden gebruikt in verschillende scripts om uw huidige op rollen gebaseerd toegangsbeheermachtigingen voor Azure-resources te verlenen. Als u in plaats daarvan een beheerde identiteit gebruikt, kunt u de id voor die beheerde identiteit verkrijgen met behulp van de az identity show opdracht.

  3. Schakel Microsoft Entra ID-verificatie in op het cluster door de clusterresource bij te werken om MicrosoftEntraID op te nemen in de authConfig.allowedModes array.

    az resource patch \
        --resource-group "<resource-group>" \
        --name "<cluster-name>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters" \
        --properties '{"authConfig":{"allowedModes":["MicrosoftEntraID","NativeAuth"]}}' \
        --latest-include-preview
    

    Opmerking

    Vervang <resource-group> en <cluster-name> door uw eigen waarden.

  4. Controleer of de wijziging is toegepast door de authConfig eigenschap op het cluster te lezen met behulp van az resource show.

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

    Opmerking

    De uitvoer moet de allowedModes lijst bevatten. Als Microsoft Entra-id is ingeschakeld, bevat de matrix zowel NativeAuth als MicrosoftEntraID.

  1. (Optioneel) Haal de unieke identificatie op voor de Microsoft Entra-principal (hoofdgebruiker) die je wilt registreren op het cluster. U kunt deze verkrijgen met de Azure CLI met behulp van een van de volgende opdrachten:

    • Huidige aanmeldingsidentiteit

      az ad signed-in-user show      
      
    • Een andere menselijke identiteit met een vriendelijke naam

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service-principal met app-identificatie

      az ad sp show \
        --id "<application-id>"
      
    • Beheerde identiteit met behulp van resourcegroep en naam

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Maak een kleine Bicep-sjabloon waarmee het cluster authConfig wordt bijgewerkt om Microsoft Entra-id op te nemen (opslaan als 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. Implementeer de sjabloon om het cluster bij te werken:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file enable-entra-id.bicep \
        --parameters clusterName="<cluster-name>"
    
  4. Controleer de authConfig eigenschap op het cluster met behulp van az resource show.

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

    Opmerking

    De uitvoer moet de allowedModes lijst bevatten. Als Microsoft Entra-id is ingeschakeld, bevat de matrix zowel NativeAuth als MicrosoftEntraID.

  1. Zoek en selecteer in het deelvenster Start van Azure Portal de optie Microsoft Entra-id .

    Schermopname van de optie Microsoft Entra-id op de startpagina van Azure Portal.

    Aanbeveling

    Als deze optie niet wordt weergegeven, selecteert u Meer services en zoekt u naar Microsoft Entra-id met behulp van de zoekterm Entra.

  2. Selecteer in het deelvenster Overzicht voor de Microsoft Entra ID-tenant Gebruikers in de sectie Beheren van het servicemenu.

    Schermopname van de optie 'Gebruikers' in het servicemenu voor de Microsoft Entra ID-tenant.

  3. Selecteer in de lijst met gebruikers de identiteit (gebruiker) waarover u meer informatie wilt krijgen.

    Schermopname van de lijst met gebruikers voor een Microsoft Entra ID-tenant met een voorbeeldgebruiker gemarkeerd.

    Opmerking

    Deze schermopname illustreert een voorbeeldgebruiker met de naam 'Kai Carter' met een principal van kai@adventure-works.com.

  4. Bekijk in het detailvenster voor de specifieke gebruiker de waarde van de eigenschap Object-id .

    Schermopname van het detailvenster van een gebruiker met de object-id gemarkeerd.

    Aanbeveling

    Noteer de waarde van de eigenschap Object-id . In dit voorbeeld zou dat aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb zijn. Deze waarde kan vervolgens worden gebruikt in verschillende scripts om uw huidige op rollen gebaseerd toegangsbeheermachtigingen voor Azure-resources te verlenen. De stappen zijn vergelijkbaar als u een beheerde identiteit gebruikt.

  5. Navigeer naar de bestaande Azure DocumentDB-clusterresource.

  6. Selecteer Verificatie in het clustermenu onder Instellingen.

  7. Selecteer in de sectie Verificatiemethodensysteemeigen DocumentDB en Microsoft Entra ID om Microsoft Entra ID-verificatie in te schakelen naast systeemeigen verificatie.

  8. Selecteer Opslaan om de wijziging te behouden.

  9. In de sectie Verificatiemethoden moeten nu zowel NativeAuth als MicrosoftEntraID worden vermeld als ingeschakelde methoden.

  1. (Optioneel) Haal de unieke identificatie op voor de Microsoft Entra-principal (hoofdgebruiker) die je wilt registreren op het cluster. U kunt deze verkrijgen met de Azure CLI met behulp van een van de volgende opdrachten:

    • Huidige aanmeldingsidentiteit

      az ad signed-in-user show      
      
    • Een andere menselijke identiteit met een vriendelijke naam

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service-principal met app-identificatie

      az ad sp show \
        --id "<application-id>"
      
    • Beheerde identiteit met behulp van resourcegroep en naam

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Maak een Terraform-configuratiebestand om Microsoft Entra ID-verificatie in te schakelen op uw bestaande cluster. Sla het bestand op als 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
    }
    

    Aanbeveling

    Zie de providerdocumentatie in de Terraform Registry voor meer informatie over opties voor het gebruik van de azurerm_mongo_cluster resource.

  3. Maak een variabelenbestand met de naam enable-entra-id.tfvars met de clustergegevens:

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    
  4. Initialiseer en pas de Terraform-configuratie toe om Microsoft Entra ID-verificatie in te schakelen:

    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. Controleer de authConfig eigenschap op het cluster met behulp van az resource show.

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

    Opmerking

    De uitvoer moet de allowedModes lijst bevatten. Als Microsoft Entra-id is ingeschakeld, bevat de matrix zowel NativeAuth als MicrosoftEntraID.

Beheer Microsoft Entra ID-identiteiten en systeemeigen gebruikers van DocumentDB

Wanneer Microsoft Entra ID-verificatie is ingeschakeld op een Azure DocumetnDB-cluster, kunt u een of meer Microsoft Entra ID-principals toevoegen als beheerdersgebruikers aan dat cluster. De Microsoft Entra ID-beheerder kan een Microsoft Entra ID-gebruiker, een service-principal of een beheerde identiteit zijn. Meerdere Microsoft Entra ID-beheerders kunnen op elk gewenst moment worden geconfigureerd.

Administratieve Entra ID-gebruikers worden aangemaakt als Azure-entiteiten onder Microsoft.DocumentDB/mongoClusters/users en gerepliceerd naar de database.

Bovendien kunnen een of meer niet-beheerders van Microsoft Entra ID-gebruikers op elk gewenst moment aan een cluster worden toegevoegd zodra Microsoft Entra ID-verificatie is ingeschakeld. Niet-beheerders worden vaak gebruikt voor lopende productietaken waarvoor geen beheerdersbevoegdheden zijn vereist.

Voor Azure DocumentDB wordt deze toegang verleend door Microsoft Entra-principals in het cluster te registreren en deze toe te kennen aan MongoDB-databaserollen (bijvoorbeeld readWrite in een database of root in de admin database). Geregistreerde principals worden gemaakt als Azure-resources van het type Microsoft.DocumentDB/mongoClusters/users waarvan de namen de vorm <cluster-name>/users/<principal-id>aannemen.

Gebruikers met beheerdersrechten hebben volledige bevoegdheden voor het beheren van het cluster en de bijbehorende gegevens, inclusief volledige mogelijkheden voor gebruikersbeheer. Niet-beheerders kunnen machtigingen voor lezen/schrijven of alleen-lezen voor het cluster krijgen via specifieke MongoDB-databaserollen. De rollen readWriteAnyDatabase en clusterAdmin verlenen samen volledige lees-/schrijfmachtigingen voor het cluster, inclusief bevoegdheden voor databasebeheer en databasebewerkingen. De rol readAnyDatabase wordt gebruikt om alleen-lezenmachtigingen voor het cluster te verlenen. U kunt de rollen readWriteAnyDatabase en clusterAdmin niet afzonderlijk toewijzen. Ze moeten samen worden verleend voor volledige lees-/schrijftoegang.

Niet-beheerders (secundaire) gebruikers en beveiligingsprinciplen krijgen beperkte gebruikersbeheermachtigingen voor het cluster, zoals beschreven in de volgende tabel:

Beveiligingsprovider Rol CreateUser DeleteUser UpdateUser Gebruikerslijst
Microsoft Entra ID Lezen en schrijven (readWriteAnyDatabase, clusterAdmin) ✔️
Microsoft Entra ID Alleen-lezen (readAnyDatabase) ✔️
Inheemse DocumentDB Lezen en schrijven (readWriteAnyDatabase, clusterAdmin) Alleen om hun eigen wachtwoord te wijzigen ✔️
Inheemse DocumentDB Alleen-lezen (readAnyDatabase) Alleen om hun eigen wachtwoord te wijzigen ✔️
  1. Haal de unieke id (object-id) op van de Microsoft Entra-principal waaraan u toegang wilt verlenen met behulp van een van de volgende opdrachten:

    • Huidige aanmeldingsidentiteit

      az ad signed-in-user show      
      
    • Een andere menselijke identiteit met een vriendelijke naam

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service-principal met app-identificatie

      az ad sp show \
        --id "<application-id>"
      
    • Beheerde identiteit met behulp van resourcegroep en naam

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Registreer de principal in het cluster en wijs deze toe aan MongoDB-databaserollen. In het volgende voorbeeld wordt een principal geregistreerd als gebruiker readWrite in de sales database:

    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
    
    • Vervang principalType door servicePrincipal voor app-/service-principals of ManagedIdentity voor beheerde identiteiten.
    • Als u beheerdersbevoegdheden wilt verlenen, gebruikt u {"db":"admin","role":"root"} in de roles array.
  3. Alle geregistreerde principals en hun toegewezen rollen weergeven (weergave op clusterniveau):

    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"
    
    • Het antwoord bevat een matrix met gebruikersbronnen, elk met identityProvider metagegevens en een roles matrix met toegewezen databaserollen.
  4. Details voor een specifieke geregistreerde principal ophalen (vervangen <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. Een geregistreerde Principal verwijderen (toegang tot dataplane intrekken):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Maak een Bicep-bestand (bijvoorbeeld register-principal.bicep) om de principal te registreren en database rollen toe te wijzen.

    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. Implementeer de Bicep-sjabloon om de principal te registreren:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file register-principal.bicep \
        --parameters clusterName="<cluster-name>" principalId="<principal-id>"
    
  3. Geef alle geregistreerde principals voor het cluster weer met behulp van de REST API (handig na bicep-implementatie):

    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. Details ophalen voor een specifieke geregistreerde principal die door Bicep is aangemaakt (vervang <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. Verwijder de principal door de resource te verwijderen (of implementeer een sjabloon zonder de gebruikersresource):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Open het Azure DocumentDB-doelcluster in Azure Portal.

  2. Selecteer bij Instellingen de optie Verificatie.

  3. In de sectie Verificatie van Microsoft Entra-id's worden in de portal de geregistreerde Microsoft Entra-principals per object-id vermeld. Gebruik deze weergave om het volgende te doen:

    • Scan de lijst op verwachte object-id's.
    • Inspecteer de details voor een enkele principal door een vermelde entry te selecteren (of gebruik de zoekfunctie in de portal).
    • Gebruik de actie Verwijderen naast een vermelding om de toegang tot de gegevensvlak van die principal onmiddellijk in te trekken.
  4. Als u vriendelijke namen wilt ophalen voor object-ID's die worden weergegeven in de portallijst, gebruikt u de pagina Gebruikers in de sectie van Microsoft Entra ID. Zoek vervolgens op object-ID of vriendelijke naam.

  1. Haal de unieke id (object-id) op van de Microsoft Entra-principal waaraan u toegang wilt verlenen met behulp van een van de volgende opdrachten:

    • Huidige aanmeldingsidentiteit

      az ad signed-in-user show      
      
    • Een andere menselijke identiteit met een vriendelijke naam

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service-principal met app-identificatie

      az ad sp show \
        --id "<application-id>"
      
    • Beheerde identiteit met behulp van resourcegroep en naam

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Maak een Terraform-bestand (bijvoorbeeld register-principal.tf) om de hoofdgebruiker te registreren en database rollen toe te wijzen met behulp van de AzAPI-provider.

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

    Aanbeveling

    Zie de documentatie van de Azure AzAPI-provider voor meer informatie over de AzAPI-provider.

    • Vervang principalType door servicePrincipal voor app-/service-principals of ManagedIdentity voor beheerde identiteiten.
    • Als u beheerdersbevoegdheden wilt verlenen, gebruikt u {"db":"admin","role":"root"} in de roles array.
  3. Maak een variabelenbestand met de naam 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. Initialiseer en pas de Terraform-configuratie toe om de principal te registreren:

    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. Geef alle geregistreerde principals voor het cluster weer met behulp van de REST API (handig na terraform-implementatie):

    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. Details ophalen voor een specifieke geregistreerde principal die is gemaakt door Terraform (vervangen <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. Verwijder de principal door de Terraform-resource te vernietigen:

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

Opmerking

Er wordt een Azure DocumentDB-cluster gemaakt met één ingebouwde systeemeigen DocumentDB-gebruiker met beheerdersrechten. U kunt meer systeemeigen DocumentDB-gebruikers met beheerdersrechten toevoegen nadat het inrichten van clusters is voltooid. Gebruikers met beheerdersrechten voor Microsoft Entra ID die aan het cluster zijn toegevoegd, komen bovenop de systeemeigen DocumentDB-gebruikers met beheerdersrechten die op hetzelfde cluster zijn gedefinieerd. Alle beheeridentiteiten van Microsoft Entra-id's worden gerepliceerd naar de database.

Niet-administratieve Microsoft Entra ID-identiteiten worden in de database aangemaakt. Wanneer u niet-administratieve gebruikers in de database vermeldt, bevat de lijst alle administratieve en niet-administratieve Microsoft Entra ID-identiteiten en alle secundaire (niet-administratieve) systeemeigen DocumentDB-gebruikers.

Clusterreferenties ophalen

U kunt verbinding maken met het cluster met behulp van een verbindings-URI of een aangepast instellingenobject van het stuurprogramma voor uw voorkeurstaal. Bij beide opties moet het schema worden ingesteld op mongodb+srv om verbinding te maken met het cluster. De host bevindt zich op het *.global.mongocluster.cosmos.azure.com- of *.mongocluster.cosmos.azure.com-domein, afhankelijk van het gebruik van het huidige cluster of de globale lees-/schrijfpunt. Het +srv schema en de *.global.* host zorgen ervoor dat uw client dynamisch is verbonden met het juiste beschrijfbare cluster in een configuratie met meerdere clusters, zelfs als er een regiowisselingsbewerking plaatsvindt. In een configuratie met één cluster kunt u afzonderlijke verbindingsreeksen gebruiken.

De tls instelling moet ook zijn ingeschakeld. De overige aanbevolen instellingen zijn best practice-configuratie-instellingen.

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

Belangrijk

Gebruik Azure Portal om de verbindingsreeks op te halen.

  1. Navigeer naar het Azure DocumentDB-cluster.

  2. Selecteer de navigatiemenuoptie Verbindingsreeksen .

  3. Kopieer of noteer de waarde uit het veld Verbindingsreeks .

    Aanbeveling

    Microsoft Entra ID-verbindingsreeksen bevinden zich in de sectie Microsoft Entra-id .

Verbinding maken met behulp van Microsoft Entra ID in MongoDB Shell

Gebruik een clientapparaat waarop MongoDB Shell is geïnstalleerd om verbinding te maken met uw Azure DocumentDB-cluster met behulp van een Microsoft Entra ID-identiteit.

  1. Open een terminal op een client waarop MongoDB-shell is geïnstalleerd.

  2. Haal de naam op van uw Azure DocumentDB-cluster en de client-id voor de doelidentiteit.

  3. Maak verbinding met behulp van de volgende verbindingsreeks:

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

Verbinding maken met behulp van Microsoft Entra ID in Visual Studio Code

Gebruik Visual Studio Code met de DocumentDB-extensie om verbinding te maken met uw Azure DocumentDB-cluster met behulp van een Microsoft Entra ID-identiteit.

Belangrijk

Wanneer u zich verifieert bij een Azure DocumentDB-cluster met behulp van Microsoft Entra ID in Visual Studio Code met de DocumentDB-extensie, shell wordt de functionaliteit niet ondersteund. Als u MongoDB-shell wilt gebruiken met Microsoft Entra ID-verificatie, gebruikt u MongoDB Shell rechtstreeks op een clientcomputer.

  1. Open Visual Studio Code.

  2. Navigeer door de DocumentDB-extensie in de zijbalk.

  3. Selecteer + Nieuwe verbinding...in de sectie Verbindingen.

  4. Selecteer verbindingsreeks in het dialoogvenster verbindingstype.

  5. Gebruik de volgende verbindingsreeks:

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
    
  6. Wacht op de automatische vraag om Microsoft Entra ID-verificatie te gebruiken. Voer de juiste inloggegevens in voor uw soort identiteit.

    Opmerking

    Als u zich bijvoorbeeld aanmeldt met uw eigen identiteit (een menselijke identiteit), gebruikt u de ervaring voor verificatie zonder wachtwoord.

  7. Wacht tot de verbinding is voltooid. Er wordt vervolgens een nieuwe DocumentDB-vermelding toegevoegd aan de sectie Verbindingen voor het cluster.

Verbinding maken met behulp van Microsoft Entra-id in MongoDB Compass

Maak rechtstreeks verbinding met uw Azure DocumentDB-cluster met behulp van een Microsoft Entra ID-identiteit met de MongoDB Compass-toepassing .

  1. Start de MongoDB Compass-toepassing.

  2. Selecteer + in het menu Verbindingen om een nieuwe verbinding toe te voegen.

  3. Schakel de instelling Verbindingsreeks bewerken in om in te schakelen in het dialoogvenster Nieuwe verbinding .

  4. Voer de volgende verbindingsreeks in het invoervak van de URI in.

    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. Open nu het dialoogvenster Geavanceerde verbindingsopties .

  6. Selecteer in de sectie mongodb+srv voor het verbindingsreeksschema.

  7. Navigeer vervolgens naar de sectie Verificatie .

  8. Zorg ervoor dat de OIDC-optie is geselecteerd.

  9. Navigeer nu naar de sectie OIDC-opties .

  10. Zorg ervoor dat de optie Vertrouwd doeleindpunt ook is geselecteerd.

  11. Selecteer Opslaan en verbinden.

Secundaire DocumentDB-identiteiten beheren (niet-beheerder) Microsoft Entra ID-identiteiten

Meld u aan bij het cluster met een beheeridentiteit van Microsoft Entra ID om beheerbewerkingen uit te voeren voor niet-beheerdersidentiteiten van Microsoft Entra ID.

Opmerking

Alle beheercommando's voor niet-beheerders worden ondersteund voor SecurityPrincipal en user principaaltypen.

  1. Meld u aan bij het cluster met behulp van een Microsoft Entra ID-identiteit met beheerdersrechten en met behulp van een hulpprogramma zoals MongoDB Shell.

  2. Voeg een niet-beheerdersidentiteit van Microsoft Entra ID toe met lees-/schrijfmachtigingen voor het cluster met behulp van de createUser opdracht:

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "clusterAdmin", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  3. Voeg een niet-administratieve Microsoft Entra ID-identiteit toe met alleen-lezenmachtigingen voor het cluster met createUser en een andere set rollen.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "readAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  4. Verwijder een niet-beheerdersidentiteit van Microsoft Entra ID uit het cluster met de dropUser opdracht.

    db.runCommand(
      {
        dropUser: "<entra-id-unique-identifier>"
      }
    )
    
  5. Geef alle Microsoft Entra-id en systeemeigen DocumentDB-gebruikers op het cluster weer met behulp van userInfo.

    db.runCommand(
      {
        usersInfo: 1
      }
    )
    

    Opmerking

    Alle Microsoft Entra ID en systeemeigen DocumentDB-beheerders worden gerepliceerd naar de database. Vanwege deze replicatie bevat de lijst met gebruikers alle beheerders- en niet-beheerdersrechten voor Microsoft Entra ID en systeemeigen DocumentDB-gebruikers in het cluster.

Verbinden met behulp van Microsoft Entra ID in code

Controleer of u de juiste toegang hebt verleend met behulp van toepassingscode en de juiste clientbibliotheek voor uw voorkeurstaal.

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