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/roleAssignments
sahip 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@2023-04-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@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'
}
}
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/roleDefinitions
bir 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.
İlgili kaynaklar
- Kaynak belgeleri
- Uzantı kaynakları
- Kapsam
- Hızlı başlangıç şablonları
- Topluluk blog gönderileri
- Bicep ile farklı kapsamlar için rol atamaları oluşturma, Barbara Forbes