Bereik instellen voor extensiebronnen 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 resourcetype voor extensies.

Zie Resourcetypen die mogelijkheden van andere resources uitbreiden voor een volledige lijst met resourcetypen voor extensies.

In dit artikel wordt beschreven hoe u het bereik voor een extensieresourcetype in kunt stellen wanneer het wordt geïmplementeerd met een Bicep-bestand. Het beschrijft de bereik-eigenschap die beschikbaar is voor extensieresources bij het toepassen op een resource.

Notitie

De eigenschap scope is alleen beschikbaar voor resourcetypen voor extensies. Als u een ander bereik wilt opgeven voor een resourcetype dat geen extensietype is, gebruikt u een module.

Microsoft Learn

Zie Deploy child and extension resources by using Bicep on Microsoft Learn (Onderliggende resources en extensieresources implementeren met bicep op Microsoft Learn) voor meer informatie over extensieresources.

Toepassen op implementatiebereik

Als u een resourcetype voor de extensie wilt toepassen op het doelimplementatiebereik, voegt u de resource toe aan uw sjabloon, net als bij elk ander resourcetype. De beschikbare scopes zijn resourcegroep, abonnement, beheergroepen tenant. Het implementatiebereik moet het resourcetype ondersteunen.

Wanneer de sjabloon wordt geïmplementeerd in een resourcegroep, wordt met de volgende sjabloon een vergrendeling toegevoegd aan die resourcegroep.

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

In het volgende voorbeeld wordt een rol toegewezen aan het abonnement waar deze wordt 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

@description('A new GUID used to identify the role assignment')
param roleNameGuid string = newGuid()

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: roleNameGuid
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
}

Toepassen op resource

Als u een extensieresource wilt toepassen op een resource, gebruikt u de scope eigenschap . In de eigenschap scope verwijst u naar de resource waar u de extensie aan toevoegt. U verwijst naar de resource door de symbolische naam voor de resource op te geven. De eigenschap scope is een hoofd eigenschap voor het resourcetype van de extensie.

In het volgende voorbeeld wordt een opslagaccount gemaakt en wordt er een rol op 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

@description('A new GUID used to identify the role assignment')
param roleNameGuid string = newGuid()
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: roleNameGuid
  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@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.'
  }
}

Dezelfde vereisten gelden voor extensieresources als voor andere resources wanneer ze gericht zijn op een bereik dat verschilt van het doelbereik van de implementatie. Zie voor meer informatie over het implementeren naar meer dan één bereik:

Volgende stappen

Zie Resourcetypen die mogelijkheden van andere resources uitbreiden voor een volledige lijst met resourcetypen voor extensies.