NoSQL için Azure Cosmos DB ile veri düzlemi rol tabanlı erişim denetimini kullanma
UYGULANANLAR: NoSQL
Ş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.
İpucu
Yeni uygulamalar oluşturmaya yönelik en son örnekler için yeni Örnekler Galerimizi ziyaret edin
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.
- Azure PowerShell'i yerel olarak kullanmayı seçerseniz:
- Az PowerShell modülünün en son sürümünü yükleyin.
- Connect-AzAccount cmdlet'ini kullanarak Azure hesabınıza bağlanın.
- Azure Cloud Shell'i kullanmayı seçerseniz:
- Daha fazla bilgi için bkz . Azure Cloud Shell'e genel bakış.
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.
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}"
Ö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.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"
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>"
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
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ı parametresineaccountName
, daha önce kaydedilen rol tanımı tanımlayıcılarını parametresineroleDefinitionId
ve kimliğinizin benzersiz tanımlayıcısını parametresine atayınidentityId
.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>'
Kullanarak
az deployment group create
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
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.
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
Ö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.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
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.