Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz. Azure Cloud Shell'i kullanmaya başlama.
CLI referans komutlarını yerel olarak çalıştırmayı tercih ediyorsanız, Azure CLI'yi yükleyin. Windows veya macOS üzerinde çalışıyorsanız, Azure CLI'yi bir Docker konteynerinde çalıştırmayı düşünün. Daha fazla bilgi için Azure CLI'nin bir Docker konteynerında nasıl çalıştırılacağını inceleyin.
Yerel bir kurulum kullanıyorsanız, az login komutunu kullanarak Azure CLI'ye giriş yapın. Kimlik doğrulama işlemini tamamlamak için, terminalinizde görüntülenen adımları takip edin. Diğer oturum açma seçenekleri için bkz. Azure CLI kullanarak Azure'da kimlik doğrulaması.
İ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 ve yönetme.
Yüklü olan sürümü ve bağımlı kütüphaneleri 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ış .
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.
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 } }Yeni hesapla Bicep dosyasını dağıtmak için
az deployment group createkullanı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.
NoSQL hesabı için yeni bir Azure Cosmos DB ayarlarken hesap oluşturma işleminin Güvenlik bölümüne gidin.
Ardından Anahtar tabanlı kimlik doğrulaması seçeneği için Devre dışı bırak'ı seçin.
Ö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.
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"Çı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
iddeğ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.Geçerli kaynak grubunuzun meta verilerini almak için kullanın
az group show.az group show \ --name "<name-of-existing-resource-group>"Ö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
iddeğ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.role-definition.jsonadlı yeni bir JSON dosyası oluşturun. dosyasında, burada listelenen değerleri belirterek bu kaynak tanımını oluşturun.
AssignableScopesListe 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.kullanarak
az role definition createyeni bir rol tanımı oluşturun. dosyasını--role-definitionolarak kullanın.az role definition create \ --role-definition role-definition.jsonTanı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
iddeğ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.Geçerli kaynak grubunuzun meta verilerini yeniden almak için
az group showkullanın.az group show \ --name "<name-of-existing-resource-group>"Ö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
iddeğ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.Yeni rolü
az role assignment createkullanarak atayın.--scopebağımsız değişkeni için kaynak grubunuzun tanımlayıcısını,-rolebağımsız değişkeni için rolün tanımlayıcısını ve--assigneebağı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-exampleolarak ayarlanmıştır. Kaynak grubunuzun tanımlayıcısı bu örnekten farklı olabilir. ayrıcarolekurgusal/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.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-e1e1e1e1e1e1olup başka bir kurgusal örnek oluşturmaktadır.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.
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"Çı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
iddeğ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.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ı
actionstanı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.idaz deployment group createkullanarak 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.bicepDağı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
iddeğ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.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 } }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ıroleDefinitionIdve parametreye kimliğinizin benzersiz tanımlayıcısını atayınidentityId.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'Bu Bicep şablonunu
az deployment group createkullanarak 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.bicepKullanmak 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.
Azure portalında (https://portal.azure.com ) oturum açın.
Genel arama çubuğuna Kaynak grubu girin.
Hizmetler'deKaynak grupları'ı seçin.
Kaynak grupları bölmesinde mevcut kaynak grubunuzu seçin.
Uyarı
Bu örnek ekran görüntüsü kaynak
msdocs-identity-examplegrubunu içerir. Gerçek kaynak grubu adınız farklı olabilir.Kaynak grubunun bölmesinde, hizmet menüsünde Erişim denetimi (IAM) öğesini seçin.
Erişim denetimi (IAM) bölmesinde Roller'i seçin.
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.
Cosmos DB İşleci rol tanımı iletişim kutusunda, bu rol tanımının parçası olarak atanan eylemleri gözlemleyin.
Cosmos DB İşleci rol tanımı iletişim kutusunu kapatın.
Erişim denetimi (IAM) bölmesine dönüp Ekle'yi seçin. Ardından Özel rol ekle'yi seçin.
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 OwnerAçıklama Can perform all control plane actions for an Azure Cosmos DB account.Temel izinler Sıfırdan başlayın
İzinler bölmesinde İzinekle'yi seçin. Ardından, izinler iletişim kutusunda öğesini
DocumentDBarayın. Son olarak Microsoft.DocumentDB seçeneğini belirleyin.
İzinler iletişim kutusunda için tüm
Microsoft.DocumentDBseçin. Ardından Ekle'yi seçerek *İzinler bölmesine dönün.
İzinler bölmesine dönüp izin listesini inceleyin. Ardından Gözden Geçir ve oluştur'u seçin.
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.
Portalın rol tanımını oluşturmayı tamamlanmasını bekleyin.
Erişim denetimi (IAM) bölmesinde Ekle'yi ve ardından Rol ataması ekle'yi seçin.
Rol bölmesinde, bu kılavuzun önceki bölümlerinde oluşturulan
Azure Cosmos DBrolünü arayın ve seçin. Ardından İleri'yi seçin.
Tavsiye
İsteğe bağlı olarak rol listesini yalnızca özel rolleri içerecek şekilde filtreleyebilirsiniz.
Ü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.
Uyarı
Bu ekran görüntüsü, " Kai Carter" adlı örnek bir kullanıcıyı ve bir yönetici
kai@adventure-works.comile göstermektedir.Üyeler bölmesine geri dönün, seçili üyeyi[s] gözden geçirin ve Gözden Geçir + Ata'yı seçin.
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.
Portalın rol atamasını oluşturmayı tamamlanmasını bekleyin.
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Çı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
Iddeğeri olacaktır230815da-be43-4aae-9cb4-875f7bd000aa. Tanımlayıcı, Azure'daki tüm rol tanımlarında genel olarak benzersizdir.Geçerli kaynak grubunuzun meta verilerini almak için kullanın
Get-AzResourceGroup.$parameters = @{ Name = "<name-of-existing-resource-group>" } Get-AzResourceGroup @parametersÖ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-exampleUyarı
Bu örnekte
ResourceIddeğ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.İlk olarak modülü içeri aktarın
Az.Resources. Ardından YeniMicrosoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinitionbir nesne oluşturun. nesnesinde, burada listelenen değerleri belirterek bu kaynak tanımını oluşturun.AssignableScopesListe için, önceki adımda kaydedilen kaynak grubunun özelliğini ekleyinResourceId. Son olarak,-Roleparametresine girdi olarakNew-AzRoleDefinitionrol 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 $roleUyarı
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.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
Namedeğeri olacaktırAzure 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.Yeni rolü
New-AzRoleAssignmentkullanarak atayın. RolünRoleDefinitionNameadınıRoleDefinitionNameparametresi 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 @parametersKomutun çı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-c5c5c5c5c5c5Uyarı
Bu örnekte,
RoleAssignmentIdözelliği/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1olup 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.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/readMicrosoft.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/readMicrosoft.DocumentDB/databaseAccounts/sqlRoleAssignments/readMicrosoft.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.
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>"Ö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/readMetadataHesap 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/*" ] } ] }Ardından rol tanımını oluşturmak için kullanın
az cosmosdb sql role definition create. role-definition.json dosyasını--bodybağı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"Ö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-iddeğeri olacaktırbbbbbbbb-1111-2222-3333-cccccccccccc. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir.Yeni rolü
az cosmosdb sql role assignment createkullanarak atayın. Bağımsız değişken için--role-definition-iddaha önce kaydedilmiş rol tanımı tanımlayıcılarını, bağımsız değişken için kimliğinizin--principal-idbenzersiz tanımlayıcısını ve bağımsız değişkenin--scopeveri 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 showDaha 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:
/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>"
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>"Çı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
iddeğ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.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ı
dataActionstanıma ekleyin:Description Microsoft.DocumentDB/databaseAccounts/readMetadataHesap 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.idTavsiye
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:
/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ınaccountName.using './data-plane-role-definition.bicep' param accountName = '<name-of-existing-nosql-account>'az deployment group createkullanarak 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.bicepRol 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.idYeni bir data-plane-role-assignment adlı 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ı parametresineroleDefinitionIdve 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>'Tavsiye
Kendi kimliğinize veri düzlemi rol tabanlı erişim denetimi verme girişiminde bulunursanız parametresini
identityIdatlayabilirsiniz. Ardından Bicep şablonu, şablonu dağıtan sorumlunun kimliğini almak için kullanırdeployer().objectId. Daha fazla bilgi için bkz.deployer.az deployment group createkullanarak 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.bicepKullanmak 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.
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Çı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
Iddeğ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.kullanarak
New-AzCosmosDBSqlRoleDefinitionyeni bir rol tanımı oluşturun. parametresi içinDataActionburada listelenen veri eylemlerini belirtin:Description Microsoft.DocumentDB/databaseAccounts/readMetadataHesap 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 @parametersTavsiye
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:
/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Ö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
Iddeğ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.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 IdYeni rolü atamak için kullanın
New-AzCosmosDBSqlRoleAssignment.RoleDefinitionIdparametresi için önceden kaydedilmiş rol tanımı tanımlayıcılarını,PrincipalIdparametresi için kimliğinizin benzersiz tanımlayıcısını veScopeparametresi 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 @parametersTavsiye
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, UserPrincipalNameDaha fazla bilgi için bkz.
Get-AzADUser.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();
}