Ange omfång för tilläggsresurser i Bicep

En tilläggsresurs är en resurs som ändrar en annan resurs. Du kan till exempel tilldela en roll till en resurs. Rolltilldelningen är en tilläggsresurstyp.

En fullständig lista över tilläggsresurstyper finns i Resurstyper som utökar funktioner för andra resurser.

Den här artikeln visar hur du anger omfånget för en tilläggsresurstyp när den distribueras med en Bicep-fil. Den beskriver den omfångsegenskap som är tillgänglig för tilläggsresurser när den tillämpas på en resurs.

Anteckning

Omfångsegenskapen är endast tillgänglig för tilläggsresurstyper. Om du vill ange ett annat omfång för en resurstyp som inte är en tilläggstyp använder du en modul.

Träningsresurser

Om du hellre vill lära dig mer om tilläggsresurser via stegvis vägledning kan du läsa Distribuera underordnade resurser och tilläggsresurser med hjälp av Bicep.

Använd i distributionsomfånget

Om du vill använda en tilläggsresurstyp i måldistributionsomfånget lägger du till resursen i mallen på samma sätt som med andra resurstyper. De tillgängliga omfången är resursgrupp, prenumeration, hanteringsgrupp och klientorganisation. Distributionsomfånget måste ha stöd för resurstypen.

När den distribueras till en resursgrupp lägger följande mall till ett lås till den resursgruppen.

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

I nästa exempel tilldelas en roll till den prenumeration som den distribueras till.

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@2020-04-01-preview' = {
  name: guid(subscription().id, principalId, role[builtInRoleType])
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
}

Använd för resurs

Om du vill tillämpa en tilläggsresurs på en resurs använder du scope egenskapen . I omfångsegenskapen refererar du till den resurs som du lägger till tillägget i. Du refererar till resursen genom att ange det symboliska namnet för resursen. Omfångsegenskapen är en rotegenskap för tilläggsresurstypen.

I följande exempel skapas ett lagringskonto och en roll tillämpas på det.

@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@2019-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
  scope: demoStorageAcct
}

Du kan tillämpa en tilläggsresurs på en befintlig resurs. I följande exempel läggs ett lås till i ett befintligt lagringskonto.

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

Samma krav gäller för tilläggsresurser som andra resurser när du riktar in dig på ett omfång som skiljer sig från distributionens målomfång. Mer information om hur du distribuerar till mer än ett omfång finns i:

Egenskaperna resourceGroup och prenumeration tillåts endast i moduler. Dessa egenskaper är inte tillåtna för enskilda resurser. Använd moduler om du vill distribuera en tilläggsresurs med omfånget inställt på en resurs i en annan resursgrupp.

I följande exempel visas hur du tillämpar ett lås på ett lagringskonto som finns i en annan resursgrupp.

  • 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@2021-09-01' existing = {
      name: storageAccountName
    }
    
    resource storeLock 'Microsoft.Authorization/locks@2017-04-01' = {
      scope: storage
      name: 'storeLock'
      properties: {
        level: 'CanNotDelete'
        notes: 'Storage account should not be deleted.'
      }
    }
    

Nästa steg

En fullständig lista över tilläggsresurstyper finns i Resurstyper som utökar funktioner för andra resurser.