Impostare l'ambito per le risorse di estensione in Bicep
Una risorsa di estensione è una risorsa che modifica un'altra risorsa. Ad esempio, è possibile assegnare un ruolo a una risorsa. L'assegnazione di ruolo è un tipo di risorsa di estensione.
Per un elenco completo dei tipi di risorse di estensione, vedere Tipi di risorse che estendono le funzionalità di altre risorse.
Questo articolo spiega come impostare l'ambito per un tipo di risorsa di estensione quando viene distribuito con un file Bicep. Descrive la proprietà Scope disponibile per le risorse di estensione quando si applica a una risorsa.
Nota
La proprietà scope è disponibile solo per i tipi di risorse di estensione. Per specificare un ambito diverso per un tipo di risorsa che non è un tipo di estensione, usare un modulo.
Risorse di formazione
Per avere informazioni più dettagliate sulle risorse di estensione, vedere Distribuire risorse figlio e di estensione usando Bicep.
Applicare all'ambito di distribuzione
Per applicare un tipo di risorsa di estensione all'ambito della distribuzione di destinazione, aggiungere la risorsa al modello come si farebbe con qualsiasi altro tipo di risorsa. Gli ambiti disponibili sono gruppo di risorse, sottoscrizione, gruppo di gestione e tenant. L'ambito di distribuzione deve supportare il tipo di risorsa.
Quando viene distribuito in un gruppo di risorse, il modello seguente aggiunge un blocco a questo gruppo di risorse.
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
Nell'esempio che segue viene assegnato un ruolo alla sottoscrizione in cui viene distribuito.
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@2022-04-01' = {
name: guid(subscription().id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
}
Applicare alla risorsa
Per applicare una risorsa di estensione a una risorsa, usare la proprietà scope
. Nella proprietà scope fare riferimento alla risorsa a cui si aggiunge l'estensione. Fare riferimento alla risorsa specificando il nome simbolico per la risorsa. La proprietà scope è una proprietà radice per il tipo di risorsa di estensione.
Nell'esempio seguente viene creato un account di archiviazione e gli si applica un ruolo.
@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@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {}
}
resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
scope: demoStorageAcct
}
È possibile applicare una risorsa di estensione a una risorsa esistente. Nell'esempio seguente viene aggiunto un blocco ad un account di archiviazione esistente.
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: 'examplestore'
}
resource createStorageLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'storeLock'
scope: demoStorageAcct
properties: {
level: 'CanNotDelete'
notes: 'Storage account should not be deleted.'
}
}
Alle risorse di estensione si applicano gli stessi requisiti di altre risorse quando si mira a un ambito diverso dall'ambito di destinazione della distribuzione. Per informazioni sulla distribuzione in più ambiti, vedere:
- Distribuzioni di gruppi di risorse
- Distribuzioni di sottoscrizioni
- Distribuzioni di gruppi di gestione
- Distribuzioni di tenant
Le proprietà gruppo di risorse e sottoscrizione sono consentite solo nei moduli. Queste proprietà non sono consentite per le singole risorse. Usare i moduli se si vuole distribuire una risorsa di estensione con l'ambito impostato su una risorsa in un gruppo di risorse diverso.
L'esempio seguente mostra come applicare un blocco a un account di archiviazione che si trova in un gruppo di risorse diverso.
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@2023-04-01' existing = { name: storageAccountName } resource storeLock 'Microsoft.Authorization/locks@2020-05-01' = { scope: storage name: 'storeLock' properties: { level: 'CanNotDelete' notes: 'Storage account should not be deleted.' } }
Passaggi successivi
Per un elenco completo dei tipi di risorse di estensione, vedere Tipi di risorse che estendono le funzionalità di altre risorse.