Aracılığıyla paylaş


NoSQL için Azure Cosmos DB ile veri düzlemi rol tabanlı erişim denetimini kullanma

UYGULANANLAR: NoSQL

Dağıtım kılavuzu sırasındaki geçerli konumun ('Rol tabanlı erişim denetimi') diyagramı.

Şu konumlar da dahil olmak üzere dağıtım kılavuzu dizisinin şeması: Genel Bakış, Kavramlar, Hazırlama, Rol tabanlı erişim denetimi, Ağ ve Başvuru. 'Rol tabanlı erişim denetimi' konumu şu anda vurgulanmış durumda.

Bu makalede, NoSQL için Azure Cosmos DB hesabındaki verileri yönetmek üzere kimlik erişimi verme adımları açıklanmaktadır.

Önemli

Bu makaledeki adımlar yalnızca tek tek öğelerde işlem gerçekleştirmek ve sorguları çalıştırmak için veri düzlemi erişimini kapsar. Denetim düzlemi için rolleri, tanımları ve atamaları yönetmeyi öğrenmek için bkz . Denetim düzlemine rol tabanlı erişim verme.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
  • Mevcut bir NoSQL için Azure Cosmos DB hesabı.
  • Microsoft Entra Id'de bir veya daha fazla mevcut kimlik.
  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Rol tanımını hazırlama

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

Önemli

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

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read

Daha fazla bilgi için bkz . Denetim düzlemi rol tabanlı erişim verme.

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. Çıktıyı gözden geçirin ve Cosmos DB Yerleşik Veri Katkıda Bulunanı adlı rol tanımını bulun. Çıkış, özelliğindeki rol tanımının benzersiz tanımlayıcısını id içerir. Bu değeri, bu kılavuzun devamında yer alan atama adımında kullanılması gerektiği şekilde kaydedin.

az cosmosdb sql role definition list \
    --resource-group "<name-of-existing-resource-group>" \
    --account-name "<name-of-existing-nosql-account>"
[
  ...,
  {
    "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"
  }
  ...
]

Not

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.

NoSQL için Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listelemek için kullanın Get-AzCosmosDBSqlRoleDefinition . Çıktıyı gözden geçirin ve Cosmos DB Yerleşik Veri Katkıda Bulunanı adlı rol tanımını bulun. Çıkış, özelliğindeki rol tanımının benzersiz tanımlayıcısını Id içerir. Bu değeri, bu kılavuzun devamında yer alan atama adımında kullanılması gerektiği şekilde kaydedin.

$parameters = @{
    ResourceGroupName = "<name-of-existing-resource-group>"
    AccountName = "<name-of-existing-nosql-account>"
}
Get-AzCosmosDBSqlRoleDefinition @parameters
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 : 

Not

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.

Kimliğe rol atama

Şimdi, 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.

Önemli

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

Daha fazla bilgi için bkz . Denetim düzlemi rol tabanlı erişim verme.

  1. Geçerli hesabınızın benzersiz tanımlayıcısını almak için kullanın az cosmosdb show .

    az cosmosdb show \
        --resource-group "<name-of-existing-resource-group>" \
        --name "<name-of-existing-nosql-account>" \
        --query "{id:id}"
    
  2. Önceki komutun çıkışını gözlemleyin. Sonraki adımda kullanılması gerektiği için bu hesabın özelliğinin değerini id kaydedin.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    }
    

    Not

    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. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir.

  3. kullanarak yeni rolü atayın az cosmosdb sql role assignment create. Bağımsız değişkende daha önce kaydedilmiş rol tanımı tanımlayıcılarını --role-definition-id ve bağımsız değişkende kimliğinizin benzersiz tanımlayıcısını --principal-id kullanın. Son olarak, bağımsız değişken için hesabınızın tanımlayıcısını --scope 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 "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    
  4. 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 çıkışı 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. 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
    
    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
    
  2. data-plane-role-assignment 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 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>'
    
  3. Kullanarak az deployment group createBicep ş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
    
  4. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    İpucu

    İ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 erişmesine izin vermek için bu adımlar en azından yinelenir.

  1. 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
    
  2. Önceki komutun çıkışını gözlemleyin. Sonraki adımda kullanılması gerektiği için bu hesabın özelliğinin değerini Id kaydedin.

    Id
    --    
    /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
    

    Not

    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. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir.

  3. Yeni rolü atamak için kullanın New-AzCosmosDBSqlRoleAssignment . Parametresinde daha önce kaydedilmiş rol tanımı tanımlayıcılarını RoleDefinitionId ve parametrede kimliğinizin benzersiz tanımlayıcısını PrincipalId kullanın. Son olarak, parametre için hesabınızın tanımlayıcısını Scope 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 = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    }    
    New-AzCosmosDBSqlRoleAssignment @parameters
    
  4. 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 çıkışı gözden geçirin.

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

Kodda veri düzlemi erişimini doğrulama

Son olarak, tercih ettiğiniz programlama dilinde 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);

Önemli

Bu kod örneği, NuGet'ten Microsoft.Azure.Cosmos ve Azure.Identity kitaplıklarını kullanır.