Mengatur cakupan untuk sumber daya ekstensi di Bicep

Sumber daya ekstensi adalah sumber daya yang memodifikasi sumber daya lain. Misalnya, Anda dapat menetapkan peran ke sumber daya. Penetapan peran adalah jenis sumber daya ekstensi.

Untuk daftar lengkap jenis sumber daya ekstensi, lihat Jenis sumber daya yang memperluas kapabilitas sumber daya lainnya.

Artikel ini menunjukkan cara mengatur cakupan untuk jenis sumber daya ekstensi saat disebarkan dengan file Bicep. Artikel ini menjelaskan properti lingkup yang tersedia untuk sumber daya ekstensi saat diterapkan ke sumber daya.

Catatan

Properti lingkup hanya tersedia untuk jenis sumber daya ekstensi. Untuk menentukan cakupan lain terhadap jenis sumber daya yang bukan jenis ekstensi, gunakan modul.

Sumber daya pelatihan

Jika Anda lebih suka mempelajari sumber daya ekstensi melalui panduan langkah demi langkah, lihat Menyebarkan sumber daya turunan dan ekstensi dengan menggunakan Bicep.

Terapkan pada lingkup penyebaran

Untuk menerapkan jenis sumber daya ekstensi pada lingkup penyebaran target, tambahkan sumber daya ke templat Anda, seperti yang Anda lakukan dengan jenis sumber daya apa pun. Lingkup yang tersedia adalah grup sumber daya, langganan, grup manajemen, dan penyewa. Lingkup penyebaran harus mendukung jenis sumber daya.

Saat digunakan ke grup sumber daya, templat berikut menambahkan kunci ke grup sumber daya tersebut.

resource createRgLock 'Microsoft.Authorization/locks@2016-09-01' = {
  name: 'rgLock'
  properties: {
    level: 'CanNotDelete'
    notes: 'Resource group should not be deleted.'
  }
}

Contoh berikutnya memberikan peran ke langganan yang menggunakannya.

targetScope = 'subscription'

@description('The principal to assign the role to')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var role = {
  Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
  Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
  Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}

resource roleAssignSub 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(subscription().id, principalId, role[builtInRoleType])
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
}

Menerapkan ke sumber daya

Untuk menerapkan sumber daya ekstensi ke sumber daya, gunakan properti scope. Di properti lingkup, referensikan sumber daya yang Ekstensinya Anda tambahkan. Anda mereferensikan sumber daya dengan memberikan nama simbolis untuk sumber daya. Properti lingkup adalah properti akar untuk jenis sumber daya ekstensi.

Contoh berikut membuat akun penyimpanan dan menerapkan peran pada penyimpanan.

@description('The principal to assign the role to')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

param location string = resourceGroup().location

var role = {
  Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
  Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
  Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
var uniqueStorageName = 'storage${uniqueString(resourceGroup().id)}'

resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2019-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
  scope: demoStorageAcct
}

Anda dapat menerapkan sumber daya ekstensi ke sumber daya yang ada. Contoh berikut menambahkan kunci ke akun penyimpanan yang sudah ada.

resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2021-04-01' existing = {
  name: 'examplestore'
}

resource createStorageLock 'Microsoft.Authorization/locks@2016-09-01' = {
  name: 'storeLock'
  scope: demoStorageAcct
  properties: {
    level: 'CanNotDelete'
    notes: 'Storage account should not be deleted.'
  }
}

Persyaratan yang sama berlaku untuk sumber daya ekstensi sebagai sumber daya lain ketika menargetkan ruang lingkup yang berbeda dari lingkup target penyebaran. Untuk mempelajari tentang penerapan ke lebih dari satu lingkup, lihat:

Properti resourceGroup dan langganan hanya diizinkan pada modul. Properti ini tidak diizinkan pada sumber daya individual. Gunakan modul jika Anda ingin menyebarkan sumber daya ekstensi dengan cakupan yang diatur ke sumber daya dalam grup sumber daya yang berbeda.

Contoh berikut menunjukkan cara menerapkan kunci pada akun penyimpanan yang berada di grup sumber daya yang berbeda.

  • main.bicep:

    param resourceGroup2Name string
    param storageAccountName string
    
    module applyStoreLock './storageLock.bicep' = {
      name: 'addStorageLock'
      scope: resourceGroup(resourceGroup2Name)
      params: {
        storageAccountName: storageAccountName
      }
    }
    
  • storageLock.bicep:

    param storageAccountName string
    
    resource storage 'Microsoft.Storage/storageAccounts@2021-09-01' existing = {
      name: storageAccountName
    }
    
    resource storeLock 'Microsoft.Authorization/locks@2017-04-01' = {
      scope: storage
      name: 'storeLock'
      properties: {
        level: 'CanNotDelete'
        notes: 'Storage account should not be deleted.'
      }
    }
    

Langkah berikutnya

Untuk daftar lengkap jenis sumber daya ekstensi, lihat Jenis sumber daya yang memperluas kapabilitas sumber daya lainnya.