Freigeben über


Festlegen des Bereichs für Erweiterungsressourcen in Bicep

Eine Erweiterungsressource ist eine Ressource, die eine andere Ressource ändert. Sie können beispielsweise einer Ressource eine Rolle zuweisen. Die Rollenzuweisung ist ein Erweiterungsressourcentyp.

Eine vollständige Liste der Erweiterungsressourcentypen finden Sie unter Ressourcentypen, die Funktionen anderer Ressourcen erweitern.

In diesem Artikel wird gezeigt, wie Sie den Bereich für einen Erweiterungsressourcentyp festlegen, wenn dieser mit einer Bicep-Datei bereitgestellt wird. Er beschreibt die Bereichseigenschaft, die für Erweiterungsressourcen beim Anwenden auf eine Ressource verfügbar ist.

Hinweis

Die Bereichseigenschaft ist nur für Erweiterungsressourcentypen verfügbar. Verwenden Sie ein Modul, um einen anderen Bereich für einen Ressourcentyp anzugeben, der kein Erweiterungstyp ist.

Anwenden im Bereitstellungsbereich

Um einen Erweiterungsressourcentyp auf den Zielbereitstellungsbereich anzuwenden, fügen Sie die Ressource ihrer Vorlage wie bei jedem anderen Ressourcentyp hinzu. Die verfügbaren Bereiche sind Ressourcengruppe, Abonnement, Verwaltungsgruppe und Mandant. Der Bereitstellungsbereich muss den Ressourcentyp unterstützen.

Bei der Bereitstellung in einer Ressourcengruppe fügt die folgende Vorlage dieser Ressourcengruppe eine Sperre hinzu.

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

Im nächsten Beispiel wird dem Abonnement, für das es bereitgestellt wird, eine Rolle zugewiesen.

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
  }
}

Auf eine Ressource anwenden

Verwenden Sie die scope Eigenschaft, um eine Erweiterungsressource auf eine Ressource anzuwenden. Verweisen Sie in der Bereichseigenschaft auf die Ressource, der Sie die Erweiterung hinzufügen. Sie verweisen auf die Ressource, indem Sie den symbolischen Namen für die Ressource angeben. Die Bereichseigenschaft ist eine Stammeigenschaft für den Erweiterungsressourcentyp.

Im folgenden Beispiel wird ein Speicherkonto erstellt und eine Rolle darauf angewendet.

@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
}

Sie können eine Erweiterungsressource auf eine vorhandene Ressource anwenden. Im folgenden Beispiel wird einem vorhandenen Speicherkonto eine Sperre hinzugefügt.

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.'
  }
}

Die gleichen Anforderungen gelten für Erweiterungsressourcen wie andere Ressourcen, wenn sie auf einen Bereich abzielen, der sich von dem Zielbereich der Bereitstellung unterscheidet. Weitere Informationen zur Bereitstellung in mehr als einem Bereich finden Sie unter:

Die Eigenschaften "resourceGroup" und "subscription" sind nur für Module zulässig. Diese Eigenschaften sind für einzelne Ressourcen nicht zulässig. Verwenden Sie Module, wenn Sie eine Erweiterungsressource bereitstellen möchten, deren Bereich auf eine Ressource in einer anderen Ressourcengruppe festgelegt ist.

Das folgende Beispiel zeigt, wie Sie eine Sperre auf ein Speicherkonto anwenden, das sich in einer anderen Ressourcengruppe befindet.

  • 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.'
      }
    }
    

Nächste Schritte

Eine vollständige Liste der Erweiterungsressourcentypen finden Sie unter Ressourcentypen, die Funktionen anderer Ressourcen erweitern.