Een extensieresource is een resource die een andere resource wijzigt. U kunt bijvoorbeeld een rol toewijzen aan een resource. De roltoewijzing is een extensieresourcetype.
In dit artikel wordt beschreven hoe u het bereik voor een extensieresourcetype instelt wanneer deze wordt geïmplementeerd met een Bicep-bestand. Hierin wordt de bereikeigenschap beschreven die beschikbaar is voor extensieresources bij het toepassen op een resource.
Notitie
De bereikeigenschap is alleen beschikbaar voor extensieresourcetypen. Als u een ander bereik wilt opgeven voor een resourcetype dat geen extensietype is, gebruikt u een module.
Als u een extensieresourcetype wilt toepassen op het doelimplementatiebereik, voegt u de resource toe aan uw sjabloon, net als bij elk ander resourcetype. De beschikbare bereiken zijn resourcegroep, abonnement, beheergroep en tenant. Het implementatiebereik moet het resourcetype ondersteunen.
Wanneer deze wordt geïmplementeerd in een resourcegroep, voegt de volgende sjabloon een vergrendeling toe aan die resourcegroep.
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
In het volgende voorbeeld wordt een rol toegewezen aan het abonnement waarvoor het is geïmplementeerd.
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
}
}
Toepassen op resource
Gebruik de scope eigenschap om een extensieresource toe te passen op een resource. Verwijst in de bereikeigenschap naar de resource waaraan u de extensie toevoegt. U verwijst naar de resource door de symbolische naam voor de resource op te geven. De bereikeigenschap is een hoofdeigenschap voor het extensieresourcetype.
In het volgende voorbeeld wordt een opslagaccount gemaakt en hierop een rol toegepast.
@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
}
U kunt een extensieresource toepassen op een bestaande resource. In het volgende voorbeeld wordt een vergrendeling toegevoegd aan een bestaand opslagaccount.
Dezelfde vereisten zijn van toepassing op extensieresources als andere resources wanneer ze zich richten op een ander bereik dan het doelbereik van de implementatie. Zie voor meer informatie over het implementeren naar meer dan één bereik:
De eigenschappen resourceGroup en abonnement zijn alleen toegestaan voor modules. Deze eigenschappen zijn niet toegestaan voor afzonderlijke resources. Gebruik modules als u een extensieresource wilt implementeren waarbij het bereik is ingesteld op een resource in een andere resourcegroep.
In het volgende voorbeeld ziet u hoe u een vergrendeling toepast op een opslagaccount dat zich in een andere resourcegroep bevindt.