Azure rol tabanlı erişim denetimi (Azure RBAC) kaynakları oluşturmak için Bicep kullanma

Azure güçlü bir rol tabanlı erişim denetimi (RBAC) sistemine sahiptir. Azure RBAC hakkında daha fazla bilgi için bkz. Azure Rol tabanlı erişim denetimi (Azure RBAC) nedir? Bicep'i kullanarak RBAC rol atamalarınızı ve rol tanımlarınızı program aracılığıyla tanımlayabilirsiniz.

Rol atamaları

Rol atamaları kullanıcı, grup veya hizmet sorumlusu gibi bir sorumluya belirli bir Azure kaynağına erişim vermenizi sağlar.

Rol ataması tanımlamak için türüne Microsoft.Authorization/roleAssignmentssahip bir kaynak oluşturun. Rol tanımının kapsam, ad, rol tanımı kimliği, asıl kimlik ve asıl türü gibi birden çok özelliği vardır.

Scope

Rol atamaları, erişim verdiğiniz kaynağı veya kaynak kümesini tanımlayan belirli bir kapsamda uygulanır. Daha fazla bilgi için Azure RBAC kapsamını anlama bölümüne bakın.

Rol atamaları uzantı kaynaklarıdır ve başka bir kaynağa uygulandıkları anlamına gelir. Aşağıdaki örnekte, depolama hesabı ve bu depolama hesabı kapsamında bir rol atamasının nasıl oluşturulacağı gösterilmektedir:

param location string = resourceGroup().location
param storageAccountName string = 'stor${uniqueString(resourceGroup().id)}'
param storageSkuName string = 'Standard_LRS'
param roleDefinitionResourceId string
param principalId string

resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
   name: storageSkuName
  }
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: storageAccount
  name: guid(storageAccount.id, principalId, roleDefinitionResourceId)
  properties: {
    roleDefinitionId: roleDefinitionResourceId
    principalId: principalId
    principalType: 'ServicePrincipal'
  }
}

Kapsamı açıkça belirtmezseniz, Bicep dosyanın targetScopeöğesini kullanır. Aşağıdaki örnekte hiçbir scope özellik belirtilmediği için rol atamasının kapsamı abonelik olarak belirlenmiştir:

param roleDefinitionResourceId string
param principalId string

targetScope = 'subscription'

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, principalId, roleDefinitionResourceId)
  properties: {
    roleDefinitionId: roleDefinitionResourceId
    principalId: principalId
    principalType: 'ServicePrincipal'
  }
}

Tavsiye

Gereksinimlerinizi karşılamak için ihtiyacınız olan en küçük kapsamı kullanın.

Örneğin, tek bir depolama hesabına yönetilen kimlik erişimi vermeniz gerekiyorsa, rol atamasını kaynak grubu veya abonelik kapsamında değil depolama hesabı kapsamında oluşturmak iyi bir güvenlik uygulamasıdır.

İsim

Rol atamanın kaynak adı genel olarak benzersiz bir tanımlayıcı (GUID) olmalıdır.

Kapsam daha dar olsa bile rol ataması kaynak adları Microsoft Entra kiracısı içinde benzersiz olmalıdır.

Bicep dağıtımınızın yinelenebilir olması için adın belirleyici olması önemlidir; örneğin, her dağıtımda aynı adı kullanın. Kapsamı, asıl kimliği ve rol kimliğini birlikte kullanan bir GUID oluşturmak iyi bir uygulamadır. Belirleyici bir GUID oluşturmanıza yardımcı olması için guid() işlevini kullanmak, rol ataması adlarınızda bu örnekte olduğu gibi iyi bir fikirdir.

name: guid(subscription().id, principalId, roleDefinitionResourceId)

Rol tanımı kimliği

Atadığınız rol yerleşik bir rol tanımı veya özel bir rol tanımı olabilir. Yerleşik rol tanımı kullanmak için uygun rol tanımı kimliğini bulun. Örneğin, Katkıda Bulunan rolünün rol tanımı kimliği vardır b24988ac-6180-42a0-ab88-20f7382dd24c.

Rol atama kaynağını oluştururken, tam nitelikli kaynak kimliğini belirtmeniz gerekir. Yerleşik rol tanımı kimlikleri, abonelik düzeyinde kaynaklardır. Dahili role başvurmak için bir existing kaynağı kullanmanız ve tam nitelikli kaynak kimliğine erişmek için .id özelliğini kullanmanız önerilir:

param principalId string

@description('This is the built-in Contributor role. See https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#contributor')
resource contributorRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
  scope: subscription()
  name: 'b24988ac-6180-42a0-ab88-20f7382dd24c'
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, principalId, contributorRoleDefinition.id)
  properties: {
    roleDefinitionId: contributorRoleDefinition.id
    principalId: principalId
    principalType: 'ServicePrincipal'
  }
}

Müdür

principalId özelliği, prensip için Microsoft Entra tanımlayıcısını temsil eden bir GUID olarak ayarlanmalıdır. Microsoft Entra Id'de bu, bazen nesne kimliği olarak adlandırılır.

principalType özelliği, sorumlunun kullanıcı mı, grup mu yoksa hizmet sorumlusu mu olduğunu belirtir. Yönetilen kimlikler bir hizmet ilkesi biçimidir.

Tavsiye

Bicep'te bir rol ataması oluştururken principalType özelliğini ayarlamak önemlidir. Aksi takdirde, özellikle hizmet sorumluları ve yönetilen kimliklerle çalışırken aralıklı dağıtım hataları alabilirsiniz.

Aşağıdaki örnekte kullanıcı tarafından atanan yönetilen kimliğin ve rol atamasının nasıl oluşturulacağı gösterilmektedir:

param location string = resourceGroup().location
param roleDefinitionResourceId string

var managedIdentityName = 'MyManagedIdentity'

resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2025-01-31-preview' = {
  name: managedIdentityName
  location: location
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, managedIdentity.id, roleDefinitionResourceId)
  properties: {
    roleDefinitionId: roleDefinitionResourceId
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}

Kaynak silme davranışı

Microsoft Entra Id'den bir kullanıcı, grup, hizmet sorumlusu veya yönetilen kimliği sildiğinizde, rol atamalarını silmeniz önerilir. Bunlar otomatik olarak silinmez.

Silinmiş asıl kimliğe atıfta bulunan herhangi bir rol ataması geçersiz olur. Bir rol atamasının adını başka bir rol ataması için yeniden kullanmayı denerseniz dağıtım başarısız olur. Bu davranışa geçici bir çözüm olarak, yeniden oluşturmadan önce eski rol atamasını kaldırmanız veya yeni bir rol ataması dağıtırken benzersiz bir ad kullandığınızdan emin olmanız gerekir. Bu hızlı başlangıç şablonu, bir Bicep modülünde rol ataması tanımlamanın nasıl yapılacağını ve rol ataması adı için bir başlatıcı değer olarak birincil kimliği nasıl kullanabileceğinizi gösterir.

Özel rol tanımları

Özel rol tanımları, bir rol ataması kullanılarak sorumluya atanabilecek bir izin kümesi tanımlamanızı sağlar. Rol tanımları hakkında daha fazla bilgi için bkz. Azure rol tanımlarını anlama.

Özel rol tanımı oluşturmak için türünde Microsoft.Authorization/roleDefinitionsbir kaynak tanımlayın. Örnek için Abonelik düzeyinde dağıtım ile yeni bir rol tanımı oluşturma hızlı başlangıç kılavuzuna bakın.

Atanabilir kapsamlar daha dar olsa bile rol tanımı kaynak adları Microsoft Entra kiracısı içinde benzersiz olmalıdır.

Uyarı

Bazı hizmetler kendi rol tanımlarını ve atamalarını yönetir. Örneğin, Azure Cosmos DB kendi Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments kaynaklarını ve Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions kaynaklarını korur. Daha fazla bilgi için belirli bir hizmetin belgelerine bakın.