Aracılığıyla paylaş


Rol tabanlı erişim denetimi ve Microsoft Entra Id kullanarak NoSQL için Azure Cosmos DB'ye bağlanma

Rol tabanlı erişim denetimi, Azure'daki kaynaklara erişimi yönetmek için bir yöntemi ifade eder. Bu yöntem, belirli kimliklere bir veya daha fazla kaynağa sahip oldukları erişim düzeyini yöneten roller atanmasını temel alır. Rol tabanlı erişim denetimi, kimliklerin yalnızca görevlerini gerçekleştirmek için ihtiyaç duydukları en düşük ayrıcalıklı erişim düzeyine sahip olmasını sağlayan esnek bir ayrıntılı erişim yönetimi sistemi sağlar.

Daha fazla bilgi için bkz. rol tabanlı erişim denetimi.

Önkoşullar

  • Aktif bir aboneliğe sahip bir Azure hesabı. Ücretsiz bir hesap oluşturun.

  • Mevcut bir NoSQL için Azure Cosmos DB hesabı.

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

Anahtar tabanlı kimlik doğrulamayı devre dışı bırakma

Anahtar tabanlı yetkilendirmeyi devre dışı bırakmak, hesabınızın daha güvenli Microsoft Entra Id kimlik doğrulama yöntemi olmadan kullanılmasını engeller. Bu yordam, güvenli iş yüklerindeki yeni hesaplarda gerçekleştirilmesi gereken bir adımdır. Alternatif olarak, güvenli bir iş yükü düzenine geçirilen mevcut hesaplarda bu yordamı gerçekleştirin.

İlk olarak, uygulamaların Microsoft Entra Id kimlik doğrulamasını kullanması için gerekli olması için mevcut hesabınızda anahtar tabanlı kimlik doğrulamasını devre dışı bırakın. Hesabın az resource updateını değiştirmek için properties.disableLocalAuth kullanın.

az resource update \
    --resource-group "<name-of-existing-resource-group>" \
    --name "<name-of-existing-account>" \
    --resource-type "Microsoft.DocumentDB/databaseAccounts" \
    --set properties.disableLocalAuth=true

İlk olarak, uygulamaların Microsoft Entra kimlik doğrulamasını kullanması gerektiği için anahtar tabanlı kimlik doğrulaması devre dışı bırakılmış yeni bir hesap oluşturun.

  1. Anahtar tabanlı kimlik doğrulaması devre dışı bırakılmış yeni hesabınızı dağıtmak için yeni bir Bicep dosyası oluşturun. deploy-new-account.bicep dosyasını adlandırın.

    metadata description = 'Deploys a new Azure Cosmos DB account with key-based auth disabled.'
    
    @description('Name of the Azure Cosmos DB account.')
    param name string = 'csms-${uniqueString(resourceGroup().id)}'
    
    @description('Primary location for the Azure Cosmos DB account.')
    param location string = resourceGroup().location
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' = {
      name: name
      location: location
      kind: 'GlobalDocumentDB'
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: location
          }
        ]
        disableLocalAuth: true
      }
    }
    
  2. Yeni hesapla Bicep dosyasını dağıtmak için az deployment group create kullanın.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file deploy-new-account.bicep
    

İlk olarak, uygulamaların Microsoft Entra kimlik doğrulamasını kullanması için gerekli olması için mevcut hesabınızda anahtar tabanlı kimlik doğrulamasını devre dışı bırakın. Mevcut hesabı okumak ve güncellemek için sırasıyla Get-AzResource ve Set-AzResource kullanın.

$parameters = @{
    ResourceGroupName = "<name-of-existing-resource-group>"
    ResourceName = "<name-of-existing-account>"
    ResourceType = "Microsoft.DocumentDB/databaseAccounts"
}
$resource = Get-AzResource @parameters

$resource.Properties.DisableLocalAuth = $true

$resource | Set-AzResource -Force

NoSQL için anahtar tabanlı kimlik doğrulama devre dışı bırakılmış bir Azure Cosmos DB hesabı oluşturmak için bu adımları kullanın, böylece uygulamaların yalnızca Microsoft Entra kimlik doğrulamasını kullanmaları gerekecektir.

  1. NoSQL hesabı için yeni bir Azure Cosmos DB ayarlarken hesap oluşturma işleminin Güvenlik bölümüne gidin.

  2. Ardından Anahtar tabanlı kimlik doğrulaması seçeneği için Devre dışı bırak'ı seçin.

    Azure portalında yeni bir hesap oluştururken anahtar tabanlı kimlik doğrulamasını devre dışı bırakma seçeneğinin ekran görüntüsü.

Önemli

Azure Cosmos DB hesabını değiştirmek için en azından izinli Microsoft.DocumentDb/databaseAccounts/*/write bir Azure rolü gerekir. Daha fazla bilgi için bkz. Azure Cosmos DB izinleri.

Anahtar tabanlı kimlik doğrulamasının devre dışı bırakıldığını doğrulama

Anahtar tabanlı erişimin devre dışı bırakıldığını doğrulamak için, kaynak sahibi parola kimlik bilgilerini (ROPC) kullanarak NoSQL için Azure Cosmos DB'ye bağlanmak üzere Azure SDK'yı kullanmayı deneme. Bu deneme başarısız olmalıdır. Gerekirse, yaygın programlama dilleri için kod örnekleri burada sağlanır.

using Microsoft.Azure.Cosmos;

string connectionString = "AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;";

CosmosClient client = new(connectionString);
const { CosmosClient } = require('@azure/cosmos');

const connectionString = 'AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;';

const client = new CosmosClient(connectionString);
import { CosmosClient } from '@azure/cosmos'

let connectionString: string = 'AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;';

const client: CosmosClient = new CosmosClient(connectionString);
from azure.cosmos import CosmosClient

connection_string = "AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;"

client = CosmosClient(connection_string)
package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
)

const connectionString = "AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;"

func main() {
    client, _ := azcosmos.NewClientFromConnectionString(connectionString, nil)
}
import com.azure.cosmos.CosmosClient;
import com.azure.cosmos.CosmosClientBuilder;

public class NoSQL{
    public static void main(String[] args){
        CosmosClient client = new CosmosClientBuilder()
            .endpoint("<nosql-endpoint>")
            .key("<key>")
            .buildClient();
    }
}
use azure_data_cosmos::CosmosClient;

fn main() {
    let client = CosmosClient::new_with_access_key(
        "<account-endpoint>",
        "<account-key>",
        None,
    ).unwrap();

    let container = client.database_client("<database-name>").container_client("<container-name>");

    let response = container.read_item("<partition-key>", "<item-id>", None);
    tokio::runtime::Runtime::new().unwrap().block_on(response).unwrap();
}

Kontrol düzlemi rol bazlı erişim izni verme

Denetim düzlemi erişimi, verileri yönetmeden Azure hizmetinin kaynaklarını yönetme özelliğini ifade eder. Örneğin, Azure Cosmos DB denetim düzlemi erişimi şunları içerebilir:

  • Tüm hesap ve kaynak meta verilerini okuma
  • Hesap anahtarlarını ve bağlantı dizelerini okuma ve yeniden oluşturma
  • Hesap yedeklemeleri ve geri yükleme gerçekleştirme
  • Veri aktarımı işlerini başlatma ve izleme
  • Veritabanlarını ve kapsayıcıları yönetme
  • Hesap özelliklerini değiştirme

Önemli

Azure Cosmos DB'de yerel veri düzlemi rol tabanlı erişim denetimi tanımlarını ve atamalarını yönetmek için denetim düzlemi erişimine ihtiyacınız vardır. Azure Cosmos DB'nin veri düzlemi rol tabanlı erişim denetim mekanizması yerel olduğundan, tanımları ve atamaları oluşturmak ve bunları bir Azure Cosmos DB hesabında kaynak olarak depolamak için denetim düzlemi erişimine ihtiyacınız vardır.

İlk olarak, Azure Cosmos DB'deki hesap kaynaklarını yönetme erişimi vermek için listesini actions içeren bir rol tanımı hazırlamanız gerekir. Bu kılavuzda, yerleşik ve özel bir rol hazırlarsınız. Ardından, uygulamalarınızın Azure Cosmos DB'deki kaynaklara erişebilmesi için yeni tanımlanan rolü[s] bir kimliğe atayın.

  1. kullanarak Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listeleyin az role definition list.

    az role definition list \
        --name "Cosmos DB Operator"
    
  2. Çıktıyı gözden geçirin ve Cosmos DB İşleci adlı rol tanımını bulun. Çı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": [
          "/"
        ],
        "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
        "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
        "permissions": [
          {
            "actions": [
              "Microsoft.DocumentDb/databaseAccounts/*",
              "Microsoft.Insights/alertRules/*",
              "Microsoft.Authorization/*/read",
              "Microsoft.ResourceHealth/availabilityStatuses/read",
              "Microsoft.Resources/deployments/*",
              "Microsoft.Resources/subscriptions/resourceGroups/read",
              "Microsoft.Support/*",
              "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
            ],
            "condition": null,
            "conditionVersion": null,
            "dataActions": [],
            "notActions": [
              "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
              "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
              "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
            ],
            "notDataActions": []
          }
        ],
        "roleName": "Cosmos DB Operator",
        "roleType": "BuiltInRole",
        "type": "Microsoft.Authorization/roleDefinitions",
      }
    ]
    

    Uyarı

    Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Ancak tanımlayıcı (230815da-be43-4aae-9cb4-875f7bd000aa) Azure'daki tüm rol tanımlarında genel olarak benzersizdir.

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

    Uyarı

    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 Cosmos DB Control Plane Owner",
      "IsCustom": true,
      "Description": "Can perform all control plane actions for an Azure Cosmos DB account.",
      "Actions": [
        "Microsoft.DocumentDb/*"
      ],
      "AssignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
      ]
    }
    

    Uyarı

    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 control plane actions for an Azure Cosmos DB account.",
      "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 Cosmos DB Control Plane Owner",
      "roleType": "CustomRole"
    }
    

    Uyarı

    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.

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

    az group show \
        --name "<name-of-existing-resource-group>"
    
  9. Ö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"
    }
    

    Uyarı

    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.

  10. Yeni rolü az role assignment create kullanarak atayın. --scope bağımsız değişkeni için kaynak grubunuzun tanımlayıcısını, -role bağımsız değişkeni için rolün tanımlayıcısını ve --assignee bağımsız değişkeni için kimliğinizin benzersiz tanımlayıcısını kullanın.

    az role assignment create \
        --assignee "<your-principal-identifier>" \
        --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
    

    Uyarı

    Bu örnek komutta scope, önceki adımın örneğinden kurgusal örnek /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example olarak ayarlanmıştır. Kaynak grubunuzun tanımlayıcısı bu örnekten farklı olabilir. ayrıca role kurgusal /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1olarak ayarlanmıştır. Yine rol tanımlayıcınız farklı olabilir.

  11. Komutun çıkışını gözlemleyin. Çıkış, id özelliğindeki atama için benzersiz bir tanımlayıcı içerir.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
      "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
      "resourceGroup": "msdocs-identity-example",
      "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

    Uyarı

    Bu örnekte, id özelliği /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 olup başka bir kurgusal örnek oluşturmaktadır.

  12. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    Tavsiye

    İstediğiniz sayıda kimlik için bu adımları yineleyebilirsiniz. Genellikle, geliştiricilerin bir hesaba insan kimliklerini kullanarak erişmesine ve uygulamaların yönetilen kimlik kullanarak verilere erişmesine izin vermek için bu adımlar en azından yinelenir.

  1. kullanarak Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listeleyin az role definition list.

    az role definition list \
        --name "Cosmos DB Operator"
    
  2. Çıktıyı gözden geçirin ve Cosmos DB İşleci adlı rol tanımını bulun. Çı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": [
          "/"
        ],
        "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
        "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
        "permissions": [
          {
            "actions": [
              "Microsoft.DocumentDb/databaseAccounts/*",
              "Microsoft.Insights/alertRules/*",
              "Microsoft.Authorization/*/read",
              "Microsoft.ResourceHealth/availabilityStatuses/read",
              "Microsoft.Resources/deployments/*",
              "Microsoft.Resources/subscriptions/resourceGroups/read",
              "Microsoft.Support/*",
              "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
            ],
            "condition": null,
            "conditionVersion": null,
            "dataActions": [],
            "notActions": [
              "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
              "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
              "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
            ],
            "notDataActions": []
          }
        ],
        "roleName": "Cosmos DB Operator",
        "roleType": "BuiltInRole",
        "type": "Microsoft.Authorization/roleDefinitions",
      }
    ]
    

    Uyarı

    Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Ancak tanımlayıcı (230815da-be43-4aae-9cb4-875f7bd000aa) Azure'daki tüm rol tanımlarında genel olarak benzersizdir.

  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/* Tüm olası eylemleri etkinleştirir.
    metadata description = 'Create RBAC definition for control plane access to Azure Cosmos DB.'
    
    @description('Name of the role definition.')
    param roleDefinitionName string = 'Azure Cosmos DB Control Plane Owner'
    
    @description('Description of the role definition.')
    param roleDefinitionDescription string = 'Can perform all control plane actions for an Azure Cosmos DB account.'
    
    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/*'
            ]
          }
        ]
        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"
          }
        }
      }
    }
    

    Uyarı

    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 control plane access to Azure Cosmos DB.'
    
    @description('Id of the role definition to assign to the targeted principal in the context of the account.')
    param roleDefinitionId string
    
    @description('Id of the identity/principal to assign this role in the context of the account.')
    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
    
  9. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    Tavsiye

    İstediğiniz sayıda kimlik için bu adımları yineleyebilirsiniz. Genellikle, geliştiricilerin bir hesaba insan kimliklerini kullanarak erişmesine ve uygulamaların yönetilen kimlik kullanarak verilere erişmesine izin vermek için bu adımlar en azından yinelenir.

  1. Azure portalında (https://portal.azure.com ) oturum açın.

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

    Azure portalındaki genel arama çubuğunun ekran görüntüsü.

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

    Arama menüsünde seçilen 'Kaynak grupları' seçeneğinin ekran görüntüsü.

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

    Abonelik için kaynak grupları listesinde var olan bir kaynak grubunun ekran görüntüsü.

    Uyarı

    Bu örnek ekran görüntüsü kaynak msdocs-identity-example grubunu içerir. Gerçek kaynak grubu adınız farklı olabilir.

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

    Kaynak grubunun hizmet menüsündeki 'Erişim Denetimi (IAM)' seçeneğinin ekran görüntüsü.

  6. Erişim denetimi (IAM) bölmesinde Roller'i seçin.

    'Erişim Denetimi (IAM)' bölmesindeki 'Roller' seçeneğinin ekran görüntüsü.

  7. Roller bölümünde Cosmos DB aramasını kullanın ve Cosmos DB Operatör rol tanımını bulun. Ardından, bu tanımla ilişkilendirilmiş Görünüm seçeneğini belirleyin.

    Yalnızca başlığa 'Cosmos DB' içeren tanımları içerecek şekilde filtrelenmiş geçerli atanabilir kapsamdaki rol tanımlarının listesinin ekran görüntüsü.

  8. Cosmos DB İşleci rol tanımı iletişim kutusunda, bu rol tanımının parçası olarak atanan eylemleri gözlemleyin.

    Yerleşik rol tanımıyla ilgili ayrıntıları içeren 'Cosmos DB İşleci' iletişim kutusunun ekran görüntüsü.

  9. Cosmos DB İşleci rol tanımı iletişim kutusunu kapatın.

  10. Erişim denetimi (IAM) bölmesine dönüp Ekle'yi seçin. Ardından Özel rol ekle'yi seçin.

    'Ekle' seçeneğinin 'Erişim Denetimi (IAM)' menüsündeki 'Özel rol ekle' seçeneğinin ekran görüntüsü.

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

    Değer
    Özel rol adı Azure Cosmos DB Control Plane Owner
    Açıklama Can perform all control plane actions for an Azure Cosmos DB account.
    Temel izinler Sıfırdan başlayın

    Özel rol eklemeye yönelik 'Temel Bilgiler' bölmesinin ekran görüntüsü.

  12. İzinler bölmesinde İzinekle'yi seçin. Ardından, izinler iletişim kutusunda öğesini DocumentDB arayın. Son olarak Microsoft.DocumentDB seçeneğini belirleyin.

    Özel rol eklemeye yönelik 'İzinler' bölmesinin ekran görüntüsü.

    Özel rol eklemek için 'DocumentDB' ile ilgili izinlere göre filtrelenmiş 'İzin ekle' iletişim kutusunun ekran görüntüsü.

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

    Özel rol için bir iletişim kutusunda 'DocumentDB' için seçilen tüm izinlerin ekran görüntüsü.

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

    Özel rol için listeye birden çok izin eklenmiş 'İzinler' bölmesinin ekran görüntüsü.

  15. 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.

    Özel rol eklemeye yönelik 'Gözden geçir + oluştur' bölmesinin ekran görüntüsü.

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

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

    'Ekle' seçeneğinin 'Erişim Denetimi (IAM)' menüsündeki 'Rol ataması ekle' seçeneğinin ekran görüntüsü.

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

    Rol ataması eklemeye yönelik 'Rol' bölmesinin ekran görüntüsü.

    Tavsiye

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

  19. Üyeler bölmesinde Üyeleri seç seçeneğini belirleyin. Üyeler iletişim kutusunda, Azure Cosmos DB hesabınız 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.

    Rol ataması eklemeye yönelik 'Üyeler' bölmesinin ekran görüntüsü.

    Rol ataması eklemek için kimlik seçimi iletişim kutusunun ekran görüntüsü.

    Uyarı

    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.

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

    Rol ataması için seçilen kimlikle 'Üyeler' bölmesinin ekran görüntüsü.

  21. 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.

    Rol ataması için 'Gözden geçir + oluştur' bölmesinin ekran görüntüsü.

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

  1. Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listelemek için kullanın Get-AzRoleDefinition .

    $parameters = @{
        Name = "Cosmos DB Operator"
    }
    Get-AzRoleDefinition @parameters
    
  2. Çıktıyı gözden geçirin ve Cosmos DB Yerleşik Veri Katkıda Bulunanı adlı rol tanımını bulun. Çı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.

    Name             : Cosmos DB Operator
    Id               : 230815da-be43-4aae-9cb4-875f7bd000aa
    IsCustom         : False
    Description      : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
    Actions          : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
    NotActions       : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
    DataActions      : {}
    NotDataActions   : {}
    AssignableScopes : {/}
    

    Uyarı

    Bu örnekte Id değeri olacaktır 230815da-be43-4aae-9cb4-875f7bd000aa. Tanımlayıcı, Azure'daki tüm rol tanımlarında genel olarak benzersizdir.

  3. Geçerli kaynak grubunuzun meta verilerini almak için kullanın Get-AzResourceGroup .

    $parameters = @{
        Name = "<name-of-existing-resource-group>"
    }
    Get-AzResourceGroup @parameters
    
  4. Önceki komutun çıkışını gözlemleyin. Bu kaynak grubu için ResourceId özelliğinin değerini kaydedin, çünkü bu değer bir sonraki adımda kullanılacaktır.

    ResourceGroupName : msdocs-identity-example
    Location          : westus
    ProvisioningState : Succeeded
    ResourceId        : /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-example
    

    Uyarı

    Bu örnekte ResourceId değeri olacaktır /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-example. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Bu metin dizisi, tipik çıktının kesilmiş bir örneğidir.

  5. İlk olarak modülü içeri aktarın Az.Resources . Ardından Yeni Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition bir nesne oluşturun. nesnesinde, burada listelenen değerleri belirterek bu kaynak tanımını oluşturun. AssignableScopes Liste için, önceki adımda kaydedilen kaynak grubunun özelliğini ekleyinResourceId. Son olarak, -Role parametresine girdi olarak New-AzRoleDefinition rol tanımı nesnesini kullanın.

    Import-Module Az.Resources
    
    $parameters = @{
        TypeName = "Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition"
        Property = @{
            Name = "Azure Cosmos DB Control Plane Owner"
            Description = "Can perform all control plane actions for an Azure Cosmos DB account."
            IsCustom = $true
            Actions = @(
                "Microsoft.DocumentDb/*"
            )
            AssignableScopes = @(
                "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
            )
        }
    }
    $role = New-Object @parameters
    
    New-AzRoleDefinition -Role $role
    

    Uyarı

    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. Tanım oluşturma komutundan çıktıyı gözden geçirin. Çıkış, Name ö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.

    Name             : Azure Cosmos DB Control Plane Owner
    Id               : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    IsCustom         : True
    Description      : Can perform all control plane actions for an Azure Cosmos DB account.
    Actions          : {Microsoft.DocumentDb/*}
    AssignableScopes : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example}
    

    Uyarı

    Bu örnekte Name değeri olacaktır Azure Cosmos DB Control Plane Owner. Bu örnek, anlaşılır kılmak amacıyla dağıtımın tipik çıktısının bir alt kümesidir.

  7. Yeni rolü New-AzRoleAssignment kullanarak atayın. Rolün RoleDefinitionName adını RoleDefinitionName parametresi için, kimliğinizin benzersiz tanımlayıcısını ise parametresi için kullanın.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  8. Komutun çıkışını gözlemleyin. Çıkış, RoleAssignmentId özelliğindeki atama için benzersiz bir tanımlayıcı içerir.

    RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa
    RoleAssignmentId   : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1
    Scope              : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
    DisplayName        : Kai Carter
    SignInName         : <kai@adventure-works.com>
    RoleDefinitionName : Azure Cosmos DB Control Plane Owner
    RoleDefinitionId   : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    

    Uyarı

    Bu örnekte, RoleAssignmentId özelliği /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 olup başka bir kurgusal örnek oluşturmaktadır. Bu örnek, anlaşılır kılmak amacıyla dağıtımın tipik çıktısının bir alt kümesidir.

  9. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    Tavsiye

    İstediğiniz sayıda kimlik için bu adımları yineleyebilirsiniz. Genellikle, geliştiricilerin bir hesaba insan kimliklerini kullanarak erişmesine ve uygulamaların yönetilen kimlik kullanarak verilere erişmesine izin vermek için bu adımlar en azından yinelenir.

Önemli

Rol tanımı atamak için rol tabanlı erişim denetimi izinleri vermek istediğiniz herhangi bir kimliğin benzersiz tanımlayıcısına zaten sahip olmanız gerekir.

Kodda kontrol düzlemi rol tabanlı erişimi doğrula

Uygulama kodunu ve Azure Yönetim SDK'sını kullanarak doğru erişim verdiğini doğrulayın.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);
const { CosmosDBManagementClient } = require('@azure/arm-cosmosdb');
const { DefaultAzureCredential } = require('@azure/identity');

const subscriptionId = "<subscription-id>";

const credential = new DefaultAzureCredential();

const client = new CosmosDBManagementClient(credential, subscriptionId);
import { CosmosDBManagementClient } from '@azure/arm-cosmosdb';
import { TokenCredential, DefaultAzureCredential } from '@azure/identity';

let subscriptionId: string = "<subscription-id>";

let credential: TokenCredential = new DefaultAzureCredential();

const client: CosmosDBManagementClient = new CosmosDBManagementClient(credential, subscriptionId);
from azure.mgmt.cosmosdb import CosmosDBManagementClient
from azure.identity import DefaultAzureCredential

subscription_id = "<subscription-id>"

credential = DefaultAzureCredential()

client = CosmosDBManagementClient(credential=credential, subscription=subscription_id)
package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos"
)

const subscriptionId = "<subscription-id>"

func main() {
    credential, _ := azidentity.NewDefaultAzureCredential(nil)
    
    client, _ := armcosmos.NewDatabaseClient(subscriptionId, credential, nil)
}
package com.example;

import com.azure.core.management.profile.AzureProfile;
import com.azure.core.management.AzureEnvironment;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.resourcemanager.cosmos.CosmosManager;

public class CosmosDB {
    public static void main(String[] args) {
        AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
          .build();

        CosmosManager manager = CosmosManager.authenticate(credential, profile);
    }
}

Veri düzlemi için rol tabanlı erişim sağla

Veri düzlemi erişimi, hesaptaki kaynakları yönetme olanağı olmadan Bir Azure hizmeti içindeki verileri okuma ve yazma özelliğini ifade eder. Örneğin, Azure Cosmos DB veri düzlemi erişimi şunları içerebilir:

  • Bazı hesap ve kaynak meta verilerini okuma
  • Öğeleri oluşturma, okuma, güncelleştirme, düzeltme ve silme
  • NoSQL sorguları yürütme
  • Kapsayıcının değişiklik akışını okuma
  • Saklı yordamları çalıştır
  • Çakışma akışındaki çakışmaları yönetme

İlk olarak, NoSQL için Azure Cosmos DB'de verileri okuma, sorgulama ve yönetme erişimi vermek için listesiyle dataActions bir rol tanımı hazırlamanız gerekir. Bu kılavuzda özel bir rol hazırlayabilirsiniz. Ardından, uygulamalarınızın NoSQL için Azure Cosmos DB'deki verilere erişebilmesi için yeni tanımlanan rolü bir kimliğe atayın.

Azure Cosmos DB, ortak erişim desenlerini basitleştirmek için yerleşik veri düzlemi rolleri (Cosmos DB Built-in Data Reader ve Cosmos DB Built-in Data Contributor) de sağlar. Daha fazla bilgi için yerleşik rollerin tam listesine bakın.

Önemli

Mevcut bir veri düzlemi rol tanımını almak için şu denetim düzlemi izinleri gerekir:

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read

Yeni bir veri düzlemi rol tanımı oluşturmak için şu denetim düzlemi izinleri gerekir:

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write

Yeni bir veri düzlemi rol ataması oluşturmak için şu denetim düzlemi izinleri gerekir:

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write

Uyarı

NoSQL için Azure Cosmos DB'nin yerel rol tabanlı erişim denetimi, notDataActions özelliğini desteklememektedir. İzin verilen dataAction olarak belirtilmeyen tüm eylemler otomatik olarak dışlanır.

  1. kullanarak NoSQL için Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listeleyin az cosmosdb sql role definition list.

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  2. Özel rolü oluşturmak için kullanılan role-definition.jsonadlı yeni bir JSON dosyası oluşturun. Bu dosyada, burada listelenen veri eylemlerini belirten bir kaynak tanımı oluşturun:

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata Hesap düzeyinde meta verileri okuyabilir
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* Herhangi bir kapsayıcı düzeyinde veri işlemlerini gerçekleştirebilir
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* Kapsayıcıları olan öğeler üzerinde herhangi bir işlem gerçekleştirebilir
    {
      "RoleName": "Azure Cosmos DB for NoSQL Data Plane Owner",
      "Type": "CustomRole",
      "AssignableScopes": [
        "/"
      ],
      "Permissions": [
        {
          "DataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
          ]
        }
      ]
    }
    
  3. Ardından rol tanımını oluşturmak için kullanın az cosmosdb sql role definition create . role-definition.json dosyasını --body bağımsız değişkeni için girdi olarak kullanın.

    az cosmosdb sql role definition create \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>" \
        --body "@role-definition.json"
    
  4. Önceki komutun çıkışını gözden geçirin. NOSQL için Azure Cosmos DB Veri Düzlemi Sahibi adlı yeni oluşturduğunuz rol tanımını bulun. Çı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 --role-definition-id

    {
      "assignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
      ],
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc",
      "name": "bbbbbbbb-1111-2222-3333-cccccccccccc",
      "permissions": [
        {
          "dataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
          ],
          "notDataActions": []
        }
      ],
      "resourceGroup": "msdocs-identity-example",
      "roleName": "Azure Cosmos DB for NoSQL Data Plane Owner",
      "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
      "typePropertiesType": "CustomRole"
    }
    

    Uyarı

    Bu örnekte --role-definition-id değeri olacaktır bbbbbbbb-1111-2222-3333-cccccccccccc. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir.

  5. Yeni rolü az cosmosdb sql role assignment create kullanarak atayın. Bağımsız değişken için --role-definition-id daha önce kaydedilmiş rol tanımı tanımlayıcılarını, bağımsız değişken için kimliğinizin --principal-id benzersiz tanımlayıcısını ve bağımsız değişkenin --scope veri düzlemi kapsamını kullanın. Hesabın tamamına erişim vermek için kapsam olarak kullanın / .

    az cosmosdb sql role assignment create \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>" \
        --role-definition-id "<id-of-new-role-definition>" \
        --principal-id "<id-of-existing-identity>" \
        --scope "/"
    

    Tavsiye

    Kendi kimliğinize veri düzlemi rol tabanlı erişim denetimi verme girişimindeyseniz, kimliği almak için şu komutu kullanabilirsiniz:

    az ad signed-in-user show
    

    Daha fazla bilgi için bkz. az ad signed-in-user.

    Tavsiye

    Azure Cosmos DB'nin rol tabanlı erişim denetiminin yerel uygulamasında kapsam , iznin uygulanmasını istediğiniz hesaptaki kaynakların ayrıntı düzeyini ifade eder. En yüksek düzeyde, en büyük kapsamı kullanarak tüm hesaba veri düzlemi rol tabanlı erişim denetimi atamasını kapsamlayabilirsiniz. Bu kapsam, hesaptaki tüm veritabanlarını ve kapsayıcıları içerir:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    Alternatif olarak, veri düzlemi rol atamanızın kapsamını belirli bir veritabanına da ayarlayabilirsiniz:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    Son olarak, atamanın kapsamını en ayrıntılı kapsam olan tek bir kapsayıcıya ayarlayabilirsiniz:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    Çoğu durumda, tam kapsam yerine göreli kapsamı kullanabilirsiniz. Örneğin, azure CLI komutundan belirli bir veritabanı ve kapsayıcıya veri düzlemi rol tabanlı erişim denetimi izinleri vermek için bu göreli kapsamı kullanabilirsiniz:

    /dbs/<database-name>/colls/<container-name>
    

    Göreli kapsamı kullanarak tüm veritabanlarına ve kapsayıcılara evrensel erişim de verebilirsiniz:

    /
    
  6. NoSQL için Azure Cosmos DB hesabınızın tüm rol atamalarını listelemek için kullanın az cosmosdb sql role assignment list . Rol atamanızın oluşturulduğundan emin olmak için çıktıyı gözden geçirin.

    az cosmosdb sql role assignment list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  1. kullanarak NoSQL için Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listeleyin az cosmosdb sql role definition list.

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  2. Çıktıyı gözden geçirin ve Cosmos DB Yerleşik Veri Katkıda Bulunanı adlı rol tanımını bulun. Çı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/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
        ],
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002",
        "name": "00000000-0000-0000-0000-000000000002",
        "permissions": [
          {
            "dataActions": [
              "Microsoft.DocumentDB/databaseAccounts/readMetadata",
              "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
              "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
            ],
            "notDataActions": []
          }
        ],
        "resourceGroup": "msdocs-identity-example",
        "roleName": "Cosmos DB Built-in Data Contributor",
        "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
        "typePropertiesType": "BuiltInRole"
      }
      ...
    ]
    

    Uyarı

    Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir.

  3. Rol tanımınızı tanımlamak için yeni bir Bicep dosyası oluşturun. Dosyayı data-plane-role-definition.bicep olarak adlandırın. Bunları dataActions tanıma ekleyin:

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata Hesap düzeyinde meta verileri okuyabilir
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* Herhangi bir kapsayıcı düzeyinde veri işlemlerini gerçekleştirebilir
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* Kapsayıcıları olan öğeler üzerinde herhangi bir işlem gerçekleştirebilir
    metadata description = 'Create RBAC definition for data plane access to Azure Cosmos DB for NoSQL.'
    
    @description('Name of the Azure Cosmos DB for NoSQL account.')
    param accountName string
    
    @description('Name of the role definition.')
    param roleDefinitionName string = 'Azure Cosmos DB for NoSQL Data Plane Owner'
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = {
      name: accountName
    }
    
    resource definition 'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2024-05-15' = {
      name: guid(account.id, roleDefinitionName)
      parent: account
      properties: {
        roleName: roleDefinitionName
        type: 'CustomRole'
        assignableScopes: [
          account.id
        ]
        permissions: [
          {
            dataActions: [
              'Microsoft.DocumentDB/databaseAccounts/readMetadata'
              'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*'
              'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*'
            ]
          }
        ]
      }
    }
    
    output definitionId string = definition.id
    

    Tavsiye

    Azure Cosmos DB'nin rol tabanlı erişim denetiminin yerel uygulamasında kapsam , iznin uygulanmasını istediğiniz hesaptaki kaynakların ayrıntı düzeyini ifade eder. En yüksek düzeyde, en büyük kapsamı kullanarak tüm hesaba veri düzlemi rol tabanlı erişim denetimi atamasını kapsamlayabilirsiniz. Bu kapsam, hesaptaki tüm veritabanlarını ve kapsayıcıları içerir:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    Alternatif olarak, veri düzlemi rol atamanızın kapsamını belirli bir veritabanına da ayarlayabilirsiniz:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    Son olarak, atamanın kapsamını en ayrıntılı kapsam olan tek bir kapsayıcıya ayarlayabilirsiniz:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    Çoğu durumda, tam kapsam yerine göreli kapsamı kullanabilirsiniz. Örneğin, azure CLI komutundan belirli bir veritabanı ve kapsayıcıya veri düzlemi rol tabanlı erişim denetimi izinleri vermek için bu göreli kapsamı kullanabilirsiniz:

    /dbs/<database-name>/colls/<container-name>
    

    Göreli kapsamı kullanarak tüm veritabanlarına ve kapsayıcılara evrensel erişim de verebilirsiniz:

    /
    
  4. data-plane-role-definition adlı yeni bir Bicep parametre dosyası oluşturun .bicepparam. Bu parametre dosyasında, mevcut NoSQL için Azure Cosmos DB hesabınızın adını parametresine atayın accountName .

    using './data-plane-role-definition.bicep'
    
    param accountName = '<name-of-existing-nosql-account>'
    
  5. az deployment group create kullanarak Bicep şablonunu dağıtın.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters data-plane-role-definition.bicepparam \
        --template-file data-plane-role-definition.bicep
    
  6. Rol atamanızı tanımlamak için yeni bir Bicep dosyası oluşturun. Dosyayı data-plane-role-assignment.bicep olarak adlandırın.

    metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for NoSQL.'
    
    @description('Name of the Azure Cosmos DB for NoSQL account.')
    param accountName string
    
    @description('Id of the role definition to assign to the targeted principal in the context of the account.')
    param roleDefinitionId string
    
    @description('Id of the identity/principal to assign this role in the context of the account.')
    param identityId string = deployer().objectId
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = {
      name: accountName
    }
    
    resource assignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-05-15' = {
      name: guid(roleDefinitionId, identityId, account.id)
      parent: account
      properties: {
        principalId: identityId
        roleDefinitionId: roleDefinitionId
        scope: account.id
      }
    }
    
    output assignmentId string = assignment.id
    
  7. Yeni bir data-plane-role-assignment adlı Bicep parametre dosyası oluşturunbicepparam. Bu parametre dosyasında, mevcut NoSQL için Azure Cosmos DB hesabınızın adını parametresine accountName , daha önce kaydedilen rol tanımı tanımlayıcılarını parametresine roleDefinitionId ve kimliğinizin benzersiz tanımlayıcısını parametresine atayın identityId .

    using './data-plane-role-assignment.bicep'
    
    param accountName = '<name-of-existing-nosql-account>'
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    

    Tavsiye

    Kendi kimliğinize veri düzlemi rol tabanlı erişim denetimi verme girişiminde bulunursanız parametresini identityId atlayabilirsiniz. Ardından Bicep şablonu, şablonu dağıtan sorumlunun kimliğini almak için kullanır deployer().objectId . Daha fazla bilgi için bkz. deployer.

  8. az deployment group create kullanarak Bicep şablonunu dağıtın.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters data-plane-role-assignment.bicepparam \
        --template-file data-plane-role-assignment.bicep
    
  9. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    Tavsiye

    İstediğiniz sayıda kimlik için bu adımları yineleyebilirsiniz. Genellikle, geliştiricilerin bir hesaba insan kimliklerini kullanarak erişmesine izin vermek için bu adımlar en azından yinelenir. Uygulamaların yönetilen kimlik kullanarak kaynaklara erişmesine izin vermek için de bu adımları yineleyebilirsiniz.

  1. NoSQL için Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listelemek için kullanın Get-AzCosmosDBSqlRoleDefinition .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleDefinition @parameters
    
  2. Çıktıyı gözden geçirin ve Cosmos DB Yerleşik Veri Katkıda Bulunanı adlı rol tanımını bulun. Çı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.

    Id                         : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
    RoleName                   : Cosmos DB Built-in Data Contributor
    Type                       : BuiltInRole
    AssignableScopes           : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccountsmsdocs-identity-example-nosql}
    Permissions.DataActions    : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*}
    Permissions.NotDataActions : 
    

    Uyarı

    Bu örnekte Id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Ancak, tanımlayıcı (00000000-0000-0000-0000-000000000002) hesabınızdaki tüm rol tanımlarında benzersizdir.

  3. kullanarak New-AzCosmosDBSqlRoleDefinitionyeni bir rol tanımı oluşturun. parametresi için DataAction burada listelenen veri eylemlerini belirtin:

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata Hesap düzeyinde meta verileri okuyabilir
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* Herhangi bir kapsayıcı düzeyinde veri işlemlerini gerçekleştirebilir
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* Kapsayıcıları olan öğeler üzerinde herhangi bir işlem gerçekleştirebilir
    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
        RoleName = "Azure Cosmos DB for NoSQL Data Plane Owner"
        Type = "CustomRole"
        AssignableScope = @(
            "/"
        )
        DataAction = @(
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
        )
    }
    New-AzCosmosDBSqlRoleDefinition @parameters
    

    Tavsiye

    Azure Cosmos DB'nin rol tabanlı erişim denetiminin yerel uygulamasında kapsam , iznin uygulanmasını istediğiniz hesaptaki kaynakların ayrıntı düzeyini ifade eder. En yüksek düzeyde, en büyük kapsamı kullanarak tüm hesaba veri düzlemi rol tabanlı erişim denetimi atamasını kapsamlayabilirsiniz. Bu kapsam, hesaptaki tüm veritabanlarını ve kapsayıcıları içerir:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    Alternatif olarak, veri düzlemi rol atamanızın kapsamını belirli bir veritabanına da ayarlayabilirsiniz:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    Son olarak, atamanın kapsamını en ayrıntılı kapsam olan tek bir kapsayıcıya ayarlayabilirsiniz:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    Çoğu durumda, tam kapsam yerine göreli kapsamı kullanabilirsiniz. Örneğin, azure CLI komutundan belirli bir veritabanı ve kapsayıcıya veri düzlemi rol tabanlı erişim denetimi izinleri vermek için bu göreli kapsamı kullanabilirsiniz:

    /dbs/<database-name>/colls/<container-name>
    

    Göreli kapsamı kullanarak tüm veritabanlarına ve kapsayıcılara evrensel erişim de verebilirsiniz:

    /
    
  4. NoSQL için Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listelemek için kullanın Get-AzCosmosDBSqlRoleDefinition .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleDefinition @parameters    
    
  5. Önceki komutun çıkışını gözden geçirin. NOSQL için Azure Cosmos DB Veri Düzlemi Sahibi adlı yeni oluşturduğunuz rol tanımını bulun. Çı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.

    Id                         : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc
    RoleName                   : Azure Cosmos DB for NoSQL Data Plane Owner
    Type                       : CustomRole
    AssignableScopes           : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql}
    Permissions.DataActions    : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*}
    Permissions.NotDataActions :
    

    Uyarı

    Bu örnekte Id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir.

  6. Geçerli hesabınızın meta verilerini almak için kullanın Get-AzCosmosDBAccount .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-nosql-account>"
    }    
    Get-AzCosmosDBAccount @parameters | Select -Property Id
    
  7. Yeni rolü atamak için kullanın New-AzCosmosDBSqlRoleAssignment . RoleDefinitionId parametresi için önceden kaydedilmiş rol tanımı tanımlayıcılarını, PrincipalId parametresi için kimliğinizin benzersiz tanımlayıcısını ve Scope parametresi için veri düzlemi kapsamını kullanın. Hesabın tamamına erişim vermek için kapsam olarak kullanın / .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
        RoleDefinitionId = "<id-of-new-role-definition>"
        PrincipalId = "<id-of-existing-identity>"
        Scope = "/"
    }
    New-AzCosmosDBSqlRoleAssignment @parameters
    

    Tavsiye

    Kendi kimliğinize veri düzlemi rol tabanlı erişim denetimi verme girişimindeyseniz, kimliği almak için şu komutu kullanabilirsiniz:

    Get-AzADUser -SignedIn | Format-List `
        -Property Id, DisplayName, Mail, UserPrincipalName
    

    Daha fazla bilgi için bkz. Get-AzADUser.

  8. kullanarak NoSQL için Azure Cosmos DB hesabınızın tüm rol atamalarını listeleyin Get-AzCosmosDBSqlRoleAssignment. Rol atamanızın oluşturulduğundan emin olmak için çıktıyı gözden geçirin.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleAssignment @parameters
    

Uyarı

Veri düzlemi rol tabanlı erişim denetiminin yönetilmesi Azure portalında desteklenmez.

Kod ortamında veri düzlemi rol tabanlı erişimi doğrulama

Uygulama kodunu ve Azure SDK'yı kullanarak doğru erişim verdiğini doğrulayın.

using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;

string endpoint = "<account-endpoint>";

TokenCredential credential = new DefaultAzureCredential();

CosmosClient client = new(endpoint, credential);

Container container = client.GetContainer("<database-name>", "<container-name>");

await container.ReadItemAsync<dynamic>("<item-id>", new PartitionKey("<partition-key>"));
const { CosmosClient } = require('@azure/cosmos');
const { DefaultAzureCredential } = require('@azure/identity');

const endpoint = '<account-endpoint>';

const credential = new DefaultAzureCredential();

const client = new CosmosClient({ endpoint, aadCredentials:credential});

const container = client.database('<database-name>').container('<container-name>');

await container.item('<item-id>', '<partition-key>').read<String>();
import { Container, CosmosClient, CosmosClientOptions } from '@azure/cosmos'
import { TokenCredential, DefaultAzureCredential } from '@azure/identity'

let endpoint: string = '<account-endpoint>';

let credential: TokenCredential = new DefaultAzureCredential();

let options: CosmosClientOptions = {
  endpoint: endpoint,
  aadCredentials: credential
};

const client: CosmosClient = new CosmosClient(options);

const container: Container = client.database('<database-name>').container('<container-name>');

await container.item('<item-id>', '<partition-key>').read<String>();
from azure.cosmos import CosmosClient
from azure.identity import DefaultAzureCredential

endpoint = "<account-endpoint>"

credential = DefaultAzureCredential()

client = CosmosClient(endpoint, credential=credential)

container = client.get_database_client("<database-name>").get_container_client("<container-name>")

container.read_item(
    item="<item-id>",
    partition_key="<partition-key>",
)
import (
    "context"
    
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
)

const endpoint = "<account-endpoint>"

func main() {
    credential, _ := azidentity.NewDefaultAzureCredential(nil)
    client, _ := azcosmos.NewClient(endpoint, credential, nil)
    
    database, _ := client.NewDatabase("<database-name>")
    container, _ := database.NewContainer("<container-name>")
    
    _, err := container.ReadItem(context.TODO(), azcosmos.NewPartitionKeyString("<partition-key>"), "<item-id>", nil)
    if err != nil {
        panic(err)
    }
}
import com.azure.cosmos.CosmosClient;
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosContainer;
import com.azure.cosmos.models.PartitionKey;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;

public class NoSQL {
    public static void main(String[] args) {   
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
            .build();
            
        CosmosClient client = new CosmosClientBuilder()
            .endpoint("<account-endpoint>")
            .credential(credential)
            .buildClient();

        CosmosContainer container = client.getDatabase("<database-name>").getContainer("<container-name>");

        container.readItem("<item-id>", new PartitionKey("<partition-key>"), Object.class);
    }
}
use azure_data_cosmos::CosmosClient;
use azure_identity::DefaultAzureCredential;

fn main() {
    let credential = DefaultAzureCredential::new().unwrap();
    let client = CosmosClient::new("<account-endpoint>", credential, None).unwrap();

    let container = client.database_client("<database-name>").container_client("<container-name>");

    let response = container.read_item("<partition-key>", "<item-id>", None);
    tokio::runtime::Runtime::new().unwrap().block_on(response).unwrap();
}