Freigeben über


Herstellen einer Verbindung mit Azure DocumentDB mithilfe der rollenbasierten Zugriffssteuerung und der Microsoft Entra-ID

Azure DocumentDB unterstützt die Microsoft Entra-ID zusammen mit der nativen DocumentDB-Authentifizierung. Jeder Cluster wird mit aktivierter systemeigener Authentifizierung und einem integrierten Administratorbenutzer erstellt.

Die rollenbasierte Zugriffssteuerung bietet einen zentralen Mechanismus zum Zuweisen und Erzwingen von Berechtigungen über die Microsoft Entra-ID, um sicherzustellen, dass nur autorisierte Identitäten Vorgänge auf Ihren Clustern ausführen können. Dieser Ansatz vereinfacht die Governance, unterstützt das Prinzip der minimalen Rechtevergabe und erleichtert das Audit – Organisationen wird dabei geholfen, die operative Integrität und Compliance aufrechtzuerhalten, wenn die Bereitstellungen wachsen. Das Verwalten des Zugriffs in Azure DocumentDB umfasst zwei unterschiedliche Ebenen:

  • Azure-rollenbasierter Zugriff zum Verwalten des Clusters als Azure-Ressource (z. B. Lesen von Metadaten, Verwalten von Firewallregeln und Konfigurieren privater Endpunkte)
  • DocumentDB-Zugriff zum Lesen und Schreiben von Daten in Datenbanken und Sammlungen im Cluster.

Aktivieren Sie die Microsoft Entra-ID, damit Microsoft Entra-Prinzipale (Benutzer, Dienstprinzipale oder verwaltete Identitäten) sich beim Cluster authentifizieren können. Die Microsoft Entra ID-Authentifizierung wird mithilfe von OpenID Connect (OIDC) implementiert. Clients legen ein von Entra ausgestelltes OIDC-Zugriffstoken dem MongoDB-Treiber vor. Für einen Cluster muss die native Authentifizierung aktiviert sein. Die unterstützten Konfigurationen sind ausschließlich native Authentifizierung, native Authentifizierung und Microsoft Entra ID-Authentifizierung. Die Microsoft Entra-ID kann nicht die einzige Authentifizierungsmethode sein.

Hinweis

Sie können Authentifizierungsmethoden auf einem Cluster jederzeit nach der Bereitstellung aktivieren oder ändern. Das Ändern von Authentifizierungsmethoden erfordert keinen Clusterneustart und ist unterbrechungsfrei. Wenn ein Cluster erstellt wird, muss die systemeigene DocumentDB-Authentifizierung aktiviert sein. Sie können die systemeigene Authentifizierung deaktivieren, nachdem die Bereitstellung des Clusters abgeschlossen ist.

Zu den Vorteilen der Verwendung der Microsoft Entra-ID für die Authentifizierung gehören:

  • Einheitliche Identität und Anmeldung über Azure-Dienste hinweg.
  • Zentrale Verwaltung von Anmeldeinformationen, Kennwortrichtlinien und Rotation.
  • Unterstützung für kennwortlose und mehrstufige Authentifizierungsmethoden von Microsoft Entra ID.
  • Tokenbasierte Authentifizierung für Anwendungen, wodurch gespeicherte Kennwörter eliminiert werden.

Wenn die Microsoft Entra-ID-Authentifizierung aktiviert ist, können Sie einen oder mehrere Microsoft Entra-Prinzipale als administrative oder nichtadministrative Benutzer im Cluster registrieren. Registrierte Prinzipale werden zu Azure-Ressourcen unter Microsoft.DocumentDB/mongoClusters/users und werden in die Datenbank repliziert. Die Zuordnung dieser Prinzipale zu MongoDB-Datenbankrollen gewährt die entsprechenden Datenbankberechtigungen. Diese Authentifizierungsform unterstützt mehrere Prinzipaltypen, einschließlich; Benutzer, Dienstprinzipale (Apps), vom Benutzer zugewiesene und vom System zugewiesene verwaltete Identitäten.

Hinweis

Sie können mehrere Microsoft Entra-ID-Identitäten und Identitätstypen als Administratoren für einen Cluster gleichzeitig konfigurieren. Microsoft Entra ID-Identitätstypen umfassen, sind jedoch nicht auf Folgendes beschränkt:

  • Menschliche Identitäten
  • Vom Benutzer zugewiesene verwaltete Identitäten
  • Vom System zugewiesene verwaltete Identitäten
  • Workloadidentitäten

Alle Identitätstypen können Administratoren gleichzeitig sein.

Administrative Benutzer verfügen über vollständige Berechtigungen zum Verwalten des Clusters und der zugehörigen Daten. Nichtadministrative Benutzer können für laufende Produktionsaufgaben hinzugefügt werden, die keine Administratorrechte erfordern. Nichtadministrative Benutzer haben in der Regel eingeschränkte Rollen, z. B. schreibgeschützten oder Lese-/Schreibzugriff auf bestimmte Datenbanken, verfügen jedoch nicht über die Möglichkeit, clusterweite administrative Aktionen auszuführen.

Lesen Sie die folgenden Überlegungen, bevor Sie dieses Feature verwenden:

  • Authentifizierungsmethoden für den primären Cluster und für den Replikatcluster werden unabhängig voneinander verwaltet.
  • Microsoft Entra-Prinzipale sind in den Clustermetadaten persistent. Wenn ein Prinzipal aus Microsoft Entra ID gelöscht wird, bleiben die entsprechenden Clusterbenutzer erhalten, können aber keine neuen Token mehr abrufen. Vorhandene Token bleiben gültig, bis sie ablaufen (in der Regel bis zu 90 Minuten nach der Ausstellung des Tokens).
  • Um den Zugriff sofort zu widerrufen, entfernen Sie den Prinzipal aus dem Cluster (löschen Sie die users/<principal-id> Ressource), und löschen Sie alle zugehörigen Datenbankrollen. Datenbankadministratoren müssen die Übertragung des Besitzes regeln oder die Bereinigung für gelöschte Prinzipale durchführen.

Voraussetzungen

  • Ein Azure-Abonnement

    • Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto
  • Ein vorhandener Azure DocumentDB-Cluster

    • Wenn Sie keinen Cluster haben, erstellen Sie einen neuen Cluster.
  • Eine oder mehrere vorhandene Identitäten in der Microsoft Entra-ID.

Verwalten der rollenbasierten Azure-Zugriffssteuerung

Die rollenbasierte Zugriffssteuerung von Azure bezieht sich auf die Möglichkeit, Ressourcen für einen Azure-Dienst zu verwalten, ohne Daten zu verwalten. Der rollenbasierte Zugriff für Azure DocumentDB-Cluster kann z. B. folgende Möglichkeiten umfassen:

  • Alle Konto- und Ressourcenmetadaten lesen
  • Lesen und Generieren von Verbindungszeichenfolgen
  • Verwalten von Datenbanken und Sammlungen
  • Ändern von Kontoeigenschaften

Azure DocumentDB unterstützt die rollenbasierte Zugriffssteuerung für mongoCluster Ressourcentypen. Die folgenden Aktionen für den mongoCluster-Ressourcentyp sind in der rollenbasierten Zugriffssteuerung für einzelne Zuordnungen und für die Erstellung benutzerdefinierter rollenbasierter Zugriffssteuerungsrollen verfügbar:

Description
Microsoft.DocumentDB/mongoClusters/read Liest eine mongoCluster Ressource oder listet alle mongoCluster Ressourcen auf.
Microsoft.DocumentDB/mongoClusters/write Dient zum Erstellen oder Aktualisieren der Eigenschaften oder Tags der angegebenen mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/delete Löscht die angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/PrivateEndpointConnectionsApproval/action Verwalten einer privaten Endpunktverbindung der mongoCluster Ressource
Microsoft.DocumentDB/mongoClusters/listConnectionStrings/action Auflisten der Verbindungszeichenfolgen für eine bestimmte mongoCluster Ressource
Microsoft.DocumentDB/mongoClusters/firewallRules/read Liest eine Firewallregel oder listet alle Firewallregeln für die angegebene mongoCluster Ressource auf.
Microsoft.DocumentDB/mongoClusters/firewallRules/write Erstellen oder Aktualisieren einer Firewallregel für eine angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/firewallRules/delete Löscht eine vorhandene Firewallregel für die angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/read Liest einen privaten Endpunktverbindungsproxy für die angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/write Erstellen oder Aktualisieren eines privaten Endpunktverbindungsproxys für eine angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/delete Löscht einen vorhandenen privaten Endpunktverbindungsproxy für die angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/validate/action Überprüft den privaten Endpunktverbindungsproxy für die angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/read Liest eine private Endpunktverbindung oder listet alle privaten Endpunktverbindungen für die angegebene mongoCluster Ressource auf.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/write Erstellen oder Aktualisieren einer privaten Endpunktverbindung für eine angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/delete Löscht eine vorhandene private Endpunktverbindung für die angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/privateLinkResources/read Liest eine private Verknüpfungsressource oder listet alle privaten Linkressourcen für die angegebene mongoCluster Ressource auf.
Microsoft.DocumentDB/mongoClusters/users/read Liest einen Benutzer oder listet alle Benutzer für die angegebene mongoCluster Ressource auf.
Microsoft.DocumentDB/mongoClusters/users/write Erstellen oder Aktualisieren eines Benutzers für eine angegebene mongoCluster Ressource.
Microsoft.DocumentDB/mongoClusters/users/delete Löscht einen vorhandenen Benutzer für die angegebene mongoCluster Ressource.
  1. Öffnen Sie ein neues Terminal.

  2. Melden Sie sich bei Azure CLI an.

  3. Verwenden Sie az group show, um die Metadaten für Ihre aktuelle Ressourcengruppe abzurufen.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. Sehen Sie sich die Ausgabe des vorherigen Befehls an. Notieren Sie den Wert der id Eigenschaft für diese Ressourcengruppe, da sie im nächsten Schritt verwendet werden muss.

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

    Hinweis

    In diesem Beispiel wäre der id-Wert /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. In diesem Beispiel werden fiktive Daten verwendet, und Ihr Bezeichner unterscheidet sich von diesem Beispiel. Diese Zeichenfolge ist ein verkürztes Beispiel für die Ausgabe.

  5. Erstellen Sie eine neue JSON-Datei mit dem Namen role-definition.json. Erstellen Sie in der Datei diese Ressourcendefinition, die die hier aufgelisteten Werte angibt. Fügen Sie für die AssignableScopes Liste die id Eigenschaft der im vorherigen Schritt aufgezeichneten Ressourcengruppe hinzu.

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

    Hinweis

    In diesem Beispiel wird der /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example im vorherigen Schritt aufgezeichnete Wert verwendet. Ihr tatsächlicher Ressourcenbezeichner könnte unterschiedlich sein.

  6. Erstellen Sie eine neue Rollendefinition mithilfe von az role definition create. Verwenden Sie die role-definition.json als Eingabe für das --role-definition-Argument.

    az role definition create \
        --role-definition role-definition.json
    
  7. Überprüfen Sie die Ausgabe des Befehls zum Erstellen von Definitionen. Die Ausgabe enthält den eindeutigen Bezeichner der Rollendefinition in der id-Eigenschaft. Notieren Sie diesen Wert, da er im Zuweisungsschritt weiter unten in diesem Leitfaden verwendet werden muss.

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

    Hinweis

    In diesem Beispiel wäre der id-Wert /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. In diesem Beispiel werden fiktive Daten verwendet, und Ihr Bezeichner unterscheidet sich von diesem Beispiel. Aus Gründen der Übersichtlichkeit handelt es sich bei diesem Beispiel um eine Teilmenge des typischen JSON-Codes, der von der Bereitstellung ausgegeben wird.

  1. Öffnen Sie ein neues Terminal.

  2. Melden Sie sich bei Azure CLI an.

  3. Erstellen Sie eine neue Bicep-Datei, um Ihre Rollendefinition zu definieren. Nennen Sie die Datei "control-plane-role-definition.bicep". Fügen Sie diese actions der Definition hinzu:

    Description
    Microsoft.DocumentDb/mongoClusters/* Aktiviert alle möglichen Aktionen.
    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. Stellen Sie die Bicep-Vorlage mithilfe von az deployment group create. Geben Sie den Namen der Bicep-Vorlage und der Azure-Ressourcengruppe an.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. Überprüfen Sie die Ausgabe der Bereitstellung. Die Ausgabe enthält den eindeutigen Bezeichner der Rollendefinition in der properties.outputs.definitionId.value-Eigenschaft. Notieren Sie diesen Wert, da er im Zuweisungsschritt weiter unten in diesem Leitfaden verwendet werden muss.

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

    Hinweis

    In diesem Beispiel wäre der id-Wert /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. In diesem Beispiel werden fiktive Daten verwendet, und Ihr Bezeichner unterscheidet sich von diesem Beispiel. Aus Gründen der Übersichtlichkeit handelt es sich bei diesem Beispiel um eine Teilmenge des typischen JSON-Codes, der von der Bereitstellung ausgegeben wird.

  6. Erstellen Sie eine neue Bicep-Datei, um Ihre Rollenzuweisung zu definieren. Nennen Sie die Datei "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. Erstellen Sie eine neue Bicep-Parameterdatei namens control-plane-role-assignment.bicepparam. In dieser Parameterdatei, weisen Sie die zuvor aufgezeichneten Rollendefinitions-IDs dem Parameter roleDefinitionId zu und den eindeutigen Bezeichner für Ihre Identität dem Parameter identityId.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  8. Stellen Sie diese Bicep-Vorlage mithilfe von 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. Melden Sie sich beim Azure-Portal (https://portal.azure.com) an.

  2. Geben Sie die Ressourcengruppe in der globalen Suchleiste ein.

  3. Wählen Sie in DienstenRessourcengruppen aus.

  4. Wählen Sie im Bereich "Ressourcengruppen " Ihre vorhandene Ressourcengruppe aus.

  5. Wählen Sie im Bereich für die Ressourcengruppe im Dienstmenü die Zugriffssteuerung (IAM) aus.

  6. Wählen Sie im Bereich Access Control (IAM)"Hinzufügen" aus. Wählen Sie dann " Benutzerdefinierte Rolle hinzufügen" aus.

  7. Konfigurieren Sie im Bereich "Grundlagen " die folgenden Optionen, und wählen Sie dann "Weiter" aus:

    Wert
    Benutzerdefinierter Rollenname Azure DocumentDB RBAC Owner
    Beschreibung Can perform all Azure role-based access control actions for Azure DocumentDB clusters.
    Basisberechtigungen Von Grund auf neu starten
  8. Wählen Sie im Bereich "Berechtigungen" die Option "Berechtigungen hinzufügen" aus. Suchen Sie dann im Berechtigungsdialog nach DocumentDB. Wählen Sie schließlich die Option "Microsoft.DocumentDB/mongoClusters " aus.

  9. Wählen Sie im Berechtigungsdialog alle Aktionen für Microsoft.DocumentDB/mongoClusters. Wählen Sie dann "Hinzufügen" aus, um zum Bereich "*Berechtigungen" zurückzukehren.

  10. Im Bereich "Berechtigungen" sehen Sie sich die Liste der Berechtigungen an. Wählen Sie dann Überprüfen + erstellen aus.

  11. Überprüfen Sie im Bereich "Überprüfen + Erstellen " die angegebenen Optionen für die neue Rollendefinition. Wählen Sie schließlich "Erstellen" aus.

  12. Warten Sie, bis das Portal die Erstellung der Rollendefinition abgeschlossen hat.

  13. Wählen Sie im Bereich Access Control (IAM)"Hinzufügen " und dann " Rollenzuweisung hinzufügen" aus.

  14. Suchen Sie im Rollenbereich nach Azure DocumentDB der Azure DocumentDB RBAC-Besitzerrolle , die weiter oben in diesem Leitfaden erstellt wurde, und wählen Sie sie aus. Wählen Sie anschließend Weiter aus.

    Tipp

    Sie können optional die Liste der Rollen filtern, um nur benutzerdefinierte Rollen einzuschließen.

  15. Wählen Sie im Bereich "Mitglieder " die Option " Mitglieder auswählen " aus. Wählen Sie im Dialogfeld "Mitglieder" die Identität aus, die Sie dieser Zugriffsebene für Ihre Azure DocumentDB-Cluster gewähren möchten, und verwenden Sie dann die Option "Auswählen ", um Ihre Auswahl zu bestätigen.

  16. Überprüfen Sie im Bereich Mitglieder die ausgewählten Mitglieder und wählen Sie dann Überprüfen + Zuweisen aus.

  17. Überprüfen Sie im Bereich "Überprüfen+ Zuweisen " die angegebenen Optionen für die neue Rollenzuweisung. Wählen Sie schließlich "Überprüfen+ Zuweisen" aus.

  18. Warten Sie, bis das Portal die Erstellung der Rollenzuweisung abgeschlossen hat.

  1. Öffnen Sie ein neues Terminal.

  2. Melden Sie sich bei Azure CLI an.

  3. Überprüfen Sie Ihr Azure-Zielabonnement.

    az account show
    
  4. Erstellen Sie eine neue Terraform-Datei, um Ihre Rollendefinition zu definieren. Benennen Sie die Datei control-plane-role-definition.tf. Fügen Sie diese actions der Definition hinzu:

    Description
    Microsoft.DocumentDb/mongoClusters/* Aktiviert alle möglichen Aktionen.
    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. Initialisieren Sie die Terraform-Bereitstellung.

    terraform init --upgrade
    
  6. Erstellen Sie einen Ausführungsplan für die Rollendefinition, und speichern Sie ihn in einer Datei namens role-definition.tfplan.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --out "role-definition.tfplan"
    
  7. Wenden Sie den Ausführungsplan an, um die Rollendefinition in Azure bereitzustellen.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-definition.tfplan"
    
  8. Überprüfen Sie die Ausgabe der Bereitstellung. Die Ausgabe enthält den eindeutigen Bezeichner der Rollendefinition in der definition_id-Eigenschaft. Notieren Sie diesen Wert, da er im Zuweisungsschritt weiter unten in diesem Leitfaden verwendet werden muss.

  9. Erstellen Sie eine neue Terraform-Datei, um Ihre Rollenzuweisung zu definieren. Nennen Sie die Datei "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. Erstellen Sie eine neue Terraform-Variablendatei namens control-plane-role-assignment.tfvars. In dieser Variablendatei, weisen Sie der Variablen role_definition_id die zuvor aufgezeichneten Rollendefinitions-IDs zu und der Variablen identity_id den eindeutigen Bezeichner für Ihre Identität.

    role_definition_id = "<id-of-new-role-definition>"
    identity_id        = "<id-of-existing-identity>"
    
  11. Initialisieren und anwenden Sie diese Terraform-Konfiguration.

    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"
    

Aktivieren der Microsoft Entra ID-Authentifizierung

Wenn Sie einen Azure DocumentDB-Cluster erstellen, ist der Cluster so konfiguriert, dass die systemeigene Authentifizierung standardmäßig verwendet wird. Um die Authentifizierung mithilfe der Microsoft Entra-ID zu aktivieren, aktivieren Sie die Microsoft Entra ID-Authentifizierungsmethode, und fügen Sie dem Cluster Microsoft Entra ID-Identitäten hinzu.

  1. Rufen Sie die Details für das aktuell angemeldete Konto mithilfe von az ad signed-in-user ab.

    az ad signed-in-user show
    
  2. Der Befehl gibt eine JSON-Antwort mit verschiedenen Feldern aus.

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

    Tipp

    Notieren Sie den Wert des id Felds. In diesem Beispiel wäre der Wert aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Dieser Wert kann dann in verschiedenen Skripts verwendet werden, um Ihrem aktuellen Konto rollenbasierte Zugriffssteuerungsberechtigungen für Azure-Ressourcen zu gewähren. Wenn Sie stattdessen eine verwaltete Identität verwenden, können Sie die id für diese verwaltete Identität mithilfe des az identity show Befehls abrufen.

  3. Aktivieren Sie die Microsoft Entra ID-Authentifizierung auf dem Cluster, indem Sie die Clusterressource so aktualisieren, dass das MicrosoftEntraID in die authConfig.allowedModes-Array aufgenommen wird.

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

    Hinweis

    Ersetzen Sie <resource-group> und <cluster-name> durch Ihre eigenen Werte.

  4. Überprüfen Sie, ob die Änderung angewendet wurde, indem Sie die authConfig-Eigenschaft für den Cluster mithilfe von az resource show lesen.

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

    Hinweis

    Die Ausgabe sollte die allowedModes Liste enthalten. Wenn die Microsoft Entra-ID erfolgreich aktiviert wurde, enthält das Array beide NativeAuth und MicrosoftEntraID.

  1. (Optional) Rufen Sie den eindeutigen Bezeichner für den Microsoft Entra-Prinzipal ab, den Sie für den Cluster registrieren möchten. Sie können sie mit der Azure CLI mit einem der folgenden Befehle abrufen:

    • Aktuelle angemeldete Identität

      az ad signed-in-user show      
      
    • Eine andere menschliche Identität mit einem benutzerfreundlichen Namen

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service Principal mithilfe des Anwendungsbezeichners

      az ad sp show \
        --id "<application-id>"
      
    • Verwaltete Identität mithilfe der Ressourcengruppe und des Namens

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Erstellen Sie eine kleine Bicep-Vorlage, die den Cluster authConfig aktualisiert, um die Microsoft Entra-ID einzuschließen (speichern unter 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. Stellen Sie die Vorlage bereit, um den Cluster zu aktualisieren:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file enable-entra-id.bicep \
        --parameters clusterName="<cluster-name>"
    
  4. Überprüfen Sie die authConfig Eigenschaft auf dem Cluster mithilfe von az resource show.

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

    Hinweis

    Die Ausgabe sollte die allowedModes Liste enthalten. Wenn die Microsoft Entra-ID erfolgreich aktiviert wurde, enthält das Array beide NativeAuth und MicrosoftEntraID.

  1. Suchen Sie im Startbereich des Azure-Portals die Option "Microsoft Entra-ID ", und wählen Sie sie aus.

    Screenshot der Microsoft Entra ID-Option auf der Seite

    Tipp

    Wenn diese Option nicht aufgeführt ist, wählen Sie "Weitere Dienste" aus, und suchen Sie dann mithilfe des Suchbegriffs "Entra" nach Microsoft Entra ID.

  2. Wählen Sie im Bereich "Übersicht" für den Microsoft Entra ID-Mandanten die Option "Benutzer " im Abschnitt "Verwalten " des Dienstmenüs aus.

    Screenshot der Option

  3. Wählen Sie in der Liste der Benutzer die Identität (Benutzer) aus, zu der Sie weitere Details erhalten möchten.

    Screenshot der Liste der Benutzer für einen Microsoft Entra ID-Mandanten mit hervorgehobenem Beispielbenutzer.

    Hinweis

    Dieser Screenshot zeigt ein Benutzerbeispiel mit dem Namen "Kai Carter" und einem prinzipiellen Wert von kai@adventure-works.com.

  4. Beobachten Sie im Detailbereich für den bestimmten Benutzer den Wert der Objekt-ID-Eigenschaft .

    Screenshot des Detailbereichs eines Benutzers mit hervorgehobener

    Tipp

    Notieren Sie den Wert der Objekt-ID-Eigenschaft . In diesem Beispiel wäre dieser Wert aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Dieser Wert kann dann in verschiedenen Skripts verwendet werden, um Ihrem aktuellen Konto rollenbasierte Zugriffssteuerungsberechtigungen für Azure-Ressourcen zu gewähren. Die Schritte sind ähnlich, wenn Sie eine verwaltete Identität verwenden.

  5. Navigieren Sie zur vorhandenen Azure DocumentDB-Clusterressource.

  6. Wählen Sie im Clustermenü unter "Einstellungen" die Option "Authentifizierung" aus.

  7. Wählen Sie im Abschnitt "Authentifizierungsmethoden " die Option "Native DocumentDB" und "Microsoft Entra ID " aus, um die Microsoft Entra ID-Authentifizierung zusammen mit der systemeigenen Authentifizierung zu aktivieren.

  8. Wählen Sie "Speichern" aus, um die Änderung beizubehalten.

  9. Der Abschnitt " Authentifizierungsmethoden " sollte jetzt sowohl NativeAuth als auch MicrosoftEntraID als aktivierte Methoden auflisten.

  1. (Optional) Rufen Sie den eindeutigen Bezeichner für den Microsoft Entra-Prinzipal ab, den Sie für den Cluster registrieren möchten. Sie können sie mit der Azure CLI mit einem der folgenden Befehle abrufen:

    • Aktuelle angemeldete Identität

      az ad signed-in-user show      
      
    • Eine andere menschliche Identität mit einem benutzerfreundlichen Namen

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service Principal mithilfe des Anwendungsbezeichners

      az ad sp show \
        --id "<application-id>"
      
    • Verwaltete Identität mithilfe der Ressourcengruppe und des Namens

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Erstellen Sie eine Terraform-Konfigurationsdatei, um die Microsoft Entra ID-Authentifizierung auf Ihrem vorhandenen Cluster zu aktivieren. Speichern Sie die Datei 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
    }
    

    Tipp

    Weitere Informationen zu den Optionen, die die azurerm_mongo_cluster-Ressource verwenden, finden Sie in der Dokumentation zum azurerm-Anbieter in der Terraform-Registrierung.

  3. Erstellen Sie eine Variablendatei namens enable-entra-id.tfvars mit Ihren Clusterdetails:

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    
  4. Initialisieren und Anwenden der Terraform-Konfiguration, um die Microsoft Entra ID-Authentifizierung zu aktivieren:

    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. Überprüfen Sie die authConfig Eigenschaft auf dem Cluster mithilfe von az resource show.

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

    Hinweis

    Die Ausgabe sollte die allowedModes Liste enthalten. Wenn die Microsoft Entra-ID erfolgreich aktiviert wurde, enthält das Array beide NativeAuth und MicrosoftEntraID.

Verwalten von administrativen Microsoft Entra ID-Identitäten und nativen Benutzern in DocumentDB

Wenn die Microsoft Entra-ID-Authentifizierung auf einem Azure DocumetnDB-Cluster aktiviert ist, können Sie diesem Cluster einen oder mehrere Microsoft Entra ID-Prinzipale als Administratorbenutzer hinzufügen. Der Microsoft Entra ID-Administrator kann ein Microsoft Entra-ID-Benutzer, ein Dienstprinzipal oder eine verwaltete Identität sein. Mehrere Microsoft Entra ID-Administratoren können jederzeit konfiguriert werden.

Administrativen Entra-ID-Benutzer werden als Azure-Entitäten unter Microsoft.DocumentDB/mongoClusters/users erstellt und in die Datenbank repliziert.

Darüber hinaus können Benutzer einer oder mehrerer nichtadministrativer Microsoft Entra-ID-Benutzer jederzeit zu einem Cluster hinzugefügt werden, sobald die Microsoft Entra-ID-Authentifizierung aktiviert ist. Nichtadministrative Benutzer werden häufig für laufende Produktionsaufgaben verwendet, die keine Administratorrechte erfordern.

Für Azure DocumentDB wird dieser Zugriff gewährt, indem Microsoft Entra-Principals im Cluster registriert und MongoDB-Datenbankrollen zugeordnet werden (zum Beispiel readWrite in einer Datenbank oder root in der admin Datenbank). Registrierte Dienstprinzipale werden als Azure-Ressourcen vom Typ Microsoft.DocumentDB/mongoClusters/users erstellt, deren Namen die Form <cluster-name>/users/<principal-id> annehmen.

Administrative Benutzer verfügen über vollständige Berechtigungen zum Verwalten des Clusters und der zugehörigen Daten, einschließlich vollständiger Benutzerverwaltungsfunktionen. Nichtadministrative Benutzer können entweder Lese- und Schreibberechtigungen oder nur Leseberechtigungen für den Cluster über bestimmte MongoDB-Datenbankrollen erhalten. Die Rollen "readWriteAnyDatabase " und "clusterAdmin " gewähren zusammen vollständige Lese-/Schreibzugriffsberechtigungen für den Cluster, einschließlich Berechtigungen für Datenbankverwaltung und Datenbankvorgänge. Die ReadAnyDatabase-Rolle wird verwendet, um schreibgeschützte Berechtigungen für den Cluster zu erteilen. Sie können "readWriteAnyDatabase " und "clusterAdmin "-Rollen nicht separat zuweisen. Sie müssen zusammen für den vollständigen Lese-/Schreibzugriff gewährt werden.

Nichtadministrative (sekundäre) Benutzer und Sicherheitsprinzipale erhalten eingeschränkte Benutzerverwaltungsberechtigungen für den Cluster, wie in der folgenden Tabelle beschrieben:

Sicherheitsanbieter Rolle BenutzerErstellen DeleteUser UpdateUser ListenBenutzer
Microsoft Entra ID Lese-/Schreibzugriff (readWriteAnyDatabase, clusterAdmin) ✔️
Microsoft Entra ID Schreibgeschützt (readAnyDatabase) ✔️
Native DocumentDB Lese-/Schreibzugriff (readWriteAnyDatabase, clusterAdmin) Nur um ihr eigenes Kennwort zu ändern ✔️
Native DocumentDB Schreibgeschützt (readAnyDatabase) Nur um ihr eigenes Kennwort zu ändern ✔️
  1. Rufen Sie mit einem der folgenden Befehle den eindeutigen Bezeichner (Objekt-ID) des Microsoft Entra-Prinzipals ab, dem Sie Zugriff gewähren möchten:

    • Aktuelle angemeldete Identität

      az ad signed-in-user show      
      
    • Eine andere menschliche Identität mit einem benutzerfreundlichen Namen

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service Principal mithilfe des Anwendungsbezeichners

      az ad sp show \
        --id "<application-id>"
      
    • Verwaltete Identität mithilfe der Ressourcengruppe und des Namens

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Registrieren Sie den Prinzipal im Cluster, und ordnen Sie ihn den MongoDB-Datenbankrollen zu. Im folgenden Beispiel wird ein Principal als readWrite Benutzer auf der sales Datenbank registriert.

    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
    
    • Ersetzen Sie principalType durch servicePrincipal für App-/Dienstprinzipale oder durch ManagedIdentity für verwaltete Identitäten.
    • Um Administratorrechte zu gewähren, verwenden Sie {"db":"admin","role":"root"} im roles-Array.
  3. Alle registrierten Principals und ihre zugeordneten Rollen auflisten (Cluster-Ebene-Ansicht):

    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"
    
    • Die Antwort enthält ein Array von Benutzerressourcen, die jeweils identityProvider Metadaten und ein roles Array mit zugeordneten Datenbankrollen enthalten.
  4. Details zu einem bestimmten registrierten Hauptverantwortlichen abrufen (ersetzen <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. Entfernen Sie einen registrierten Prinzipal (Widerrufen des Datenebenenzugriffs):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Erstellen Sie eine Bicep-Datei (z. B. register-principal.bicep), um den Prinzipal zu registrieren und Datenbankrollen zuzuordnen:

    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. Stellen Sie die Bicep-Vorlage bereit, um den Prinzipal zu registrieren.

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file register-principal.bicep \
        --parameters clusterName="<cluster-name>" principalId="<principal-id>"
    
  3. Listen Sie alle registrierten Prinzipale für den Cluster mithilfe der REST-API (nützlich nach der Bicep-Bereitstellung) auf:

    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. Rufen Sie Details zu einem bestimmten registrierten Prinzipal ab, der von Bicep erstellt wurde (ersetzen Sie <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. Entfernen Sie den Prinzipal, indem Sie die Ressource löschen (oder eine Vorlage ohne die Benutzerressource bereitstellen):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Öffnen Sie den Azure DocumentDB-Zielcluster im Azure-Portal.

  2. Wählen Sie unter Einstellungen die Option Authentifizierung aus.

  3. Im Abschnitt "Microsoft Entra ID-Authentifizierung" listet das Portal die registrierten Microsoft Entra-Hauptkonten anhand der Objekt-ID auf. Verwenden Sie diese Ansicht, um:

    • Scannen Sie die Liste nach erwarteten Objektbezeichnern.
    • Überprüfen Sie die Details für einen einzelnen Prinzipal, indem Sie einen aufgelisteten Eintrag auswählen (oder die Suchfunktion des Portals verwenden).
    • Verwenden Sie die Aktion Entfernen neben einem Eintrag, um den Datenebenenzugriff des Prinzipals sofort zu widerrufen.
  4. Verwenden Sie die Seite "Benutzer" im Abschnitt "Microsoft Entra ID", um freundliche Namen für Objektbezeichner abzurufen, die in der Portalliste angezeigt werden. Suchen Sie dann anhand der Objekt-ID oder des Anzeigenamens.

  1. Rufen Sie mit einem der folgenden Befehle den eindeutigen Bezeichner (Objekt-ID) des Microsoft Entra-Prinzipals ab, dem Sie Zugriff gewähren möchten:

    • Aktuelle angemeldete Identität

      az ad signed-in-user show      
      
    • Eine andere menschliche Identität mit einem benutzerfreundlichen Namen

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Service Principal mithilfe des Anwendungsbezeichners

      az ad sp show \
        --id "<application-id>"
      
    • Verwaltete Identität mithilfe der Ressourcengruppe und des Namens

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Erstellen Sie eine Terraform-Datei (z. B. register-principal.tf), um den Prinzipal zu registrieren und Datenbankrollen mithilfe des AzAPI-Anbieters zuzuordnen:

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

    Tipp

    Weitere Informationen zum AzAPI-Anbieter finden Sie in der Dokumentation zum Azure AzAPI-Anbieter.

    • Ersetzen Sie principalType durch servicePrincipal für App-/Dienstprinzipale oder durch ManagedIdentity für verwaltete Identitäten.
    • Um Administratorrechte zu gewähren, verwenden Sie {"db":"admin","role":"root"} im roles-Array.
  3. Erstellen Sie eine Variablendatei mit dem Namen 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. Initialisieren Sie die Terraform-Konfiguration, und wenden Sie sie an, um den Prinzipal zu registrieren:

    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. Alle registrierten Hauptentitäten für den Cluster mithilfe der REST-API auflisten (sinnvoll nach dem Terraform-Deployment):

    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 abrufen für einen bestimmten registrierten Principal, der von Terraform erstellt wurde (ersetzen <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. Entfernen Sie den Prinzipal, indem Sie die Terraform-Ressource zerstören:

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

Hinweis

Ein Azure DocumentDB-Cluster wird mit einem integrierten systemeigenen DocumentDB-Benutzer erstellt. Sie können weitere native administrative DocumentDB-Benutzer hinzufügen, nachdem die Clusterbereitstellung abgeschlossen ist. Microsoft Entra ID-Admins, die dem Cluster hinzugefügt werden, sind zusätzlich zu nativen DocumentDB-Admins vorhanden, die für denselben Cluster definiert sind. Alle administrativen Microsoft Entra-ID-Identitäten werden in die Datenbank repliziert.

Nichtadministrative Microsoft Entra ID-Identitäten werden in der Datenbank erstellt. Wenn Sie nichtadministrative Benutzer in der Datenbank auflisten, enthält die Liste alle administrativen und nichtadministrativen Microsoft Entra-ID-Identitäten und alle sekundären (nichtadministrativen) documentDB-Benutzer.

Abrufen von Clusteranmeldeinformationen

Sie können eine Verbindung mit dem Cluster herstellen, indem Sie entweder einen Verbindungs-URI oder ein benutzerdefiniertes Einstellungsobjekt vom Treiber für Ihre bevorzugte Sprache verwenden. Bei beiden Optionen muss das Schema auf mongodb+srv gesetzt werden, um eine Verbindung mit dem Cluster herzustellen. Der Host befindet sich entweder in der *.global.mongocluster.cosmos.azure.com oder *.mongocluster.cosmos.azure.com Domäne, je nachdem, ob Sie den aktuellen Cluster oder den globalen Lese-/Schreibzugriffsendpunkt verwenden. Das +srv Schema und der *.global.* Host stellen sicher, dass Ihr Client dynamisch mit dem entsprechenden beschreibbaren Cluster in einer Multiclusterkonfiguration verbunden ist, auch wenn ein Bereichstauschvorgang auftritt. In einer Konfiguration mit nur einem Cluster können Sie eine der beiden Verbindungszeichenfolgen wahllos verwenden.

Die tls Einstellung muss ebenfalls aktiviert sein. Die verbleibenden empfohlenen Einstellungen sind bewährte Konfigurationseinstellungen.

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

Von Bedeutung

Verwenden Sie das Azure-Portal , um die Verbindungszeichenfolge abzurufen.

  1. Navigieren Sie zum Azure DocumentDB-Cluster.

  2. Wählen Sie die Navigationsoption "Verbindungszeichenfolgen " aus.

  3. Kopieren oder zeichnen Sie den Wert aus dem Feld "Verbindungszeichenfolge" auf.

    Tipp

    Microsoft Entra ID-Verbindungszeichenfolgen befinden sich im Abschnitt "Microsoft Entra ID ".

Verbinden mit Microsoft Entra ID in MongoDB Shell

Verwenden Sie ein Clientgerät, auf dem die MongoDB-Shell installiert ist, um mithilfe einer Microsoft Entra ID-Identität eine Verbindung mit Ihrem Azure DocumentDB-Cluster herzustellen.

  1. Öffnen Sie ein Terminal auf einem Client mit installierter MongoDB-Shell.

  2. Rufen Sie den Namen Ihres Azure DocumentDB-Clusters und die Client-ID für die Zielidentität ab.

  3. Stellen Sie eine Verbindung mithilfe der folgenden Verbindungszeichenfolge her:

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

Verbinden mit Microsoft Entra ID in Visual Studio Code

Verwenden Sie Visual Studio Code mit der DocumentDB-Erweiterung , um mithilfe einer Microsoft Entra ID-Identität eine Verbindung mit Ihrem Azure DocumentDB-Cluster herzustellen.

Von Bedeutung

Wenn Sie sich bei einem Azure DocumentDB-Cluster mithilfe von Microsoft Entra ID in Visual Studio Code mit DocumentDB-Erweiterung authentifizieren, wird die Funktionalität shell nicht unterstützt. Wenn Sie die MongoDB-Shell mit der Microsoft Entra ID-Authentifizierung verwenden müssen, verwenden Sie die MongoDB-Shell direkt auf einem Clientcomputer.

  1. Öffnen Sie Visual Studio Code.

  2. Navigieren Sie in der Seitenleiste zur DocumentDB-Erweiterung.

  3. Wählen Sie im Abschnitt "Verbindungen " +Neue Verbindung... aus.

  4. Wählen Sie im Dialogfeld "Verbindungstyp" die Option "Verbindungszeichenfolge" aus.

  5. Verwenden Sie die folgende Verbindungszeichenfolge:

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
    
  6. Warten Sie, bis die automatische Eingabeaufforderung die Microsoft Entra ID-Authentifizierung verwendet. Geben Sie die entsprechenden Anmeldeinformationen für Ihren Identitätstyp ein.

    Hinweis

    Wenn Sie sich beispielsweise mit Ihrer eigenen Identität (einer menschlichen Identität) anmelden, verwenden Sie die kennwortlose Authentifizierung.

  7. Warten Sie, bis die Verbindung abgeschlossen ist. Anschließend wird dem Abschnitt "Connections " für den Cluster ein neuer DocumentDB-Eintrag hinzugefügt.

Verbinden mit Microsoft Entra ID in MongoDB Compass

Stellen Sie eine Verbindung mit Ihrem Azure DocumentDB-Cluster mithilfe einer Microsoft Entra ID-Identität direkt mit der MongoDB Compass-Anwendung her.

  1. Starten Sie die MongoDB Compass-Anwendung.

  2. Wählen Sie + im Menü "Verbindungen" aus, um eine neue Verbindung hinzuzufügen.

  3. Aktivieren Sie die Einstellung Verbindungszeichenfolge bearbeiten im Dialogfeld Neue Verbindung.

  4. Geben Sie die folgende Verbindungszeichenfolge in das URI-Eingabefeld ein.

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
    
  5. Öffnen Sie nun das Dialogfeld "Erweiterte Verbindungsoptionen ".

  6. Wählen Sie im Abschnitt "Allgemein " die Option mongodb+srv für das Verbindungszeichenfolgenschema aus.

  7. Navigieren Sie als Nächstes zum Abschnitt "Authentifizierung ".

  8. Stellen Sie sicher, dass die OIDC-Option ausgewählt ist.

  9. Navigieren Sie nun zum Abschnitt "OIDC-Optionen ".

  10. Stellen Sie sicher, dass auch die Option "Zielendpunkt als vertrauenswürdig betrachten" ausgewählt ist.

  11. Wählen Sie "Speichern und Verbinden" aus.

Verwalten von sekundären (nicht-administrativen) Microsoft Entra ID-Identitäten in DocumentDB

Melden Sie sich beim Cluster mit einer administrativen Microsoft Entra ID-Identität an, um Verwaltungsvorgänge für nichtadministrative Microsoft Entra ID-Identitäten auszuführen.

Hinweis

Alle Verwaltungsbefehle für nichtadministrative Benutzer werden für SecurityPrincipal und user Prinzipaltypen unterstützt.

  1. Melden Sie sich mit einer administrativen Microsoft Entra ID-Identität beim Cluster an und verwenden Sie ein Tool wie die MongoDB-Shell.

  2. Fügen Sie eine nichtadministrative Microsoft Entra ID-Identität mit Lese-/Schreibberechtigungen für den Cluster mithilfe des createUser Befehls hinzu:

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "clusterAdmin", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  3. Fügen Sie eine nichtadministrative Microsoft Entra ID-Identität mit schreibgeschützten Berechtigungen für den Cluster mit createUser und einer anderen Rollengruppe hinzu.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "readAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  4. Entfernen Sie eine nichtadministrative Microsoft Entra ID-Identität aus dem Cluster mit dem dropUser Befehl.

    db.runCommand(
      {
        dropUser: "<entra-id-unique-identifier>"
      }
    )
    
  5. Listen Sie alle Microsoft Entra ID- und nativen DocumentDB-Benutzer im Cluster mithilfe von userInfo auf.

    db.runCommand(
      {
        usersInfo: 1
      }
    )
    

    Hinweis

    Alle administrativen Benutzer von Microsoft Entra ID und die systemeigenen Benutzer von DocumentDB werden in die Datenbank repliziert. Aufgrund dieser Replikation enthält die Liste der Benutzer alle administrativen und nicht-administrativen Microsoft Entra ID- und nativen DocumentDB-Benutzer im Cluster.

Herstellen einer Verbindung mithilfe von Microsoft Entra ID im Code

Überprüfen Sie, ob Sie den Zugriff ordnungsgemäß mithilfe von Anwendungscode und der entsprechenden Clientbibliothek für Ihre bevorzugte Sprache gewährt haben.

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