Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto
Istniejący klaster usługi Azure DocumentDB
- Jeśli nie masz klastra, utwórz nowy klaster
- Co najmniej jedna istniejąca tożsamość w identyfikatorze Entra firmy Microsoft.
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj Azure CLI. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do Azure CLI za pomocą polecenia az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Gdy zostaniesz o to poproszony/a, zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom az version, aby sprawdzić zainstalowaną wersję i biblioteki zależne. Aby zaktualizować do najnowszej wersji, uruchom az upgrade.
- Program Terraform 1.2.0 lub nowszy.
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. |
Otwórz nowy terminal.
Zaloguj się do Azure CLI.
Użyj
az group show, aby pobrać metadane dla bieżącej grupy zasobów.az group show \ --name "<name-of-existing-resource-group>"Zwróć uwagę na dane wyjściowe poprzedniego polecenia. Zapisz wartość
idwł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ść
idwynosi/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.Utwórz nowy plik JSON o nazwie role-definition.json. W pliku utwórz tę definicję zasobu, określając wartości wymienione tutaj.
AssignableScopesNa liście dodajidwł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-exampleużyto wartości zarejestrowanej w poprzednim kroku. Rzeczywisty identyfikator zasobu może być inny.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.jsonPrzejrzyj 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ść
idwynosi/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.
Otwórz nowy terminal.
Zaloguj się do Azure CLI.
Utwórz nowy plik Bicep, aby zdefiniować definicję roli. Nadaj plikowi nazwę control-plane-role-definition.bicep. Dodaj te
actionsdo 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.idWdróż 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.bicepPrzejrzyj 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ść
idwynosi/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.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 } }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 parametruroleDefinitionIdi unikatowy identyfikator tożsamości do parametruidentityId.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'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
Zaloguj się do witryny Azure Portal (https://portal.azure.com).
Wprowadź pozycję Grupa zasobów na pasku wyszukiwania globalnego.
W obszarze Usługi wybierz pozycję Grupy zasobów.
W okienku Grupy zasobów wybierz istniejącą grupę zasobów.
W okienku grupy zasobów wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) w menu usługi.
W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj. Następnie wybierz pozycję Dodaj rolę niestandardową.
W okienku Podstawowe skonfiguruj następujące opcje, a następnie wybierz pozycję Dalej:
Wartość Nazwa roli niestandardowej Azure DocumentDB RBAC OwnerOpis Can perform all Azure role-based access control actions for Azure DocumentDB clusters.Podstawowe uprawnienia Zacznij od podstaw W okienku Uprawnienia wybierz pozycję Dodaj uprawnienia. Następnie wyszukaj
DocumentDBw oknie dialogowym uprawnień. Na koniec wybierz opcję Microsoft.DocumentDB/mongoClusters .W oknie dialogowym uprawnień wybierz wszystkie Akcje dla elementu
Microsoft.DocumentDB/mongoClusters. Następnie wybierz pozycję Dodaj , aby powrócić do okienka *Uprawnienia .Wracając do panelu Uprawnienia, przejrzyj listę uprawnień. Następnie wybierz pozycję Przegląd + utwórz.
W okienku Przeglądanie i tworzenie przejrzyj określone opcje nowej definicji roli. Na koniec wybierz pozycję Utwórz.
Poczekaj, aż portal zakończy tworzenie definicji roli.
W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj , a następnie dodaj przypisanie roli.
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.
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.
Wróć do okienka Członkowie , przejrzyj wybranego członka[s], a następnie wybierz pozycję Przejrzyj i przypisz.
W okienku Przeglądanie i przypisywanie przejrzyj określone opcje nowego przypisania roli. Na koniec wybierz pozycję Przejrzyj i przypisz.
Poczekaj, aż portal zakończy tworzenie przypisania roli.
Otwórz nowy terminal.
Zaloguj się do Azure CLI.
Sprawdź docelową subskrypcję platformy Azure.
az account showUtwórz nowy plik Terraform, aby zdefiniować definicję roli. Nadaj plikowi nazwę control-plane-role-definition.
tf. Dodaj teactionsdo 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 }Zainicjuj wdrożenie programu Terraform.
terraform init --upgradeUtwó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"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"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.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 }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_idoraz unikatowy identyfikator tożsamości do zmiennejidentity_id.role_definition_id = "<id-of-new-role-definition>" identity_id = "<id-of-existing-identity>"Zainicjuj i zastosuj tę konfigurację programu Terraform.
terraform init --upgradeARM_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.
Uzyskaj szczegółowe informacje o aktualnie zalogowanym koncie przy użyciu polecenia
az ad signed-in-user.az ad signed-in-user showPolecenie 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ść
idpola. W tym przykładzie ta wartość toaaaaaaaa-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ćiddla tej tożsamości zarządzanej za pomocą poleceniaaz identity show.Włącz uwierzytelnianie przy użyciu Microsoft Entra ID w klastrze, aktualizując zasób klastra, aby uwzględnić
MicrosoftEntraIDw tablicyauthConfig.allowedModes:az resource patch \ --resource-group "<resource-group>" \ --name "<cluster-name>" \ --resource-type "Microsoft.DocumentDB/mongoClusters" \ --properties '{"authConfig":{"allowedModes":["MicrosoftEntraID","NativeAuth"]}}' \ --latest-include-previewUwaga / Notatka
Zamień
<resource-group>i<cluster-name>na swoje wartości.Sprawdź, czy zmiana została zastosowana, odczytując właściwość
authConfigw 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-previewUwaga / Notatka
Wynik powinien zawierać listę
allowedModes. Jeśli identyfikator Entra firmy Microsoft został pomyślnie włączony, tablica zawiera zarównoNativeAuth, jak iMicrosoftEntraID.
(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 showInna 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>"
Utwórz mały szablon Bicep, który aktualizuje klaster
authConfigw celu uwzględnienia identyfikatora Entra firmy Microsoft (zapisz jakoenable-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' ] } } }Wdróż szablon, aby zaktualizować klaster:
az deployment group create \ --resource-group "<resource-group>" \ --template-file enable-entra-id.bicep \ --parameters clusterName="<cluster-name>"Sprawdź właściwość
authConfigw 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-previewUwaga / Notatka
Wynik powinien zawierać listę
allowedModes. Jeśli identyfikator Entra firmy Microsoft został pomyślnie włączony, tablica zawiera zarównoNativeAuth, jak iMicrosoftEntraID.
W okienku Narzędzia główne w witrynie Azure Portal znajdź i wybierz opcję Microsoft Entra ID .
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".
W panelu Przegląd dzierżawy Microsoft Entra ID wybierz Użytkownicy w sekcji Zarządzanie menu usługi.
Na liście użytkowników wybierz użytkownika, o którym chcesz uzyskać więcej szczegółowych informacji.
Uwaga / Notatka
Ten zrzut ekranu przedstawia przykładowego użytkownika o nazwie "Kai Carter" z główną nazwą użytkownika
kai@adventure-works.com.W okienku szczegółów określonego użytkownika sprawdź wartość właściwości Identyfikator 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.Przejdź do istniejącego zasobu klastra usługi Azure DocumentDB.
W menu klastra w obszarze Ustawienia wybierz pozycję Uwierzytelnianie.
W sekcji Metody uwierzytelniania wybierz pozycję Native DocumentDB i Microsoft Entra ID , aby włączyć uwierzytelnianie identyfikatora Entra firmy Microsoft wraz z uwierzytelnianiem natywnym.
Wybierz Zapisz, aby zapisać zmianę.
Sekcja Metody uwierzytelniania powinna teraz zawierać listę metod NativeAuth i MicrosoftEntraID jako metody włączone.
(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 showInna 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>"
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_clusterzasobu, zobaczazurermdokumentację dostawcy w usłudze Terraform Registry.Utwórz plik zmiennych o nazwie enable-entra-id.tfvars z szczegółami Twojego klastra.
cluster_name = "<cluster-name>" resource_group_name = "<resource-group>"Zainicjuj i zastosuj konfigurację narzędzia Terraform, aby włączyć uwierzytelnianie identyfikatora Entra firmy Microsoft:
terraform init --upgradeARM_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"Sprawdź właściwość
authConfigw 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-previewUwaga / Notatka
Wynik powinien zawierać listę
allowedModes. Jeśli identyfikator Entra firmy Microsoft został pomyślnie włączony, tablica zawiera zarównoNativeAuth, jak iMicrosoftEntraID.
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 | ✔️ |
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 showInna 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>"
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
principalTypeprzezservicePrincipaldla jednostek aplikacji/usługi lubManagedIdentitydla tożsamości zarządzanych. - Aby udzielić uprawnień administracyjnych, użyj polecenia
{"db":"admin","role":"root"}w tablicyroles.
- Zastąp
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
identityProvidermetadane i tablicę przedstawiającąroleszamapowane role bazy danych.
- Odpowiedź zawiera tablicę zasobów użytkownika, z których każda ma
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-previewUsuń 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
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 } }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>"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"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-previewAby 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
Otwórz docelowy klaster usługi Azure DocumentDB w witrynie Azure Portal.
W sekcji Ustawienia wybierz pozycję Uwierzytelnianie.
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.
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.
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 showInna 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>"
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
principalTypeprzezservicePrincipaldla jednostek aplikacji/usługi lubManagedIdentitydla tożsamości zarządzanych. - Aby udzielić uprawnień administracyjnych, użyj polecenia
{"db":"admin","role":"root"}w tablicyroles.
- Zastąp
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" } ]Zainicjować i zastosować konfigurację Terraform, aby zarejestrować podmiot:
terraform init --upgradeARM_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"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"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-previewUsuń 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.
Przejdź do klastra usługi Azure DocumentDB.
Wybierz opcję menu nawigacji Parametry połączenia .
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.
Otwórz terminal na kliencie z zainstalowaną powłoką MongoDB.
Pobierz nazwę klastra usługi Azure DocumentDB i identyfikator klienta tożsamości docelowej.
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.
Otwórz program Visual Studio Code.
W pasku bocznym przejdź do rozszerzenia DocumentDB.
W sekcji Połączenia wybierz pozycję + Nowe połączenie....
W oknie dialogowym Typ połączenia wybierz pozycję Parametry połączenia.
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=120000Poczekaj, 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.
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.
Uruchom aplikację MongoDB Compass.
Wybierz + w menu Połączenia , aby dodać nowe połączenie.
Przełącz ustawienie Edytuj parametry połączenia , aby włączyć w oknie dialogowym Nowe połączenie .
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.netTeraz otwórz okno dialogowe Zaawansowane opcje połączenia .
W sekcji Ogólne wybierz
mongodb+srvschemat parametrów połączenia.Następnie przejdź do sekcji Uwierzytelnianie .
Upewnij się, że wybrano opcję OIDC .
Teraz przejdź do sekcji Opcje OIDC .
Upewnij się, że wybrano również opcję Uznać docelowy punkt końcowy za zaufany.
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.
Zaloguj się do klastra przy użyciu administracyjnej tożsamości Microsoft Entra ID i narzędzia takiego jak MongoDB Shell.
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" } } } } )Dodaj nieadministracyjną tożsamość Microsoft Entra ID z uprawnieniami tylko do odczytu w klastrze z
createUserinnym zestawem ról.db.runCommand( { createUser: "<entra-id-unique-identifier>", roles: [ { role: "readAnyDatabase", db: "admin" } ], customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } } } )Usuń tożsamość Microsoft Entra ID innym niż administrator z klastra za pomocą polecenia
dropUser.db.runCommand( { dropUser: "<entra-id-unique-identifier>" } )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);
}
}