Rol tabanlı erişim denetimi ve Microsoft Entra Id kullanarak Azure DocumentDB'ye bağlanma

Azure DocumentDB, yerel DocumentDB kimlik doğrulamasının yanı sıra Microsoft Entra Kimliğini de destekler. Her küme yerel kimlik doğrulaması etkin ve yerleşik bir yönetici kullanıcı ile oluşturulur.

Rol tabanlı erişim denetimi, Microsoft Entra Id aracılığıyla izinleri atamak ve zorunlu kılmak için merkezi bir mekanizma sağlar ve kümelerinizde yalnızca yetkili kimliklerin işlem gerçekleştirebildiğinden emin olur. Bu yaklaşım idareyi basitleştirir, en düşük ayrıcalık ilkelerini destekler ve denetimi basitleştirir; kuruluşların dağıtımlar büyüdükçe operasyonel bütünlüğü ve uyumluluğu sürdürmelerine yardımcı olur. Azure DocumentDB'de erişimi yönetmek iki ayrı düzey içerir:

  • Kümeyi azure kaynağı olarak yönetmek için Azure rol tabanlı erişim (meta verileri okuma, güvenlik duvarı kurallarını yönetme ve özel uç noktaları yapılandırma gibi)
  • Kümedeki veritabanları ve koleksiyonlar içindeki verileri okumak ve yazmak için DocumentDB erişimi.

Microsoft Entra Kimliklerini etkinleştirerek Microsoft Entra sorumlularının (kullanıcılar, hizmet sorumluları veya yönetilen kimlikler) kümede kimlik doğrulaması yapmasına izin verin. Microsoft Entra ID kimlik doğrulaması OpenID Connect (OIDC) kullanılarak uygulanır. İstemciler MongoDB sürücüsüne Entra tarafından verilen bir OIDC erişim belirteci sunar. Kümede yerel kimlik doğrulaması etkinleştirilmelidir; desteklenen yapılandırmalar yalnızca yerel veya Yalnızca Microsoft Entra Id kimlik doğrulaması veya yerel ve Microsoft Entra Id kimlik doğrulamasıdır.

Note

Sağlamadan sonra istediğiniz zaman bir kümede kimlik doğrulama yöntemlerini etkinleştirebilir veya değiştirebilirsiniz. Kimlik doğrulama yöntemlerinin değiştirilmesi kümenin yeniden başlatılmasını gerektirmez ve kesintisiz bir işlemdir. Bir küme oluşturulduğunda yerel DocumentDB kimlik doğrulaması etkinleştirilmelidir. Küme sağlama tamamlandıktan sonra yerel kimlik doğrulamasını devre dışı bırakabilirsiniz.

Kimlik doğrulaması için Microsoft Entra Id kullanmanın avantajları şunlardır:

  • Azure hizmetlerinde tekdüzen kimlik ve oturum açma.
  • Kimlik bilgilerinin, parola ilkelerinin ve yenilemenin merkezi yönetimi.
  • Microsoft Entra ID'den parolasız ve çok faktörlü kimlik doğrulama yöntemleri için destek.
  • Uygulamalar için belirteç tabanlı kimlik doğrulaması, depolanan parolaları ortadan kaldırır.

Microsoft Entra Id kimlik doğrulaması etkinleştirildiğinde, bir veya daha fazla Microsoft Entra sorumlusunu kümede yönetici veya yönetici olmayan kullanıcılar olarak kaydedebilirsiniz. Kayıtlı prensipaller, Microsoft.DocumentDB/mongoClusters/users altında Azure kaynakları olur ve veritabanına kopyalanır; bu prensipalleri MongoDB veritabanı rolleriyle eşleştirmek, ilgili veritabanı ayrıcalıklarını atar. Bu kimlik doğrulama biçimi, insan kullanıcılar, hizmet ilkeleri (uygulamalar), kullanıcı tarafından atanan ve sistem tarafından atanan yönetilen kimlikler olmak üzere birden fazla ana türünü destekler.

Note

Birden çok Microsoft Entra Id kimliklerini ve kimlik türlerini aynı anda bir kümenin yöneticisi olarak yapılandırabilirsiniz. Microsoft Entra Id kimlik türleri şunları içerir ancak bunlarla sınırlı değildir:

  • İnsan kimlikleri
  • Kullanıcı tarafından atanan yönetilen kimlikler
  • Sistem tarafından atanan yönetilen kimlikler
  • İş yükü kimlikleri

Tüm kimlik türleri aynı anda yönetici olabilir.

Yönetici kullanıcılar kümeyi ve verilerini yönetmek için tam ayrıcalıklara sahiptir. Yönetici ayrıcalıkları gerektirmeyen devam eden üretim görevleri için yönetici olmayan kullanıcılar eklenebilir. Yönetici olmayan kullanıcılar genellikle belirli veritabanlarına salt okunur veya okuma-yazma erişimi gibi kısıtlanmış rollere sahiptir, ancak küme genelinde yönetim eylemleri gerçekleştirme yeteneğine sahip değildir.

Bu özelliği kullanmadan önce aşağıdaki noktaları gözden geçirin:

  • Birincil kümede ve çoğaltma kümesinde kimlik doğrulama yöntemleri bağımsız olarak yönetilir.
  • Microsoft Entra ilkeleri küme meta verisi içerisinde kalıcıdır. Bir sorumlu Microsoft Entra Kimliği'nden silinirse, ilgili küme kullanıcısı kalır ancak artık yeni belirteçleri edinemez. Mevcut belirteçler süresi dolana kadar geçerli kalır (genellikle belirtecin verilmesinden itibaren 90 dakikaya kadar).
  • Erişimi hemen iptal etmek için sorumluyu kümeden kaldırın (kaynağı silin users/<principal-id> ) ve ilişkili veritabanı rollerini bırakın; veritabanı yöneticileri, silinen sorumlular için sahiplik aktarımını veya temizlemeyi işlemelidir.

Important

Erişim Belirteci Geçerliliği ve GüvenlikLe İlgili Dikkat Edilmesi Gerekenler:

Microsoft Entra Id tarafından verilen erişim belirtecinin ömrü, belirtecin gizliliği ihlal edilirse olası en yüksek saldırı penceresini temsil eder. Kötü amaçlı bir aktör geçerli bir erişim belirteci alır ve bağlantı kurarsa, ilişkili yenileme belirteci iptal edilmiş veya kullanıcı hesabı devre dışı bırakılmış olsa bile sistem, süresi dolana kadar bu belirteci kullanan istekleri kabul etmeye devam edebilir.

Entra içinde erişim belirtecini iptal etme açıklandığı gibi yönergeleri izlemenizi öneririz

Prerequisites

  • Mevcut bir Azure DocumentDB kümesi

  • Microsoft Entra Id'de bir veya daha fazla mevcut kimlik.

Azure rol tabanlı erişim denetimini yönetme

Azure rol tabanlı erişim denetimi, verileri yönetmeden Bir Azure hizmetinin kaynaklarını yönetme özelliğini ifade eder. Örneğin, Azure DocumentDB kümeleri için rol tabanlı erişim şunları içerebilir:

  • Tüm hesap ve kaynak meta verilerini okuma
  • Bağlantı dizelerini okuma ve yeniden oluşturma
  • Veritabanlarını ve koleksiyonları yönetme
  • Hesap özelliklerini değiştirme

Azure DocumentDB, kaynak türü için mongoCluster Azure rol tabanlı erişim denetimini destekler. Kaynak türü için aşağıdaki mongoCluster, bireysel atamalar ve özel rol tabanlı erişim denetimi rol oluşturma için Azure rol tabanlı erişim denetiminde kullanılabilir:

Description
Microsoft.DocumentDB/mongoClusters/read Bir mongoCluster kaynağı okur veya tüm mongoCluster kaynakları listeler.
Microsoft.DocumentDB/mongoClusters/write Belirtilen mongoCluster kaynağın özelliklerini veya etiketlerini oluşturun veya güncelleştirin.
Microsoft.DocumentDB/mongoClusters/delete Belirtilen mongoCluster kaynağı siler.
Microsoft.DocumentDB/mongoClusters/PrivateEndpointConnectionsApproval/action Kaynağın mongoCluster özel uç nokta bağlantısını yönetme
Microsoft.DocumentDB/mongoClusters/listConnectionStrings/action Belirli mongoCluster bir kaynak için bağlantı dizelerini listeleme
Microsoft.DocumentDB/mongoClusters/firewallRules/read Bir güvenlik duvarı kuralını okur veya belirtilen mongoCluster kaynak için tüm güvenlik duvarı kurallarını listeler.
Microsoft.DocumentDB/mongoClusters/firewallRules/write Belirtilen mongoCluster kaynakta güvenlik duvarı kuralı oluşturun veya güncelleştirin.
Microsoft.DocumentDB/mongoClusters/firewallRules/delete Belirtilen mongoCluster kaynak için var olan bir güvenlik duvarı kuralını siler.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/read Belirtilen mongoCluster kaynak için özel uç nokta bağlantı ara sunucusunu okur.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/write Belirtilen mongoCluster bir kaynakta özel uç nokta bağlantı ara sunucusu oluşturun veya güncelleştirin.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/delete Belirtilen mongoCluster kaynak için var olan bir özel uç nokta bağlantı proxy'sini siler.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnectionProxies/validate/action Belirtilen mongoCluster kaynak için özel uç nokta bağlantı ara sunucusunu doğrular.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/read Özel uç nokta bağlantısını okur veya belirtilen mongoCluster kaynak için tüm özel uç nokta bağlantısını listeler.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/write Belirtilen mongoCluster bir kaynakta özel uç nokta bağlantısı oluşturun veya güncelleştirin.
Microsoft.DocumentDB/mongoClusters/privateEndpointConnections/delete Belirtilen mongoCluster kaynak için var olan bir özel uç nokta bağlantısını siler.
Microsoft.DocumentDB/mongoClusters/privateLinkResources/read Özel bağlantı kaynağını okur veya belirtilen mongoCluster kaynak için tüm özel bağlantı kaynaklarını listeler.
Microsoft.DocumentDB/mongoClusters/users/read Bir kullanıcıyı okur veya belirtilen mongoCluster kaynak için tüm kullanıcıları listeler.
Microsoft.DocumentDB/mongoClusters/users/write Belirtilen mongoCluster kaynakta kullanıcı oluşturun veya güncelleştirin.
Microsoft.DocumentDB/mongoClusters/users/delete Belirtilen mongoCluster kaynak için var olan bir kullanıcıyı siler.
  1. Yeni bir terminal açın.

  2. Azure CLI'da oturum açın.

  3. Geçerli kaynak grubunuzun meta verilerini almak için kullanın az group show .

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. Önceki komutun çıkışını gözlemleyin. Bu kaynak grubu için id özelliğinin değerini kaydedin, çünkü bu değer bir sonraki adımda kullanılacaktır.

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

    Note

    Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Bu dizgi, çıkış verisinin kesilmiş bir örneğidir.

  5. role-definition.jsonadlı yeni bir JSON dosyası oluşturun. dosyasında, burada listelenen değerleri belirterek bu kaynak tanımını oluşturun. AssignableScopes Liste için, önceki adımda kaydedilen kaynak grubunun özelliğini ekleyinid.

    {
      "Name": "Azure DocumentDB RBAC Owner",
      "IsCustom": true,
      "Description": "Can perform all Azure role-based access control actions for Azure DocumentDB clusters.",
      "Actions": [
        "Microsoft.DocumentDb/mongoClusters/*"
      ],
      "AssignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
      ]
    }
    

    Note

    Bu örnek, /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example önceki adımda kaydedilen değeri kullanır. Gerçek kaynak tanımlayıcınız farklı olabilir.

  6. kullanarak az role definition createyeni bir rol tanımı oluşturun. dosyasını --role-definition olarak kullanın.

    az role definition create \
        --role-definition role-definition.json
    
  7. Tanım oluşturma komutundan çıktıyı gözden geçirin. Çıkış, id özelliğinde rol tanımının benzersiz tanımlayıcısını içerir. Bu değeri, bu kılavuzun devamında yer alan atama adımında kullanılması gerektiği şekilde kaydedin.

    {
      "assignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
      ],
      "description": "Can perform all Azure role-based access control actions for Azure DocumentDB clusters.",
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "name": "e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5",
      "permissions": [
        {
          "actions": [
            "Microsoft.DocumentDb/*"
          ]
        }
      ],
      "roleName": "Azure DocumentDB RBAC Owner",
      "roleType": "CustomRole"
    }
    

    Note

    Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Bu örnek, netlik için dağıtımdan alınan tipik JSON alt kümesidir.

  1. Yeni bir terminal açın.

  2. Azure CLI'da oturum açın.

  3. Rol tanımınızı tanımlamak için yeni bir Bicep dosyası oluşturun. Dosyaya control-plane-role-definition.bicep adını verin. Bunları actions tanıma ekleyin:

    Description
    Microsoft.DocumentDb/mongoClusters/* Tüm olası eylemleri etkinleştirir.
    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. az deployment group create kullanarak Bicep şablonunu dağıtın. Bicep şablonunun ve Azure kaynak grubunun adını belirtin.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. Dağıtım çıktısını gözden geçirin. Çıkış, properties.outputs.definitionId.value özelliğinde rol tanımının benzersiz tanımlayıcısını içerir. Bu değeri, bu kılavuzun devamında yer alan atama adımında kullanılması gerektiği şekilde kaydedin.

    {
      "properties": {
        "outputs": {
          "definitionId": {
            "type": "String",
            "value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1"
          }
        }
      }
    }
    

    Note

    Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Bu örnek, netlik için dağıtımdan alınan tipik JSON alt kümesidir.

  6. Rol atamanızı tanımlamak için yeni bir Bicep dosyası oluşturun. Dosyaya control-plane-role-assignment.bicep adını verin.

    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. control-plane-role-assignment adlı yeni bir Bicep parametre dosyası oluşturun .bicepparam. Bu parametreler dosyasında; parametresine önceden kaydedilmiş rol tanımı tanımlayıcılarını roleDefinitionId ve parametreye kimliğinizin benzersiz tanımlayıcısını atayın identityId .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  8. Bu Bicep şablonunu az deployment group create kullanarak dağıtın.

    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. Azure portalında (https://portal.azure.com) oturum açın.

  2. Genel arama çubuğuna Kaynak grubu girin.

  3. Hizmetler'deKaynak grupları'ı seçin.

  4. Kaynak grupları bölmesinde mevcut kaynak grubunuzu seçin.

  5. Kaynak grubunun bölmesinde, hizmet menüsünde Erişim denetimi (IAM) öğesini seçin.

  6. Erişim denetimi (IAM) bölmesinde Ekle'yi seçin. Ardından Özel rol ekle'yi seçin.

  7. Temel bilgiler bölmesinde aşağıdaki seçenekleri yapılandırın ve İleri'yi seçin:

    Value
    Özel rol adı Azure DocumentDB RBAC Owner
    Tanım Can perform all Azure role-based access control actions for Azure DocumentDB clusters.
    Temel izinler Sıfırdan başlayın
  8. İzinler bölmesinde İzinekle'yi seçin. Ardından, izinler iletişim kutusunda öğesini DocumentDB arayın. Son olarak Microsoft.DocumentDB/mongoClusters seçeneğini belirleyin.

  9. İzinler iletişim kutusunda için tüm Microsoft.DocumentDB/mongoClusters seçin. Ardından Ekle'yi seçerek *İzinler bölmesine dönün.

  10. İzinler bölmesine dönüp izin listesini inceleyin. Ardından Gözden Geçir ve oluştur'u seçin.

  11. Gözden Geçir + oluştur bölmesinde, yeni rol tanımı için belirtilen seçenekleri gözden geçirin. Son olarak Oluştur'u seçin.

  12. Portalın rol tanımını oluşturmayı tamamlanmasını bekleyin.

  13. Erişim denetimi (IAM) bölmesinde Ekle'yi ve ardından Rol ataması ekle'yi seçin.

  14. Rol bölmesinde, bu kılavuzun önceki bölümlerinde oluşturulan Azure DocumentDB rolünü arayın ve seçin. Ardından İleri'yi seçin.

    Tip

    İsteğe bağlı olarak rol listesini yalnızca özel rolleri içerecek şekilde filtreleyebilirsiniz.

  15. Üyeler bölmesinde Üyeleri seç seçeneğini belirleyin. Üyeler iletişim kutusunda, Azure DocumentDB kümeleriniz için bu erişim düzeyini vermek istediğiniz kimliği seçin ve seçiminizi onaylamak için Seç seçeneğini kullanın.

  16. Üyeler bölmesine geri dönün, seçili üyeyi[s] gözden geçirin ve Gözden Geçir + Ata'yı seçin.

  17. Gözden Geçir ve ata bölmesinde, yeni rol ataması için belirtilen seçenekleri gözden geçirin. Son olarak Gözden geçir + ata seçin.

  18. Portalın rol atamasını oluşturmayı tamamlanmasını bekleyin.

  1. Yeni bir terminal açın.

  2. Azure CLI'da oturum açın.

  3. Hedef Azure aboneliğinizi denetleyin.

    az account show
    
  4. Rol tanımınızı tanımlamak için yeni bir Terraform dosyası oluşturun. Dosyaya control-plane-role-definition adını verin.tf. Bunları actions tanıma ekleyin:

    Description
    Microsoft.DocumentDb/mongoClusters/* Tüm olası eylemleri etkinleştirir.
    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. Terraform dağıtımını başlatın.

    terraform init --upgrade
    
  6. Rol tanımı için bir yürütme planı oluşturun ve bunu role-definition.tfplan adlı bir dosyaya kaydedin.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform plan --out "role-definition.tfplan"
    
  7. Rol tanımını Azure'a dağıtmak için yürütme planını uygulayın.

    ARM_SUBSCRIPTION_ID=$(az account show --query id --output tsv) terraform apply "role-definition.tfplan"
    
  8. Dağıtım çıktısını gözden geçirin. Çıkış, definition_id özelliğinde rol tanımının benzersiz tanımlayıcısını içerir. Bu değeri, bu kılavuzun devamında yer alan atama adımında kullanılması gerektiği şekilde kaydedin.

  9. Rol atamanızı tanımlamak için yeni bir Terraform dosyası oluşturun. Dosyaya control-plane-role-assignment adını verin.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. control-plane-role-assignment.tfvars adlı yeni bir Terraform değişkenleri dosyası oluşturun. Bu değişkenler dosyasında; değişkenine daha önce kaydedilmiş rol tanımı tanımlayıcılarını role_definition_id ve değişkenine kimliğinizin benzersiz tanımlayıcısını atayın identity_id .

    role_definition_id = "<id-of-new-role-definition>"
    identity_id        = "<id-of-existing-identity>"
    
  11. Bu Terraform yapılandırmasını başlatın ve uygulayın.

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

Microsoft Entra ID kimlik doğrulamasını etkinleştirme

Azure DocumentDB kümesi oluşturduğunuzda, küme varsayılan olarak yalnızca yerel kimlik doğrulamasını kullanacak şekilde yapılandırılır. Microsoft Entra Id kullanarak kimlik doğrulamasını etkinleştirmek için Microsoft Entra ID kimlik doğrulama yöntemini açın ve kümeye Microsoft Entra ID kimlikleri ekleyin.

  1. kullanarak az ad signed-in-useroturum açmış durumdaki hesabın ayrıntılarını alın.

    az ad signed-in-user show
    
  2. komutu, çeşitli alanları içeren bir JSON yanıtı oluşturur.

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

    Tip

    id alanının değerini kaydedin. Bu örnekte bu değer olacaktır aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Bu değer daha sonra, hesabınızın şu anki Azure kaynaklarına rol tabanlı erişim denetimi izinleri vermek için farklı betiklerde kullanılabilir. Yönetilen kimlik yerine bir kimlik kullanıyorsanız, o yönetilen kimlik için id almak üzere az identity show komutunu kullanabilirsiniz.

  3. Microsoft Entra ID kimlik doğrulamasını kümede etkinleştirin: Küme kaynağını MicrosoftEntraID kodunu authConfig.allowedModes dizisine ekleyerek güncelleyin.

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

    Note

    Değerlerinizi <resource-group> ve <cluster-name> ile değiştirin.

  4. kullanarak authConfigkümedeki az resource show özelliğini okuyarak değişikliğin uygulandığını doğrulayın.

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

    Note

    Çıkış, allowedModes listesini içermelidir. Microsoft Entra Kimliği başarıyla etkinleştirildiyse, dizi hem NativeAuth hem de MicrosoftEntraID içerir.

  1. (İsteğe bağlı) Kümeye kaydetmeyi planladığınız Microsoft Entra sorumlusunun benzersiz tanımlayıcısını alın. Aşağıdaki komutlardan birini kullanarak Azure CLI ile edinebilirsiniz:

    • Geçerli oturum açma kimliği

      az ad signed-in-user show      
      
    • Kolay anlaşılır ad kullanan başka bir insan kimliği

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Uygulama tanımlayıcısı kullanan hizmet sorumlusu

      az ad sp show \
        --id "<application-id>"
      
    • Kaynak grubu ve adı kullanarak yönetilen kimlik

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Kümeyi authConfig Microsoft Entra ID içerecek şekilde güncelleştiren basit bir Bicep şablonu oluşturun (farklı enable-entra-id.bicep kaydet):

    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. Kümeyi güncelleştirmek için şablonu dağıtın:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file enable-entra-id.bicep \
        --parameters clusterName="<cluster-name>"
    
  4. authConfig kullanarak az resource showkümedeki özelliğini doğrulayın.

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

    Note

    Çıkış, allowedModes listesini içermelidir. Microsoft Entra Kimliği başarıyla etkinleştirildiyse, dizi hem NativeAuth hem de MicrosoftEntraID içerir.

  1. Azure portalının Giriş bölmesinde Microsoft Entra Id seçeneğini bulun ve seçin.

    Azure portalının 'Giriş' sayfasındaki Microsoft Entra Id seçeneğinin ekran görüntüsü.

    Tip

    Bu seçenek listelenmiyorsa Diğer hizmetler'i seçin ve ardından "Entra" arama terimini kullanarak Microsoft Entra Id araması yapın.

  2. Microsoft Entra Id kiracısının Genel Bakış bölmesinde, hizmet menüsünün Yönet bölümünde Kullanıcılar'ı seçin.

    Microsoft Entra ID kiracısının hizmet menüsündeki 'Kullanıcılar' seçeneğinin ekran görüntüsü

  3. Kullanıcı listesinde, hakkında daha fazla ayrıntı almak istediğiniz kimliği (kullanıcı) seçin.

    Örnek kullanıcı vurgulanmış bir Microsoft Entra ID kiracısı için kullanıcı listesinin ekran görüntüsü.

    Note

    Bu ekran görüntüsü, " Kai Carter" adlı örnek bir kullanıcıyı ve bir yönetici kai@adventure-works.com ile göstermektedir.

  4. Belirli bir kullanıcının ayrıntılar bölmesinde Nesne Kimliği özelliğinin değerini gözlemleyin.

    'Nesne Kimliği' vurgulanmış bir kullanıcının ayrıntılar bölmesinin ekran görüntüsü.

    Tip

    Nesne Kimliği özelliğinin değerini kaydedin. Bu örnekte bu değer olacaktır aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb. Bu değer daha sonra, hesabınızın şu anki Azure kaynaklarına rol tabanlı erişim denetimi izinleri vermek için farklı betiklerde kullanılabilir. Yönetilen kimlik kullanıyorsanız adımlar benzerdir.

  5. Mevcut Azure DocumentDB küme kaynağına gidin.

  6. Küme menüsünde, Ayarlar'ın altında Kimlik Doğrulaması'nı seçin.

  7. Kimlik doğrulama yöntemleri bölümünde Yerel DocumentDB ve Microsoft Entra Id'yi seçerek yerel kimlik doğrulamasının yanı sıra Microsoft Entra ID kimlik doğrulamasını etkinleştirin.

  8. Değişikliği kalıcı hale getirmek için Kaydet'i seçin.

  9. Kimlik doğrulama yöntemleri bölümünde artık hem NativeAuth hem de MicrosoftEntraID etkin yöntemler olarak listelenmelidir.

  1. (İsteğe bağlı) Kümeye kaydetmeyi planladığınız Microsoft Entra sorumlusunun benzersiz tanımlayıcısını alın. Aşağıdaki komutlardan birini kullanarak Azure CLI ile edinebilirsiniz:

    • Geçerli oturum açma kimliği

      az ad signed-in-user show      
      
    • Kolay anlaşılır ad kullanan başka bir insan kimliği

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Uygulama tanımlayıcısı kullanan hizmet sorumlusu

      az ad sp show \
        --id "<application-id>"
      
    • Kaynak grubu ve adı kullanarak yönetilen kimlik

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Mevcut kümenizde Microsoft Entra Id kimlik doğrulamasını etkinleştirmek için bir Terraform yapılandırma dosyası oluşturun. Dosyayı enable-entra-id olarak kaydedin.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
    }
    

    Tip

    Kaynağı kullanma azurerm_mongo_cluster seçenekleri hakkında daha fazla bilgi için Terraform Registry'deki sağlayıcı belgelerine bakınazurerm.

  3. Küme ayrıntılarınızla enable-entra-id.tfvars adlı bir değişken dosyası oluşturun:

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    
  4. Microsoft Entra ID kimlik doğrulamasını etkinleştirmek için Terraform yapılandırmasını başlatın ve uygulayın:

    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. authConfig kullanarak az resource showkümedeki özelliğini doğrulayın.

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

    Note

    Çıkış, allowedModes listesini içermelidir. Microsoft Entra Kimliği başarıyla etkinleştirildiyse, dizi hem NativeAuth hem de MicrosoftEntraID içerir.

DocumentDB'nin Microsoft Entra ID kimliklerini ve yerel kullanıcılarını yönetme

Azure DocumentDB kümesinde Microsoft Entra Id kimlik doğrulaması etkinleştirildiğinde, bir veya daha fazla Microsoft Entra ID sorumlusunu bu kümeye yönetici kullanıcı olarak ekleyebilirsiniz. Microsoft Entra ID yöneticisi bir Microsoft Entra ID kullanıcısı, hizmet sorumlusu veya yönetilen kimlik olabilir. İstediğiniz zaman birden çok Microsoft Entra Id yöneticisi yapılandırılabilir.

Yönetim Entra ID kullanıcıları, Microsoft.DocumentDB/mongoClusters/users altında Azure varlıkları olarak atanır ve veritabanına çoğaltılır.

Ayrıca, Microsoft Entra Id kimlik doğrulaması etkinleştirildikten sonra herhangi bir zamanda bir veya daha fazla yönetici olmayan Microsoft Entra ID kullanıcısı kümeye eklenebilir. Yönetici olmayan kullanıcılar genellikle yönetim ayrıcalıkları gerektirmeyen devam eden üretim görevleri için kullanılır.

Azure DocumentDB için bu erişim, Microsoft Entra sorumlularının kümeye kaydedilip MongoDB veritabanı rolleriyle (örneğin, bir veritabanında readWrite veya root veritabanında admin gibi) eşleştirilmesiyle verilir. Kayıtlı ilkeler, Microsoft.DocumentDB/mongoClusters/users biçiminde adları olan <cluster-name>/users/<principal-id> türünden Azure kaynakları olarak oluşturulur.

Yönetici kullanıcılar, tam kullanıcı yönetimi özellikleri de dahil olmak üzere kümeyi ve verilerini yönetmek için tam ayrıcalıklara sahiptir. Yönetici olmayan kullanıcılara, belirli MongoDB veritabanı rolleri aracılığıyla küme üzerinde okuma-yazma veya salt okunur izinler verilebilir. readWriteAnyDatabase ve clusterAdmin rolleri, veritabanı yönetimi ve veritabanı işlemleri ayrıcalıkları dahil olmak üzere küme üzerinde tam okuma-yazma izinleri verir. readAnyDatabase rolü, küme üzerinde salt okunur izinler vermek için kullanılır. readWriteAnyDatabase ve clusterAdmin rollerini ayrı ayrı atayamazsınız; tam okuma-yazma erişimi için birlikte verilmelidir.

Aşağıdaki tabloda açıklandığı gibi, yönetici olmayan (ikincil) kullanıcılara ve güvenlik sorumlularına kümede sınırlı kullanıcı yönetimi izinleri verilir:

Güvenlik sağlayıcısı Rol Kullanıcı Oluştur Kullanıcıyı Sil KullanıcıyıGüncelle ListUser
Microsoft Entra Kimliği Okuma-yazma (readWriteAnyDatabase, clusterAdmin) ✔️
Microsoft Entra Kimliği Salt okunur (readAnyDatabase) ✔️
Doğal DocumentDB Okuma-yazma (readWriteAnyDatabase, clusterAdmin) Yalnızca kendi parolasını değiştirebilir. ✔️
Doğal DocumentDB Salt okunur (readAnyDatabase) Yalnızca kendi parolasını değiştirebilir. ✔️
  1. Aşağıdaki komutlardan birini kullanarak erişim vermek istediğiniz Microsoft Entra sorumlusunun benzersiz tanımlayıcısını (nesne kimliği) alın:

    • Geçerli oturum açma kimliği

      az ad signed-in-user show      
      
    • Kolay anlaşılır ad kullanan başka bir insan kimliği

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Uygulama tanımlayıcısı kullanan hizmet sorumlusu

      az ad sp show \
        --id "<application-id>"
      
    • Kaynak grubu ve adı kullanarak yönetilen kimlik

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. Sorumluyu kümeye kaydedin ve MongoDB veritabanı rolleriyle eşleyin. Aşağıdaki örnek, readWrite kullanıcısını sales veritabanında ana kullanıcı olarak kaydeder.

    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
    
    • principalType yerine; uygulama/hizmet sorumluları için servicePrincipal veya yönetilen kimlikler için ManagedIdentity kullanın.
    • Yönetim ayrıcalıkları vermek için dizide {"db":"admin","role":"root"} kullanınroles.
  3. Tüm kayıtlı sorumluları ve eşlenen rolleri listeleyin (küme düzeyi görünümü):

    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"
    
    • Yanıt, her biri meta veri içeren identityProvider bir kullanıcı kaynakları dizisi ve eşlenmiş veritabanı rollerini gösteren bir roles dizi içerir.
  4. Belirli bir kayıtlı yöneticiyle ilgili ayrıntıları alın (yerine <principal-id> koyun):

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  5. Kayıtlı bir yetkiliyi kaldırma (veri düzlemi erişimini geri çekme):

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Sorumluyu kaydetmek ve veritabanı rollerini eşlemek için bir Bicep dosyası (örneğin register-principal.bicep) oluşturun:

    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. Sorumluyu kaydetmek için Bicep şablonunu dağıtın:

    az deployment group create \
        --resource-group "<resource-group>" \
        --template-file register-principal.bicep \
        --parameters clusterName="<cluster-name>" principalId="<principal-id>"
    
  3. REST API kullanarak küme için tüm kayıtlı sorumluları listeleyin (Bicep dağıtımından sonra kullanışlıdır):

    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. Bicep tarafından oluşturulan belirli bir kayıtlı sorumluyla ilgili ayrıntıları alın (yerine <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. Kaynağı silerek (veya kullanıcı kaynağı olmadan bir şablon dağıtarak) sorumluyu kaldırın:

    az resource delete \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  1. Hedef Azure DocumentDB kümesini Azure portalında açın.

  2. Ayarlar'ın altında Kimlik Doğrulama'yı seçin.

  3. Microsoft Entra Id kimlik doğrulaması bölümünde portal, nesne kimliğine göre kayıtlı Microsoft Entra sorumlularını listeler. Bu görünümü kullanarak:

    • Beklenen nesne tanımlayıcıları için listeyi tarayın.
    • Listelenen bir girdiyi seçerek (veya portalın arama özelliğini kullanarak) tek bir sorumlunun ayrıntılarını inceleyin.
    • Bu sorumlunun veri düzlemi erişimini hemen iptal etmek için girişin yanındaki Kaldır eylemini kullanın.
  4. Portal listesinde gösterilen nesne tanımlayıcılarının kolay adlarını almak için Microsoft Entra Id bölümündeki Kullanıcılar sayfasını kullanın. Ardından nesne kimliğine veya anlamlı ada göre arama yapın.

  1. Aşağıdaki komutlardan birini kullanarak erişim vermek istediğiniz Microsoft Entra sorumlusunun benzersiz tanımlayıcısını (nesne kimliği) alın:

    • Geçerli oturum açma kimliği

      az ad signed-in-user show      
      
    • Kolay anlaşılır ad kullanan başka bir insan kimliği

      az ad user show \
        --id "<user-alias-and-domain>"
      
    • Uygulama tanımlayıcısı kullanan hizmet sorumlusu

      az ad sp show \
        --id "<application-id>"
      
    • Kaynak grubu ve adı kullanarak yönetilen kimlik

      az identity show \
        --resource-group "<resource-group>" \
        --name "<managed-identity-name>"      
      
  2. AzAPI sağlayıcısını kullanarak sorumluyu kaydetmek ve veritabanı rollerini eşlemek için bir Terraform dosyası (örneğin register-principal.tf) oluşturun:

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

    Tip

    AzAPI sağlayıcısı hakkında daha fazla bilgi için bkz. Azure AzAPI Sağlayıcısı belgeleri.

    • principalType yerine; uygulama/hizmet sorumluları için servicePrincipal veya yönetilen kimlikler için ManagedIdentity kullanın.
    • Yönetim ayrıcalıkları vermek için dizide {"db":"admin","role":"root"} kullanınroles.
  3. adlı register-principal.tfvarsbir değişken dosyası oluşturun:

    cluster_name        = "<cluster-name>"
    resource_group_name = "<resource-group>"
    principal_id        = "<principal-id>"
    principal_type      = "User"
    roles = [
      {
        db   = "sales"
        role = "readWrite"
      }
    ]
    
  4. İlkeyi kaydetmek için Terraform yapılandırmasını başlatın ve uygulayın.

    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. REST API kullanarak küme için tüm kayıtlı sorumluları listeleyin (Terraform dağıtımından sonra kullanışlıdır):

    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. Terraform ile oluşturulmuş belirli bir kayıtlı sorumlunun ayrıntılarını alın (yerine <principal-id> koyun):

    az resource show \
        --resource-group "<resource-group>" \
        --name "<cluster-name>/users/<principal-id>" \
        --resource-type "Microsoft.DocumentDB/mongoClusters/users" \
        --latest-include-preview
    
  7. Terraform kaynağını yok ederek sorumluyu kaldırın:

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

Note

Bir Azure DocumentDB kümesi, yerleşik bir yönetici yerel DocumentDB kullanıcısıyla oluşturulur. Küme sağlama tamamlandıktan sonra daha fazla yerel yönetici DocumentDB kullanıcısı ekleyebilirsiniz . Kümeye eklenen Microsoft Entra ID yönetici kullanıcıları, aynı kümede tanımlanan yerel yönetici DocumentDB kullanıcılarına ek olarak olacaktır. Tüm yönetim Microsoft Entra ID kimlikleri veritabanına çoğaltılır.

Veritabanında yönetici olmayan Microsoft Entra Id kimlikleri oluşturulur. Veritabanında yönetici olmayan kullanıcıları listelediğinizde, liste tüm yönetim ve yönetici olmayan Microsoft Entra Kimliği kimliklerini ve tüm ikincil (yönetici olmayan) yerel DocumentDB kullanıcılarını içerir.

Küme kimlik bilgilerini alma

Tercih ettiğiniz dil için sürücüden bir bağlantı URI'si veya özel ayarlar nesnesi kullanarak kümeye bağlanabilirsiniz. Her iki seçenekte de kümeye bağlanmak için şemamongodb+srv olarak ayarlanmalıdır. Sunucu, *.global.mongocluster.cosmos.azure.com veya *.mongocluster.cosmos.azure.com etki alanında, geçerli kümeyi mi yoksa genel okuma-yazma uç noktasını mı kullandığınıza bağlı olarak bulunur. Şema +srv ve *.global.* ana bilgisayar, bölge değiştirme işlemi gerçekleşse bile istemcinizin çoklu küme yapılandırmasında uygun yazılabilen kümeye dinamik olarak bağlanmasını sağlar. Tek kümeli bir yapılandırmada, herhangi bir bağlantı dizesini ayrımsız olarak kullanabilirsiniz.

Ayarın tls da etkinleştirilmesi gerekir. Önerilen diğer ayarlar en iyi yöntem yapılandırma ayarlarıdır.

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

Important

Bağlantı dizesini almak için Azure portalını kullanın.

  1. Azure DocumentDB kümesine gidin.

  2. Bağlantı dizeleri gezinti menüsü seçeneğini belirleyin.

  3. Değeri Bağlantı dizesi alanından kopyalayın veya kaydedin.

    Tip

    Microsoft Entra Id bağlantı dizeleri Microsoft Entra Id bölümündedir.

Visual Studio Code'da Microsoft Entra Id kullanarak bağlanma

Microsoft Entra ID kimliği kullanarak Azure DocumentDB kümenize bağlanmak için Visual Studio Code'u DocumentDB uzantısıyla kullanın.

Important

DocumentDB uzantısıyla Visual Studio Code'da Microsoft Entra ID kullanarak bir Azure DocumentDB kümesinde kimlik doğrulaması yaptığınızda bu işlevsellik shell tarafından desteklenmez. MongoDB kabuğunu Microsoft Entra ID kimlik doğrulamasıyla kullanmanız gerekiyorsa mongoDB Kabuğu'yu doğrudan bir istemci makinesinde kullanın.

  1. Visual Studio Code'u açın.

  2. Yan çubukta DocumentDB uzantısına gidin.

  3. Bağlantılar bölümünde + Yeni Bağlantı... öğesini seçin.

  4. Bağlantı türü iletişim kutusunda Bağlantı Dizesi'ni seçin.

  5. Aşağıdaki bağlantı dizesini kullanın:

    mongodb+srv://<client-id>@<cluster-name>.global.mongocluster.cosmos.azure.com/?tls=true&authMechanism=MONGODB-OIDC&retrywrites=false&maxIdleTimeMS=120000
    
  6. Microsoft Entra Id kimlik doğrulamasını kullanmak için otomatik istem bekleyin. Kimlik türünüz için uygun kimlik bilgilerini girin.

    Note

    Örneğin, kendi kimliğinizi (bir insan kimliği) kullanarak oturum açıyorsanız parolasız kimlik doğrulama deneyimini kullanın.

  7. Bağlantının sonuçlanmasını bekleyin. Ardından kümenin Bağlantılar bölümüne yeni bir DocumentDB girdisi eklenir.

Microsoft Entra ID kullanarak MongoDB Compass veya MongoDB Kabuğu'nda bağlanın

MongoDB Compass uygulamasıyla doğrudan bir Microsoft Entra ID kimliği kullanarak Azure DocumentDB kümenize bağlanın.

  1. Azure Sanal Makinesi gibi bir Azure işlem kaynağı oluşturarak Azure DocumentDB kümesine bağlanmak için bir yürütme ortamı ayarlayın.

  2. Sistem tarafından atanan bir yönetilen kimlik veya kullanıcı tarafından atanan yönetilen kimlik oluşturun ve bunu sanal makineyle ilişkilendirin.

    Azure portalında yönetilen kimlik atama ekran görüntüsü.

  3. Yönetilen kimliği Azure DocumentDB Kümesine kaydedin.

    Yönetilen kimliği Azure DocumentDB Kümesine kaydetme ekran görüntüsü.

  4. Terminalde MongoDB Compass uygulamasını veya Mongo kabuğunu başlatın.

  5. MongoDB Compass içinde, yeni bir bağlantı eklemek için Bağlantılar menüsünde + öğesini seçin. Kabuğu kullanırken Azure DocumentDB kümenizin adını ve hedef kimliğin istemci kimliğini elde edin.

    Azure DocumentDB'de portaldan Entra bağlantı dizesini oluşturmak için gereken clientid dosyasını gözden geçirme ekran görüntüsü.

  6. URI giriş kutusuna aşağıdaki kimlik bilgilerini girin.

    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
    
  7. Gelişmiş Bağlantı Seçenekleri iletişim kutusunu açın.

  8. Genel bölümünde mongodb+srv seçin.

  9. Kimlik Doğrulaması bölümüne gidin ve OIDC seçeneğinin belirlendiğinden emin olun.

  10. OIDC Seçenekleri bölümüne gidin ve Hedef Uç Noktayı Güvenilir Olarak Düşün seçeneğinin de seçili olduğundan emin olun.

  11. Kaydet ve Bağlan'ı seçin.

DocumentDB ikincil (yönetici olmayan) Microsoft Entra Id kimliklerini yönetme

Yönetici olmayan Microsoft Entra Id kimlikleri için yönetim işlemleri gerçekleştirmek üzere bir yönetici Microsoft Entra Id kimliğiyle kümede oturum açın.

Note

Yönetici olmayan kullanıcılara yönelik tüm yönetim komutları securityPrincipal ve user asıl türleri için desteklenir.

Yönetici olmayan kullanıcılar Azure portalına kaydedilmez.

  1. Microsoft Entra ID kimliği ile yönetici olarak ve MongoDB Kabuğu gibi bir araç kullanarak kümeye giriş yapın.

  2. komutunu kullanarak kümede createUser izinlerine sahip yönetici olmayan bir Microsoft Entra Id kimliği ekleyin:

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "clusterAdmin", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  3. Kümede salt okunur izinlere ve farklı rollere sahip createUser yönetici olmayan bir Microsoft Entra ID kimliği ekleyin.

    db.runCommand(
      {
        createUser: "<entra-id-unique-identifier>",
        roles: [
          { role: "readAnyDatabase", db: "admin" }
        ],
        customData: { "IdentityProvider": { "type": "MicrosoftEntraID", "properties": { "principalType": "user" } } }
      }
    )
    
  4. komutuyla dropUser , yönetici olmayan bir Microsoft Entra Id kimliğini kümeden kaldırın.

    db.runCommand(
      {
        dropUser: "<entra-id-unique-identifier>"
      }
    )
    
  5. Kümedeki tüm Microsoft Entra ID ve yerel DocumentDB kullanıcılarını userInfo kullanarak listeleyin.

    db.runCommand(
      {
        usersInfo: 1
      }
    )
    

    Note

    Tüm Microsoft Entra Kimliği ID ve yerel DocumentDB yönetici kullanıcıları veritabanına kopyalanır. Bu çoğaltma nedeniyle, kullanıcıların listesi kümedeki tüm yönetici ve yönetici olmayan Microsoft Entra Kimliğini ve yerel DocumentDB kullanıcılarını içerir.

Kod içinde Microsoft Entra ID kullanarak bağlanın

Tercih ettiğiniz dil için uygulama kodunu ve uygun istemci kitaplığını kullanarak doğru erişim verdiğini doğrulayın.

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