Bereik instellen voor extensieresources in Bicep
Een extensieresource is een resource die een andere resource wijzigt. U kunt bijvoorbeeld een rol toewijzen aan een resource. De roltoewijzing is een extensieresourcetype.
Zie Resourcetypen waarmee de mogelijkheden van andere resources worden uitgebreid voor een volledige lijst met extensieresourcetypen.
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.
Training en bronnen
Zie Onderliggende en extensieresources implementeren met behulp van Bicep als u liever meer wilt weten over extensieresources via stapsgewijze instructies.
Toepassen op implementatiebereik
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.
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.'
}
}
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:
- Resourcegroepimplementaties
- Abonnementsimplementaties
- Implementaties van beheergroepen
- Tenantimplementaties
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.
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.' } }
Volgende stappen
Zie Resourcetypen waarmee de mogelijkheden van andere resources worden uitgebreid voor een volledige lijst met extensieresourcetypen.