Udostępnij przez


Nawiązywanie połączenia z usługą Azure DocumentDB przy użyciu kontroli dostępu opartej na rolach i identyfikatora Entra firmy Microsoft

Usługa Azure DocumentDB obsługuje identyfikator Entra firmy Microsoft wraz z natywnym uwierzytelnianiem usługi DocumentDB. Każdy klaster jest tworzony z włączonym uwierzytelnianiem natywnym i jednym wbudowanym użytkownikiem administracyjnym.

Kontrola dostępu oparta na rolach zapewnia scentralizowany mechanizm przypisywania i wymuszania uprawnień za pomocą identyfikatora Entra firmy Microsoft, zapewniając, że tylko autoryzowane tożsamości mogą wykonywać operacje w klastrach. Takie podejście upraszcza ład, obsługuje zasady najniższych uprawnień i sprawia, że inspekcja jest prosta — pomaga organizacjom zachować integralność operacyjną i zgodność w miarę wzrostu wdrożeń. Zarządzanie dostępem w usłudze Azure DocumentDB obejmuje dwa różne poziomy:

  • Dostęp oparty na rolach platformy Azure do zarządzania klastrem jako zasobem platformy Azure (na przykład odczytywanie metadanych, zarządzanie regułami zapory i konfigurowanie prywatnych punktów końcowych)
  • Dostęp do usługi DocumentDB na potrzeby odczytywania i zapisywania danych w bazach danych i kolekcjach w klastrze.

Włącz Microsoft Entra ID, aby zezwolić jednostkom Microsoft Entra (użytkownikom, jednostkom usługi lub tożsamościom zarządzanym) na uwierzytelnienie w klastrze. Uwierzytelnianie identyfikatora Entra firmy Microsoft jest implementowane przy użyciu protokołu OpenID Connect (OIDC). Klienci przedstawiają token dostępu OIDC wystawiony przez firmę Entra do sterownika bazy danych MongoDB. Klaster musi mieć włączone uwierzytelnianie natywne; obsługiwane konfiguracje to tylko natywne lub tylko uwierzytelnianie identyfikatora Entra firmy Microsoft lub tylko natywne i uwierzytelnianie identyfikatora Entra firmy Microsoft.

Uwaga / Notatka

Metody uwierzytelniania można włączać lub zmieniać w klastrze w dowolnym momencie po aprowizacji. Zmiana metod uwierzytelniania nie wymaga ponownego uruchomienia klastra i nie jest zakłócająca. Po utworzeniu klastra należy włączyć natywne uwierzytelnianie usługi DocumentDB. Uwierzytelnianie natywne można wyłączyć po zakończeniu wdrożenia klastra.

Zalety korzystania z identyfikatora Entra firmy Microsoft do uwierzytelniania obejmują:

  • Jednolita tożsamość i logowanie w usługach platformy Azure.
  • Scentralizowane zarządzanie poświadczeniami, zasadami haseł i rotacją.
  • Obsługa metod uwierzytelniania bez hasła i wieloskładnikowego z identyfikatora Entra firmy Microsoft.
  • Uwierzytelnianie oparte na tokenach dla aplikacji, eliminując przechowywane hasła.

Po włączeniu uwierzytelniania Microsoft Entra ID można zarejestrować jedno lub więcej kont użytkowników jako użytkowników administracyjnych lub nieadministracyjnych w klastrze. Zarejestrowane podmioty stają się zasobami Azure w obszarze Microsoft.DocumentDB/mongoClusters/users i są replikowane do bazy danych. Mapowanie tych podmiotów na role bazy danych MongoDB przyznaje odpowiednie uprawnienia do bazy danych. Ta forma uwierzytelniania obsługuje wiele typów tożsamości użytkowników, w tym ludzkich użytkowników, administratorów usług (aplikacje), zarządzanych tożsamości przypisanych przez użytkownika oraz przypisanych przez system.

Uwaga / Notatka

Można skonfigurować wiele tożsamości i typów tożsamości Microsoft Entra ID jako administratorów klastra jednocześnie. Typy tożsamości identyfikatora Entra firmy Microsoft obejmują, ale nie są ograniczone do następujących elementów:

  • Tożsamości człowieka
  • Tożsamości zarządzane przypisane przez użytkownika
  • Tożsamości zarządzane przypisane przez system
  • Tożsamości obciążeń

Wszystkie typy tożsamości mogą być jednocześnie administratorami.

Użytkownicy administracyjni mają pełne uprawnienia do zarządzania klastrem i jego danymi. Użytkownicy niebędący administratorami mogą być dodawani do bieżących zadań produkcyjnych, które nie wymagają uprawnień administracyjnych. Użytkownicy niebędący administratorami zwykle przechowują ograniczone role, takie jak dostęp tylko do odczytu lub zapisu do określonych baz danych, ale nie mają możliwości wykonywania akcji administracyjnych dotyczących całego klastra.

Przed użyciem tej funkcji zapoznaj się z następującymi zagadnieniami:

  • Metody uwierzytelniania w klastrze podstawowym i w klastrze repliki są zarządzane niezależnie.
  • Podmioty Microsoft Entra są trwałe w metadanych klastra. Jeśli podmiot zostanie usunięty z Microsoft Entra ID, odpowiedni użytkownik klastra pozostanie, ale nie będzie mógł otrzymać nowych tokenów. Istniejące tokeny pozostają prawidłowe do momentu ich wygaśnięcia (zazwyczaj do 90 minut od wystawienia tokenu).
  • Aby natychmiast cofnąć dostęp, usuń głównego użytkownika z klastra (usuń users/<principal-id> zasób) i usuń związaną rolę bazodanową; administratorzy baz danych muszą obsługiwać przenoszenie własności lub czyszczenie usuniętych kont użytkowników.

Wymagania wstępne

  • Subskrypcja platformy Azure

  • Istniejący klaster usługi Azure DocumentDB

  • Co najmniej jedna istniejąca tożsamość w identyfikatorze Entra firmy Microsoft.

Zarządzanie kontrolą dostępu opartą na rolach na platformie Azure

Kontrola dostępu oparta na rolach platformy Azure odnosi się do możliwości zarządzania zasobami dla usługi platformy Azure bez zarządzania danymi. Na przykład dostęp oparty na rolach dla klastrów usługi Azure DocumentDB może obejmować następujące możliwości:

  • Odczytywanie wszystkich metadanych konta i zasobów
  • Odczytywanie i ponowne generowanie parametrów połączenia
  • Zarządzanie bazami danych i kolekcjami
  • Modyfikowanie właściwości konta

Usługa Azure DocumentDB obsługuje kontrolę dostępu opartą na rolach platformy Azure dla mongoCluster typu zasobu. Następujące akcje dla mongoCluster typu zasobu są dostępne w kontroli dostępu opartej na rolach platformy Azure dla poszczególnych przypisań i niestandardowego tworzenia roli kontroli dostępu opartej na rolach:

Description
Microsoft.DocumentDB/mongoClusters/read Odczytuje mongoCluster zasób lub wyświetla listę wszystkich mongoCluster zasobów.
Microsoft.DocumentDB/mongoClusters/write Utwórz lub zaktualizuj właściwości lub tagi określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/delete Usuwa określony mongoCluster zasób.
Microsoft.DocumentDB/mongoClusters/PrivateEndpointConnectionsApproval/action Zarządzanie połączeniem prywatnego punktu końcowego zasobu mongoCluster
Microsoft.DocumentDB/mongoClusters/listConnectionStrings/action Wyświetlanie listy parametrów połączenia dla danego mongoCluster zasobu
Microsoft.DocumentDB/mongoClusters/firewallRules/read Odczytuje regułę zapory lub wyświetla listę wszystkich reguł zapory dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/firewallRules/write Utwórz lub zaktualizuj regułę zapory dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/firewallRules/delete Usuwa istniejącą regułę zapory dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/read Odczytuje proxy połączenia dla prywatnego punktu końcowego określonego zasobu mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/write Utwórz lub zaktualizuj prywatne połączenie serwera proxy na określonym mongoCluster zasobie.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/delete Usuwa istniejące proxy do połączenia prywatnego punktu końcowego dla określonego zasobu mongoCluster.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/validate/action Weryfikuje serwer proxy połączenia prywatnego punktu końcowego dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/read Odczytuje połączenie prywatnego punktu końcowego lub wyświetla listę wszystkich prywatnych połączeń punktu końcowego dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/write Utwórz lub zaktualizuj połączenie prywatnego punktu końcowego w określonym mongoCluster zasobie.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/delete Usuwa istniejące połączenie prywatnego punktu końcowego dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/privateLinkResources/read Odczytuje zasób łącza prywatnego lub wyświetla listę wszystkich zasobów łącza prywatnego dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/users/read Odczytuje użytkownika lub wyświetla listę wszystkich użytkowników dla określonego mongoCluster zasobu.
Microsoft.DocumentDB/mongoClusters/users/write Utwórz lub zaktualizuj użytkownika w określonym mongoCluster zasobie.
Microsoft.DocumentDB/mongoClusters/users/delete Usuwa istniejącego użytkownika dla określonego mongoCluster zasobu.
  1. Otwórz nowy terminal.

  2. Zaloguj się do Azure CLI.

  3. Użyj az group show, aby pobrać metadane dla bieżącej grupy zasobów.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. Zwróć uwagę na dane wyjściowe poprzedniego polecenia. Zapisz wartość id właściwości dla tej grupy zasobów, ponieważ jest ona wymagana do użycia w następnym kroku.

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

    Uwaga / Notatka

    W tym przykładzie wartość id wynosi /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie. Ten ciąg jest skróconym przykładem wyniku.

  5. Utwórz nowy plik JSON o nazwie role-definition.json. W pliku utwórz tę definicję zasobu, określając wartości wymienione tutaj. AssignableScopes Na liście dodaj id właściwość grupy zasobów zarejestrowanej w poprzednim kroku.

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

    Uwaga / Notatka

    W tym przykładzie /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example użyto wartości zarejestrowanej w poprzednim kroku. Rzeczywisty identyfikator zasobu może być inny.

  6. Utwórz nową definicję roli przy użyciu polecenia az role definition create. Użyj pliku role-definition.json jako danych wejściowych argumentu --role-definition .

    az role definition create \
        --role-definition role-definition.json
    
  7. Przejrzyj dane wyjściowe z polecenia tworzenia definicji. Dane wyjściowe zawierają unikatowy identyfikator definicji roli w właściwości id. Zapisz tę wartość, ponieważ jest ona wymagana do użycia w kroku przypisania w dalszej części tego przewodnika.

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

    Uwaga / Notatka

    W tym przykładzie wartość id wynosi /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie. W tym przykładzie przedstawiono podzbiór typowych danych wyjściowych JSON z wdrożenia w celu zapewnienia przejrzystości.

  1. Otwórz nowy terminal.

  2. Zaloguj się do Azure CLI.

  3. Utwórz nowy plik Bicep, aby zdefiniować definicję roli. Nadaj plikowi nazwę control-plane-role-definition.bicep. Dodaj te actions do definicji:

    Description
    Microsoft.DocumentDb/mongoClusters/* Włącza wszystkie możliwe akcje.
    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. Wdróż szablon Bicep za pomocą az deployment group create. Określ nazwę szablonu Bicep i grupę zasobów platformy Azure.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. Przejrzyj dane wyjściowe z wdrożenia. Dane wyjściowe zawierają unikatowy identyfikator definicji roli w właściwości properties.outputs.definitionId.value. Zapisz tę wartość, ponieważ jest ona wymagana do użycia w kroku przypisania w dalszej części tego przewodnika.

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

    Uwaga / Notatka

    W tym przykładzie wartość id wynosi /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie. W tym przykładzie przedstawiono podzbiór typowych danych wyjściowych JSON z wdrożenia w celu zapewnienia przejrzystości.

  6. Utwórz nowy plik Bicep, aby zdefiniować przypisanie roli. Nadaj plikowi nazwę 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. Utwórz nowy plik parametrów Bicep o nazwie control-plane-role-assignment.bicepparam. W tym pliku parametrów; przypisz wcześniej zarejestrowane identyfikatory definicji roli do parametru roleDefinitionId i unikatowy identyfikator tożsamości do parametru identityId .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  8. Wdróż ten szablon Bicep przy użyciu 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. Zaloguj się do witryny Azure Portal (https://portal.azure.com).

  2. Wprowadź pozycję Grupa zasobów na pasku wyszukiwania globalnego.

  3. W obszarze Usługi wybierz pozycję Grupy zasobów.

  4. W okienku Grupy zasobów wybierz istniejącą grupę zasobów.

  5. W okienku grupy zasobów wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) w menu usługi.

  6. W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj. Następnie wybierz pozycję Dodaj rolę niestandardową.

  7. W okienku Podstawowe skonfiguruj następujące opcje, a następnie wybierz pozycję Dalej:

    Wartość
    Nazwa roli niestandardowej Azure DocumentDB RBAC Owner
    Opis Can perform all Azure role-based access control actions for Azure DocumentDB clusters.
    Podstawowe uprawnienia Zacznij od podstaw
  8. W okienku Uprawnienia wybierz pozycję Dodaj uprawnienia. Następnie wyszukaj DocumentDB w oknie dialogowym uprawnień. Na koniec wybierz opcję Microsoft.DocumentDB/mongoClusters .

  9. W oknie dialogowym uprawnień wybierz wszystkie Akcje dla elementu Microsoft.DocumentDB/mongoClusters. Następnie wybierz pozycję Dodaj , aby powrócić do okienka *Uprawnienia .

  10. Wracając do panelu Uprawnienia, przejrzyj listę uprawnień. Następnie wybierz pozycję Przegląd + utwórz.

  11. W okienku Przeglądanie i tworzenie przejrzyj określone opcje nowej definicji roli. Na koniec wybierz pozycję Utwórz.

  12. Poczekaj, aż portal zakończy tworzenie definicji roli.

  13. W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj , a następnie dodaj przypisanie roli.

  14. W okienku Rola wyszukaj Azure DocumentDB , a następnie wybierz rolę Właściciela RBAC usługi Azure DocumentDB utworzoną wcześniej w tym przewodniku. Następnie wybierz Dalej.

    Wskazówka

    Opcjonalnie można filtrować listę ról, aby uwzględnić tylko role niestandardowe.

  15. W okienku Członkowie wybierz opcję Wybierz członków . W oknie dialogowym członków wybierz tożsamość, której chcesz przyznać ten poziom dostępu dla klastrów usługi Azure DocumentDB, a następnie użyj opcji Wybierz, aby potwierdzić wybór.

  16. Wróć do okienka Członkowie , przejrzyj wybranego członka[s], a następnie wybierz pozycję Przejrzyj i przypisz.

  17. W okienku Przeglądanie i przypisywanie przejrzyj określone opcje nowego przypisania roli. Na koniec wybierz pozycję Przejrzyj i przypisz.

  18. Poczekaj, aż portal zakończy tworzenie przypisania roli.

  1. Otwórz nowy terminal.

  2. Zaloguj się do Azure CLI.

  3. Sprawdź docelową subskrypcję platformy Azure.

    az account show
    
  4. Utwórz nowy plik Terraform, aby zdefiniować definicję roli. Nadaj plikowi nazwę control-plane-role-definition.tf. Dodaj te actions do definicji:

    Description
    Microsoft.DocumentDb/mongoClusters/* Włącza wszystkie możliwe akcje.
    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. Zainicjuj wdrożenie programu Terraform.

    terraform init --upgrade
    
  6. Utwórz plan wykonania dla definicji roli i zapisz go w pliku o nazwie role-definition.tfplan.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --out "role-definition.tfplan"
    
  7. Zastosuj plan wykonywania, aby wdrożyć definicję roli na platformie Azure.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-definition.tfplan"
    
  8. Przejrzyj dane wyjściowe z wdrożenia. Dane wyjściowe zawierają unikatowy identyfikator definicji roli w właściwości definition_id. Zapisz tę wartość, ponieważ jest ona wymagana do użycia w kroku przypisania w dalszej części tego przewodnika.

  9. Utwórz nowy plik Terraform, aby zdefiniować przypisanie roli. Nadaj plikowi nazwę 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. Utwórz nowy plik zmiennych Terraform o nazwie control-plane-role-assignment.tfvars. W tym pliku zmiennych, przypisz wcześniej zarejestrowane identyfikatory definicji roli do zmiennej role_definition_id oraz unikatowy identyfikator tożsamości do zmiennej identity_id.

    role_definition_id = "<id-of-new-role-definition>"
    identity_id        = "<id-of-existing-identity>"
    
  11. Zainicjuj i zastosuj tę konfigurację programu Terraform.

    terraform init --upgrade
    
    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --var-file="control-plane-role-assignment.tfvars" --out "role-assignment.tfplan"
    
    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-assignment.tfplan"
    

Włącz uwierzytelnianie Microsoft Entra ID

Podczas tworzenia klastra usługi Azure DocumentDB klaster jest skonfigurowany do używania wyłącznie uwierzytelniania natywnego domyślnie. Aby włączyć uwierzytelnianie przy użyciu identyfikatora Entra firmy Microsoft, włącz metodę uwierzytelniania Microsoft Entra ID i dodaj tożsamości Microsoft Entra ID do klastra.

  1. Uzyskaj szczegółowe informacje o aktualnie zalogowanym koncie przy użyciu polecenia az ad signed-in-user.

    az ad signed-in-user show
    
  2. Polecenie zwraca odpowiedź JSON zawierającą różne pola.

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

    Wskazówka

    Zarejestruj wartość id pola. W tym przykładzie ta wartość to aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Ta wartość może być następnie używana w różnych skryptach w celu udzielenia bieżących uprawnień kontroli dostępu opartej na rolach konta do zasobów platformy Azure. Jeśli zamiast tego używasz tożsamości zarządzanej, możesz uzyskać id dla tej tożsamości zarządzanej za pomocą polecenia az identity show.

  3. Włącz uwierzytelnianie przy użyciu Microsoft Entra ID w klastrze, aktualizując zasób klastra, aby uwzględnić MicrosoftEntraID w tablicy authConfig.allowedModes:

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

    Uwaga / Notatka

    Zamień <resource-group> i <cluster-name> na swoje wartości.

  4. Sprawdź, czy zmiana została zastosowana, odczytując właściwość authConfig w klastrze za pomocą az resource show.

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

    Uwaga / Notatka

    Wynik powinien zawierać listę allowedModes. Jeśli identyfikator Entra firmy Microsoft został pomyślnie włączony, tablica zawiera zarówno NativeAuth, jak i MicrosoftEntraID.

  1. (Opcjonalnie) Uzyskaj unikalny identyfikator dla głównego podmiotu Microsoft Entra, który planujesz zarejestrować w klastrze. Możesz uzyskać go za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu jednego z następujących poleceń:

    • Bieżąca zalogowana tożsamość

      az ad signed-in-user show      
      
    • Inna tożsamość człowieka używająca przyjaznej nazwy

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Jednostka usługi korzystająca z identyfikatora aplikacji

      az ad sp show \
        --id "<application-id>"
      
    • Tożsamość zarządzana przy użyciu grupy zasobów i nazwy

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Utwórz mały szablon Bicep, który aktualizuje klaster authConfig w celu uwzględnienia identyfikatora Entra firmy Microsoft (zapisz jako 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. Wdróż szablon, aby zaktualizować klaster:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file enable-entra-id.bicep \
        --parameters clusterName="<cluster-name>"
    
  4. Sprawdź właściwość authConfig w klastrze za pomocą az resource show.

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

    Uwaga / Notatka

    Wynik powinien zawierać listę allowedModes. Jeśli identyfikator Entra firmy Microsoft został pomyślnie włączony, tablica zawiera zarówno NativeAuth, jak i MicrosoftEntraID.

  1. W okienku Narzędzia główne w witrynie Azure Portal znajdź i wybierz opcję Microsoft Entra ID .

    Zrzut ekranu przedstawiający opcję Microsoft Entra ID na stronie głównej Portalu Azure.

    Wskazówka

    Jeśli ta opcja nie jest wyświetlana, wybierz Więcej usług, a następnie wyszukaj Microsoft Entra ID, używając terminu "Entra".

  2. W panelu Przegląd dzierżawy Microsoft Entra ID wybierz Użytkownicy w sekcji Zarządzanie menu usługi.

    Zrzut ekranu przedstawiający opcję

  3. Na liście użytkowników wybierz użytkownika, o którym chcesz uzyskać więcej szczegółowych informacji.

    Zrzut ekranu pokazujący spis użytkowników najemcy Microsoft Entra ID z wyróżnionym przykładowym użytkownikiem.

    Uwaga / Notatka

    Ten zrzut ekranu przedstawia przykładowego użytkownika o nazwie "Kai Carter" z główną nazwą użytkownika kai@adventure-works.com.

  4. W okienku szczegółów określonego użytkownika sprawdź wartość właściwości Identyfikator obiektu .

    Zrzut ekranu przedstawiający okienko szczegółów użytkownika z wyróżnionym identyfikatorem obiektu.

    Wskazówka

    Zarejestruj wartość właściwości Object ID . W tym przykładzie ta wartość to aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Ta wartość może być następnie używana w różnych skryptach w celu udzielenia bieżących uprawnień kontroli dostępu opartej na rolach konta do zasobów platformy Azure. Kroki są podobne, jeśli używasz tożsamości zarządzanej.

  5. Przejdź do istniejącego zasobu klastra usługi Azure DocumentDB.

  6. W menu klastra w obszarze Ustawienia wybierz pozycję Uwierzytelnianie.

  7. W sekcji Metody uwierzytelniania wybierz pozycję Native DocumentDB i Microsoft Entra ID , aby włączyć uwierzytelnianie identyfikatora Entra firmy Microsoft wraz z uwierzytelnianiem natywnym.

  8. Wybierz Zapisz, aby zapisać zmianę.

  9. Sekcja Metody uwierzytelniania powinna teraz zawierać listę metod NativeAuth i MicrosoftEntraID jako metody włączone.

  1. (Opcjonalnie) Uzyskaj unikalny identyfikator dla głównego podmiotu Microsoft Entra, który planujesz zarejestrować w klastrze. Możesz uzyskać go za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu jednego z następujących poleceń:

    • Bieżąca zalogowana tożsamość

      az ad signed-in-user show      
      
    • Inna tożsamość człowieka używająca przyjaznej nazwy

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Jednostka usługi korzystająca z identyfikatora aplikacji

      az ad sp show \
        --id "<application-id>"
      
    • Tożsamość zarządzana przy użyciu grupy zasobów i nazwy

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Utwórz plik konfiguracji narzędzia Terraform, aby włączyć uwierzytelnianie identyfikatora entra firmy Microsoft w istniejącym klastrze. Zapisz plik jako 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
    }
    

    Wskazówka

    Aby uzyskać więcej informacji na temat opcji przy użyciu azurerm_mongo_cluster zasobu, zobacz azurerm dokumentację dostawcy w usłudze Terraform Registry.

  3. Utwórz plik zmiennych o nazwie enable-entra-id.tfvars z szczegółami Twojego klastra.

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    
  4. Zainicjuj i zastosuj konfigurację narzędzia Terraform, aby włączyć uwierzytelnianie identyfikatora Entra firmy Microsoft:

    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. Sprawdź właściwość authConfig w klastrze za pomocą az resource show.

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

    Uwaga / Notatka

    Wynik powinien zawierać listę allowedModes. Jeśli identyfikator Entra firmy Microsoft został pomyślnie włączony, tablica zawiera zarówno NativeAuth, jak i MicrosoftEntraID.

Zarządzaj tożsamościami administracyjnymi Microsoft Entra ID i użytkownikami natywnymi w usłudze DocumentDB.

Po włączeniu uwierzytelniania Microsoft Entra ID w klastrze Azure DocumentDB można dodać co najmniej jednego podmiotu zabezpieczeń Microsoft Entra ID jako użytkowników administratorów do tego klastra. Administrator Microsoft Entra ID może być użytkownikiem Entra ID, jednostką usługi lub tożsamością zarządzaną. W dowolnym momencie można skonfigurować wielu administratorów identyfikatorów Entra firmy Microsoft.

Administracyjni użytkownicy Entra ID są tworzeni jako jednostki platformy Azure w obszarze Microsoft.DocumentDB/mongoClusters/users i są replikowani do bazy danych.

Ponadto, gdy uwierzytelnianie Microsoft Entra ID jest włączone, do klastra można w dowolnym momencie dodać jednego lub więcej użytkowników Microsoft Entra ID o uprawnieniach nieadministracyjnych. Użytkownicy niebędący administratorami są często używane do wykonywania bieżących zadań produkcyjnych, które nie wymagają uprawnień administracyjnych.

W przypadku usługi Azure DocumentDB ten dostęp jest udzielany przez zarejestrowanie podmiotów Microsoft Entra w klastrze i przypisanie ich do ról bazy danych MongoDB (na przykład readWrite w bazie danych lub root w admin bazie danych). Zarejestrowane podmioty są tworzone jako zasoby platformy Azure typu Microsoft.DocumentDB/mongoClusters/users, których nazwy mają postać <cluster-name>/users/<principal-id>.

Użytkownicy administracyjni mają pełne uprawnienia do zarządzania klastrem i jego danymi, w tym pełne możliwości zarządzania użytkownikami. Użytkownicy niebędący administratorami mogą mieć uprawnienia do odczytu i zapisu lub tylko do odczytu w klastrze za pomocą określonych ról bazy danych MongoDB. Role readWriteAnyDatabase i clusterAdmin razem udzielają pełnych uprawnień do odczytu i zapisu w klastrze, w tym uprawnień do zarządzania bazami danych i operacji bazy danych. Rola readAnyDatabase służy do udzielania uprawnień tylko do odczytu w klastrze. Nie można oddzielnie przypisywać ról readWriteAnyDatabase i clusterAdmin — muszą one zostać przyznane razem w celu uzyskania pełnego dostępu do odczytu i zapisu.

Użytkownicy niebędący administratorami (pomocniczymi) i podmioty zabezpieczeń mają ograniczone uprawnienia do zarządzania użytkownikami w klastrze, zgodnie z opisem w poniższej tabeli:

Dostawca zabezpieczeń Role UtwórzUżytkownika Usuń użytkownika Zaktualizuj użytkownika ListUser
Microsoft Entra ID Odczyt i zapis (readWriteAnyDatabase, clusterAdmin) ✔️
Microsoft Entra ID Tylko do odczytu (readAnyDatabase) ✔️
Natywna baza danych DocumentDB Odczyt i zapis (readWriteAnyDatabase, clusterAdmin) Tylko do zmiany własnego hasła ✔️
Natywna baza danych DocumentDB Tylko do odczytu (readAnyDatabase) Tylko do zmiany własnego hasła ✔️
  1. Uzyskaj unikatowy identyfikator (identyfikator obiektu) podmiotu Microsoft Entra, któremu chcesz przyznać dostęp, używając jednego z następujących poleceń:

    • Bieżąca zalogowana tożsamość

      az ad signed-in-user show      
      
    • Inna tożsamość człowieka używająca przyjaznej nazwy

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Jednostka usługi korzystająca z identyfikatora aplikacji

      az ad sp show \
        --id "<application-id>"
      
    • Tożsamość zarządzana przy użyciu grupy zasobów i nazwy

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Zarejestruj główny podmiot w klastrze i przypisz go do ról bazy danych MongoDB. Poniższy przykład rejestruje podmiot zabezpieczeń jako użytkownika w bazie danych readWrite.

    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
    
    • Zastąp principalType przez servicePrincipal dla jednostek aplikacji/usługi lub ManagedIdentity dla tożsamości zarządzanych.
    • Aby udzielić uprawnień administracyjnych, użyj polecenia {"db":"admin","role":"root"} w tablicy roles .
  3. Wyświetl listę wszystkich zarejestrowanych podmiotów i przypisanych ról (na poziomie klastra):

    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"
    
    • Odpowiedź zawiera tablicę zasobów użytkownika, z których każda ma identityProvider metadane i tablicę przedstawiającą roles zamapowane role bazy danych.
  4. Uzyskaj szczegóły dotyczące określonego zarejestrowanego podmiotu zabezpieczeń (zastąp <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. Usuń zarejestrowanego głównego (cofnij dostęp do płaszczyzny danych)

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Utwórz plik Bicep (na przykład register-principal.bicep), aby zarejestrować użytkownika oraz przypisać role w bazie danych.

    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. Wdróż szablon Bicep, aby zarejestrować podmiot główny:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file register-principal.bicep \
        --parameters clusterName="<cluster-name>" principalId="<principal-id>"
    
  3. Wyświetl listę wszystkich zarejestrowanych podmiotów dla klastra przy użyciu interfejsu API REST (przydatne po wdrożeniu Bicep):

    az rest \
        --method GET \
        --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>/users?api-version=2025-09-01"
    
  4. Uzyskaj szczegółowe informacje dotyczące określonego zarejestrowanego głównego podmiotu utworzonego przez Bicep (zastąp <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. Aby usunąć główny zasób, usuń zasób (lub wdróż szablon bez zasobu użytkownika):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Otwórz docelowy klaster usługi Azure DocumentDB w witrynie Azure Portal.

  2. W sekcji Ustawienia wybierz pozycję Uwierzytelnianie.

  3. W sekcji Uwierzytelnianie identyfikatora entra firmy Microsoft portal wyświetla listę zarejestrowanych podmiotów zabezpieczeń firmy Microsoft według identyfikatora obiektu. Użyj tego widoku, aby:

    • Przeskanuj listę pod kątem oczekiwanych identyfikatorów obiektów.
    • Sprawdź szczegóły pojedynczego podmiotu, wybierając wpis na liście (lub użyj funkcji wyszukiwania w portalu).
    • Użyj akcji Usuń obok wpisu, aby natychmiast odwołać dostęp tego podmiotu do płaszczyzny danych.
  4. Aby uzyskać przyjazne nazwy identyfikatorów obiektów wyświetlanych na liście portalu, użyj strony Użytkownicy w sekcji Microsoft Entra ID . Następnie wyszukaj według identyfikatora obiektu lub przyjaznej nazwy.

  1. Uzyskaj unikatowy identyfikator (identyfikator obiektu) podmiotu Microsoft Entra, któremu chcesz przyznać dostęp, używając jednego z następujących poleceń:

    • Bieżąca zalogowana tożsamość

      az ad signed-in-user show      
      
    • Inna tożsamość człowieka używająca przyjaznej nazwy

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Jednostka usługi korzystająca z identyfikatora aplikacji

      az ad sp show \
        --id "<application-id>"
      
    • Tożsamość zarządzana przy użyciu grupy zasobów i nazwy

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Utwórz plik Terraform (na przykład register-principal.tf), aby zarejestrować jednostkę główną i zmapować role bazodanowe przy użyciu dostawcy AzAPI.

    variable "cluster_name" {
      type        = string
      description = "Name of the existing cluster"
    }
    
    variable "resource_group_name" {
      type        = string
      description = "Name of the existing resource group"
    }
    
    variable "principal_id" {
      type        = string
      description = "Object ID of the Microsoft Entra principal"
    }
    
    variable "principal_type" {
      type        = string
      description = "Type of principal: User, ServicePrincipal, or ManagedIdentity"
      default     = "User"
    }
    
    variable "roles" {
      type = list(object({
        db   = string
        role = string
      }))
      description = "Database roles to assign"
      default = [
        {
          db   = "sales"
          role = "readWrite"
        }
      ]
    }
    
    terraform {
      required_providers {
        azapi = {
          source  = "azure/azapi"
          version = "~> 2.0"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
    data "azurerm_resource_group" "existing" {
      name = var.resource_group_name
    }
    
    data "azurerm_mongo_cluster" "existing" {
      name                = var.cluster_name
      resource_group_name = var.resource_group_name
    }
    
    resource "azapi_resource" "mongo_cluster_user" {
      type      = "Microsoft.DocumentDB/mongoClusters/users@2025-09-01"
      name      = var.principal_id
      parent_id = data.azurerm_mongo_cluster.existing.id
      location  = data.azurerm_resource_group.existing.location
    
      body = {
        properties = {
          identityProvider = {
            type = "MicrosoftEntraID"
            properties = {
              principalType = var.principal_type
            }
          }
          roles = var.roles
        }
      }
    }
    

    Wskazówka

    Aby uzyskać więcej informacji na temat dostawcy AzAPI, zobacz dokumentację dostawcy azAPI platformy Azure.

    • Zastąp principalType przez servicePrincipal dla jednostek aplikacji/usługi lub ManagedIdentity dla tożsamości zarządzanych.
    • Aby udzielić uprawnień administracyjnych, użyj polecenia {"db":"admin","role":"root"} w tablicy roles .
  3. Utwórz plik zmiennych o nazwie 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. Zainicjować i zastosować konfigurację Terraform, aby zarejestrować podmiot:

    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. Wyświetl listę wszystkich zarejestrowanych podmiotów klastra przy użyciu interfejsu REST API (przydatne po wdrożeniu Terraform):

    az rest \
        --method GET \
        --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>/users?api-version=2025-09-01"
    
  6. Uzyskaj szczegóły dotyczące określonego zarejestrowanego użytkownika utworzonego przez Terraform (zastąp <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. Usuń główny zasób, niszcząc zasób Terraform.

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

Uwaga / Notatka

Klaster Azure DocumentDB jest tworzony z jednym wbudowanym natywnym użytkownikiem administracyjnym DocumentDB. Po zakończeniu aprowizacji klastra można dodać więcej natywnych użytkowników administracyjnych usługi DocumentDB . Użytkownicy administracyjni identyfikatora Entra firmy Microsoft dodani do klastra będą dodatkiem do natywnych użytkowników administracyjnych usługi DocumentDB zdefiniowanych w tym samym klastrze. Wszystkie administracyjne identyfikatory Microsoft Entra ID są replikowane do bazy danych.

Nieadministracyjne tożsamości Microsoft Entra ID są tworzone w bazie danych. Po wyświetleniu listy użytkowników niebędących administratorami w bazie danych lista zawiera wszystkie administracyjne i nieadministracyjne identyfikatory Microsoft Entra ID oraz wszystkich natywnych pomocniczych (nieadministracyjnych) użytkowników usługi DocumentDB.

Pobieranie poświadczeń klastra

Możesz połączyć się z klastrem, używając identyfikatora URI połączenia lub niestandardowego obiektu ustawień znajdującego się w sterowniku dla preferowanego języka. W każdej z opcji należy ustawić schemat tak, aby mongodb+srv łączył się z klastrem. Host znajduje się w domenie *.global.mongocluster.cosmos.azure.com lub *.mongocluster.cosmos.azure.com w zależności od tego, czy używasz bieżącego klastra, czy globalnego punktu końcowego odczytu i zapisu. Schemat +srv i *.global.* host zapewniają, że klient jest dynamicznie połączony z odpowiednim klastrem zapisywalnym w konfiguracji z wieloma klastrami, nawet jeśli wystąpi operacja zamiany regionu. W konfiguracji pojedynczego klastra można użyć dowolnych parametrów połączenia.

Ustawienie tls musi być również włączone. Pozostałe zalecane ustawienia to ustawienia konfiguracji według najlepszych praktyk.

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

Ważne

Użyj portalu Azure aby uzyskać parametry połączenia.

  1. Przejdź do klastra usługi Azure DocumentDB.

  2. Wybierz opcję menu nawigacji Parametry połączenia .

  3. Skopiuj lub zapisz wartość z pola Parametry połączenia .

    Wskazówka

    Parametry połączenia identyfikatora Entra firmy Microsoft znajdują się w sekcji Microsoft Entra ID .

Nawiązywanie połączenia przy użyciu Microsoft Entra ID w MongoDB Shell

Użyj urządzenia klienckiego z zainstalowaną powłoką MongoDB , aby nawiązać połączenie z klastrem usługi Azure DocumentDB przy użyciu tożsamości identyfikatora Entra firmy Microsoft.

  1. Otwórz terminal na kliencie z zainstalowaną powłoką MongoDB.

  2. Pobierz nazwę klastra usługi Azure DocumentDB i identyfikator klienta tożsamości docelowej.

  3. Nawiąż połączenie przy użyciu następujących parametrów połączenia:

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

Nawiązywanie połączenia przy użyciu identyfikatora Entra firmy Microsoft w programie Visual Studio Code

Użyj programu Visual Studio Code z rozszerzeniem DocumentDB, aby nawiązać połączenie z klastrem Azure DocumentDB przy użyciu tożsamości Microsoft Entra ID.

Ważne

W przypadku uwierzytelniania w klastrze Azure DocumentDB przy użyciu Microsoft Entra ID w Visual Studio Code z rozszerzeniem DocumentDB, funkcjonalność shell nie jest obsługiwana. Jeśli musisz użyć powłoki MongoDB z uwierzytelnianiem identyfikatora Entra firmy Microsoft, użyj powłoki MongoDB bezpośrednio na maszynie klienckiej.

  1. Otwórz program Visual Studio Code.

  2. W pasku bocznym przejdź do rozszerzenia DocumentDB.

  3. W sekcji Połączenia wybierz pozycję + Nowe połączenie....

  4. W oknie dialogowym Typ połączenia wybierz pozycję Parametry połączenia.

  5. Użyj następujących parametrów połączenia:

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
    
  6. Poczekaj, aż zostanie wyświetlony automatyczny monit o użycie uwierzytelniania identyfikatora Entra firmy Microsoft. Wprowadź odpowiednie poświadczenia dla typu tożsamości.

    Uwaga / Notatka

    Jeśli na przykład logujesz się przy użyciu własnej tożsamości (tożsamości ludzkiej), użyj środowiska uwierzytelniania bez hasła.

  7. Poczekaj na sfinalizowanie połączenia. Nowy wpis usługi DocumentDB jest następnie dodawany do sekcji Połączenia dla klastra.

Nawiązywanie połączenia przy użyciu identyfikatora Entra firmy Microsoft w aplikacji MongoDB Compass

Połącz się bezpośrednio z klastrem Azure DocumentDB za pomocą tożsamości Microsoft Entra ID przy użyciu aplikacji MongoDB Compass.

  1. Uruchom aplikację MongoDB Compass.

  2. Wybierz + w menu Połączenia , aby dodać nowe połączenie.

  3. Przełącz ustawienie Edytuj parametry połączenia , aby włączyć w oknie dialogowym Nowe połączenie .

  4. Wprowadź następujący łańcuch połączenia w okno URI.

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:https://ossrdbms-aad.database.windows.net
    
  5. Teraz otwórz okno dialogowe Zaawansowane opcje połączenia .

  6. W sekcji Ogólne wybierz mongodb+srvschemat parametrów połączenia.

  7. Następnie przejdź do sekcji Uwierzytelnianie .

  8. Upewnij się, że wybrano opcję OIDC .

  9. Teraz przejdź do sekcji Opcje OIDC .

  10. Upewnij się, że wybrano również opcję Uznać docelowy punkt końcowy za zaufany.

  11. Wybierz pozycję Zapisz i połącz.

Zarządzanie pomocniczymi (nieadministracyjnymi) tożsamościami Microsoft Entra ID w DocumentDB.

Zaloguj się do klastra za pomocą administracyjnej tożsamości Microsoft Entra ID, aby wykonać operacje zarządzania dla nieadministracyjnych tożsamości Microsoft Entra ID.

Uwaga / Notatka

Wszystkie polecenia zarządzania dla użytkowników niebędących administratorami są obsługiwane dla typów zasadniczych SecurityPrincipal oraz user.

  1. Zaloguj się do klastra przy użyciu administracyjnej tożsamości Microsoft Entra ID i narzędzia takiego jak MongoDB Shell.

  2. Dodaj nieadministracyjną tożsamość identyfikatora Microsoft Entra ID z uprawnieniami do odczytu i zapisu w klastrze przy użyciu polecenia createUser.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "clusterAdmin", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  3. Dodaj nieadministracyjną tożsamość Microsoft Entra ID z uprawnieniami tylko do odczytu w klastrze z createUser innym zestawem ról.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "readAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  4. Usuń tożsamość Microsoft Entra ID innym niż administrator z klastra za pomocą polecenia dropUser.

    db.runCommand(
      {
        dropUser: "<entra-id-unique-identifier>"
      }
    )
    
  5. Wyświetl listę wszystkich użytkowników usługi Microsoft Entra ID i natywnych użytkowników usługi DocumentDB w klastrze przy użyciu polecenia userInfo.

    db.runCommand(
      {
        usersInfo: 1
      }
    )
    

    Uwaga / Notatka

    Wszystkie identyfikatory Entra firmy Microsoft i natywni użytkownicy administracyjni usługi DocumentDB są replikowane do bazy danych. Ze względu na tę replikację lista użytkowników zawiera wszystkie administracyjne i nieadministracyjne identyfikatory Microsoft Entra oraz natywnych użytkowników usługi DocumentDB w klastrze.

Nawiązywanie połączenia przy użyciu identyfikatora Entra firmy Microsoft w kodzie

Sprawdź, czy prawidłowo udzielono dostępu przy użyciu kodu aplikacji i odpowiedniej biblioteki klienta dla preferowanego języka.

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