Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 illustra 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 viene applicata a una risorsa.
Annotazioni
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.
Applicare all'ambito di distribuzione
Per applicare un tipo di risorsa di estensione nell'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 tale 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 seguente, viene assegnato un ruolo alla sottoscrizione a 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 scope proprietà . Nella proprietà scope fare riferimento alla risorsa a cui si aggiunge l'estensione. Per fare riferimento alla risorsa, specificare il nome simbolico per la risorsa. La proprietà scope funge da proprietà principale per il tipo di risorsa di estensione.
Nell'esempio seguente viene creato un account di archiviazione e viene applicato 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@2025-06-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 a un account di archiviazione esistente.
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2025-06-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.'
}
}
Puoi anche applicare una risorsa di estensione a un'altra risorsa di estensione impostando la scope proprietà al nome simbolico di quella risorsa di estensione. Il seguente esempio applica un blocco a un'assegnazione di ruolo esistente.
resource existingRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' existing = {
name: '00000000-0000-0000-0000-000000000000'
}
resource roleAssignmentLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'roleAssignmentLock'
scope: existingRoleAssignment
properties: {
level: 'CanNotDelete'
notes: 'Role assignment should not be deleted.'
}
}
Quando una risorsa utilizza la scope proprietà, Bicep genera l'ID della risorsa completamente qualificata per l'ambito. Questo garantisce che il template ARM compilato risolva correttamente l'ambito quando si chiama extensionResourceId, che richiede un ID risorsa completamente qualificato come primo argomento. Questo comportamento si applica alle risorse di estensione e a qualsiasi altro tipo di risorsa che utilizza la scope proprietà. Permette inoltre di implementare scenari che prima non erano supportati, come il deployment di risorse a livello tenant da un ambito di distribuzione più basso come un abbonamento o un gruppo di risorse.
Gli stessi requisiti si applicano alle risorse di estensione di altre risorse quando la destinazione è un ambito diverso dall'ambito di destinazione della distribuzione. Per informazioni sulla distribuzione in più ambiti, vedere:
- Distribuzioni di gruppi di risorse
- Distribuzioni delle sottoscrizioni
- Distribuzioni di gruppi di gestione
- Distribuzioni di tenant
Le proprietà resourceGroup e subscription sono consentite solo nei moduli. Queste proprietà non sono consentite per le singole risorse. Usare i moduli per distribuire una risorsa di estensione con l'ambito impostato su una risorsa in un gruppo di risorse diverso.
L'esempio seguente illustra come applicare un blocco a un account di archiviazione che risiede 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-05-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.