Bicep kullanarak Azure RBAC kaynakları oluşturma

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ı, belirli bir Azure kaynağına bir sorumluya (kullanıcı, grup veya hizmet sorumlusu gibi) 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 sorumlu 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 bkz . Azure RBAC kapsamını anlama.

Rol atamaları uzantı kaynaklarıdır ve başka bir kaynağa uygulanır. 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@2022-09-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'
  }
}

Bahşiş

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.

Ad

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ı , başka bir deyişle her dağıtımda aynı adın kullanılması önemlidir. Kapsamı, asıl kimliği ve rol kimliğini birlikte kullanan bir GUID oluşturmak iyi bir uygulamadır. bu örnekte olduğu guid() gibi rol ataması adlarınız için belirleyici bir GUID oluşturmanıza yardımcı olması için işlevini kullanmak 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ırb24988ac-6180-42a0-ab88-20f7382dd24c.

Rol atama kaynağını oluştururken, tam kaynak kimliğini belirtmeniz gerekir. Yerleşik rol tanımı kimlikleri abonelik kapsamlı kaynaklardır. Yerleşik role başvurmak ve özelliğini kullanarak tam kaynak kimliğine erişmek için bir kaynak kullanmak iyi bir existing uygulamadır .id :

param principalId string

@description('This is the built-in Contributor role. See https://docs.microsoft.com/azure/role-based-access-control/built-in-roles#contributor')
resource contributorRoleDefinition 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' 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'
  }
}

Asıl

özelliği, principalId sorumlu için Microsoft Entra tanımlayıcısını temsil eden bir GUID'ye 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 sorumlusu biçimidir.

Bahşiş

Bicep'te rol ataması principalType oluştururken ö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@2023-01-31' = {
  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ı silmek iyi bir uygulamadır. Bunlar otomatik olarak silinmez.

Silinen sorumlu kimliğine başvuran tüm rol atamaları geçersiz hale gelir. 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ımlamayı ve rol ataması adı için bir asıl kimliği tohum değeri olarak kullanmayı 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üzeyi dağıtım aracılığıyla yeni rol def oluşturma hızlı başlangıcına bakın.

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

Dekont

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.