Buat sumber daya Azure RBAC menggunakan Bicep

Azure memiliki sistem kontrol akses berbasis peran (RBAC) yang kuat. Untuk informasi selengkapnya tentang Azure RBAC, lihat Apa itu kontrol akses berbasis Peran Azure (Azure RBAC)? Dengan menggunakan Bicep, Anda dapat secara terprogram menentukan penetapan peran dan definisi peran RBAC Anda.

Penetapan peran

Penetapan peran memungkinkan Anda memberikan akses utama (seperti pengguna, grup, atau perwakilan layanan) ke sumber daya Azure tertentu.

Untuk menentukan penetapan peran, buat sumber daya dengan jenis Microsoft.Authorization/roleAssignments. Definisi peran memiliki beberapa properti, termasuk cakupan, nama, ID definisi peran, ID prinsipal, dan jenis prinsipal.

Scope

Penetapan peran berlaku pada cakupan tertentu, yang menentukan sumber daya atau sekumpulan sumber daya yang Anda berikan aksesnya. Untuk informasi selengkapnya, lihat Memahami cakupan untuk Azure RBAC.

Penetapan peran adalah sumber daya ekstensi, yang berarti penetapan peran berlaku untuk sumber daya lain. Contoh berikut menunjukkan cara membuat akun penyimpanan dan penetapan peran yang dicakup ke akun penyimpanan tersebut:

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'
  }
}

Jika Anda tidak menentukan cakupan secara eksplisit, Bicep menggunakan file targetScope. Dalam contoh berikut, tidak ada properti scope yang ditentukan, jadi penetapan peran dicakupkan ke langganan:

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'
  }
}

Tip

Gunakan cakupan terkecil yang Anda butuhkan untuk memenuhi kebutuhan Anda.

Misalnya, jika Anda perlu memberikan akses identitas terkelola ke satu akun penyimpanan, praktik keamanan yang baik adalah membuat penetapan peran pada cakupan akun penyimpanan, bukan pada grup sumber daya atau cakupan langganan.

Nama

Nama sumber daya penetapan peran harus berupa pengidentifikasi unik global (GUID).

Nama sumber daya penetapan peran harus unik dalam penyewa Microsoft Entra, meskipun cakupannya lebih sempit.

Agar penyebaran Bicep Anda dapat diulang, penting bagi nama untuk menjadi deterministik - dengan kata lain, untuk menggunakan nama yang sama setiap kali Anda menyebarkan. Ini adalah praktik yang baik untuk membuat GUID yang menggunakan cakupan, ID prinsipal, dan ID peran secara bersamaan. Sebaiknya gunakan fungsi guid() untuk membantu Anda membuat GUID deterministik untuk nama penetapan peran Anda, seperti dalam contoh ini:

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

ID definisi peran

Peran yang Anda tetapkan dapat berupa definisi peran bawaan atau definisi peran kustom. Untuk menggunakan definisi peran bawaan, temukan ID definisi peran yang sesuai. Misalnya, peran Kontributor memiliki ID definisi peran b24988ac-6180-42a0-ab88-20f7382dd24c.

Ketika membuat sumber daya penetapan peran, Anda harus menentukan ID sumber daya yang sepenuhnya memenuhi syarat. ID definisi peran bawaan adalah sumber daya dengan cakupan langganan. Penggunaan sumber daya existing adalah praktik yang baik untuk merujuk ke peran bawaan, dan untuk mengakses ID sumber daya yang sepenuhnya memenuhi syarat dengan menggunakan properti .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'
  }
}

Utama

Properti principalId harus diatur ke GUID yang mewakili pengidentifikasi Microsoft Entra untuk prinsipal. Di ID Microsoft Entra, ini kadang-kadang disebut sebagai ID objek.

Properti principalType menentukan apakah prinsipal adalah pengguna, grup, atau perwakilan layanan. Identitas terkelola adalah bentuk perwakilan layanan.

Tip

Sangat penting untuk mengatur properti principalType saat Anda membuat penetapan peran di Bicep. Jika tidak, Anda mungkin mendapatkan kesalahan penyebaran yang terputus-putus, terutama saat Anda bekerja dengan perwakilan layanan dan identitas terkelola.

Contoh berikut menunjukkan cara membuat identitas terkelola yang ditetapkan pengguna dan penetapan peran:

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'
  }
}

Perilaku penghapusan sumber daya

Saat Anda menghapus pengguna, grup, perwakilan layanan, atau identitas terkelola dari ID Microsoft Entra, adalah praktik yang baik untuk menghapus penetapan peran apa pun. Mereka tidak dihapus secara otomatis.

Setiap penetapan peran yang merujuk ke ID utama yang dihapus menjadi tidak valid. Jika Anda mencoba menggunakan kembali nama penetapan peran untuk penetapan peran lain, penyebaran akan gagal. Untuk mengatasi aktivitas ini, Anda harus menghapus penetapan peran lama sebelum membuatnya kembali, atau memastikan bahwa Anda menggunakan nama unik saat menyebarkan penetapan peran baru. Templat mulai cepat ini menggambarkan bagaimana Anda dapat menentukan penetapan peran dalam modul Bicep dan menggunakan ID utama sebagai nilai awal untuk nama penetapan peran.

Definisi peran kustom

Definisi peran kustom memungkinkan Anda menentukan sekumpulan izin yang kemudian dapat ditetapkan ke prinsipal dengan menggunakan penetapan peran. Untuk informasi selengkapnya tentang definisi peran, lihat Memahami definisi peran Azure.

Untuk membuat definisi peran kustom, tentukan sumber daya jenis Microsoft.Authorization/roleDefinitions. Lihat mulai cepat Membuat definisi peran baru melalui penyebaran tingkat langganan sebagai contoh.

Nama sumber daya definisi peran harus unik dalam penyewa Microsoft Entra, bahkan jika cakupan yang dapat ditetapkan lebih sempit.

Catatan

Beberapa layanan mengelola definisi dan penetapan perannya sendiri. Misalnya, Azure Cosmos DB mengelola sumber daya Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments dan Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions sendiri. Untuk informasi selengkapnya, lihat dokumentasi layanan tertentu.