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@2023-05-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@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'
}
}
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.
Sumber daya terkait
- Dokumentasi sumber daya
- Sumber daya ekstensi
- Cakupan
- Templat mulai cepat
- Posting blog komunitas
- Membuat penetapan peran untuk cakupan yang berbeda dengan Bicep, oleh Barbara Forbes