NoSQL için Azure Cosmos DB ile denetim 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.
Bu makalede, NoSQL için Azure Cosmos DB hesabını ve kaynaklarını yönetmek üzere kimlik erişimi verme adımları açıklanmaktadır.
Önemli
Bu makaledeki adımlar yalnızca hesabın hiyerarşisindeki tüm kaynakların hesabında işlem gerçekleştirmek için denetim düzlemi erişimini kapsar. Öğeleri yönetmeyi ve veri düzlemi için sorgu yürütmeyi öğrenmek için bkz . Veri düzlemine rol tabanlı erişim verme.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Mevcut bir 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, 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.
kullanarak Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listeleyin az 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 role definition list \
--name "Cosmos DB Operator"
[
{
"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",
}
]
Not
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.
Azure portalında (https://portal.azure.com ) oturum açın.
Genel arama çubuğuna Kaynak grubu girin.
Hizmetler'de Kaynak grupları'ı seçin.
Kaynak grupları bölmesinde mevcut kaynak grubunuzu seçin.
Not
Bu örnek ekran görüntüsü kaynak
msdocs-identity-example
grubunu 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 arama tümceciğini kullanın ve Cosmos DB İşleci 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.
Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listelemek için kullanın Get-AzRoleDefinition
. Çı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 = @{
Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
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 : {/}
Not
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.
Kimliğe rol atama
Şimdi, uygulamalarınızın Azure Cosmos DB'deki kaynaklara erişebilmesi için yeni tanımlanan rolü bir kimliğe atayın.
Önemli
Bu atama görevi, rol tabanlı erişim denetimi izinleri vermek istediğiniz herhangi bir kimliğin benzersiz tanımlayıcısına zaten sahip olmanız gerekir.
Geçerli kaynak grubunuzun meta verilerini yeniden almak için kullanın
az group show
.az group show \ --name "<name-of-existing-resource-group>"
Önceki komutun çıkışını gözlemleyin. Sonraki adımda kullanılması gerektiği için bu kaynak grubu için özelliğinin değerini
id
kaydedin.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
Not
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, çıkışın kesilmiş bir örneğidir.kullanarak yeni rolü atayın
az role assignment create
. Bağımsız değişken için--scope
kaynak grubunuzun tanımlayıcısını, bağımsız değişken için rolün-role
tanımlayıcısını ve bağımsız değişken kimliğiniz için benzersiz tanımlayıcıyı--assignee
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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
Not
Bu örnek komutta
scope
, önceki adımın örneğinden kurgusal örne/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
ayarlanmıştır. Kaynak grubunuzun tanımlayıcısı bu örnekten farklı olabilir. ayrıcarole
kurgusal/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
olarak ayarlanmıştır. Yine rol tanımlayıcınız farklı olabilir.Komutun çıkışını gözlemleyin. Çıkış, özelliğindeki
id
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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "type": "Microsoft.Authorization/roleAssignments" }
Not
Bu örnekte,
id
başka bir kurgusal örnek olan özelliğidir/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
.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.
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ıroleDefinitionId
ve 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>'
kullanarak bu Bicep şablonunu dağıtın
az deployment group create
.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters control-plane-role-assignment.bicepparam \ --template-file control-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.
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 DB Denetim Düzlemi Sahibi rolünü arayın
Azure Cosmos DB
ve seçin. Ardından İleri'yi seçin.İpucu
İ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.
Not
Bu ekran görüntüsünde, "Kai Carter" adlı ve sorumlusu olan örnek bir kullanıcı gösterilmektedir
kai@adventure-works.com
.Ü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 ve ata'yı seçin.
Portalın rol atamasını oluşturmayı tamamlanmasını bekleyin.
kullanarak yeni rolü atayın
New-AzRoleAssignment
. Parametresi için rolünRoleDefinitionName
adını ve parametre kimliğiniz için benzersiz tanımlayıcıyıObjectId
kullanın.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
Komutun çıkışını gözlemleyin. Çıkış, özelliğindeki
RoleAssignmentId
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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 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
Not
Bu örnekte,
RoleAssignmentId
başka bir kurgusal örnek olan özelliğidir/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. Bu, netlik için dağıtımın tipik çıkışının bir alt kümesidir.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.
Kodda denetim düzlemi erişimini doğrulama
Son olarak, tercih ettiğiniz programlama dilinde 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);
Önemli
Bu kod örneği, NuGet'ten Azure.ResourceManager.CosmosDB
ve Azure.Identity
kitaplıklarını kullanır.