Nastavení oboru pro prostředky rozšíření v Bicepu

Prostředek rozšíření je prostředek, který mění jiný prostředek. K prostředku můžete například přiřadit roli. Přiřazení role je typ prostředku rozšíření.

Úplný seznam typů rozšiřujících prostředků najdete v tématu Typy prostředků, které rozšiřují možnosti jiných prostředků.

Tento článek ukazuje, jak nastavit obor pro typ prostředku rozšíření při nasazení se souborem Bicep. Popisuje vlastnost oboru, která je k dispozici pro prostředky rozšíření při použití prostředku.

Poznámka

Vlastnost scope je k dispozici pouze pro typy prostředků rozšíření. Pokud chcete zadat jiný obor pro typ prostředku, který není typem rozšíření, použijte modul.

Školicí materiály

Pokud byste se raději dozvěděli o prostředcích rozšíření prostřednictvím podrobných pokynů, projděte si téma Nasazení podřízených prostředků a prostředků rozšíření pomocí nástroje Bicep.

Použít v oboru nasazení

Pokud chcete použít typ prostředku rozšíření v oboru cílového nasazení, přidejte prostředek do šablony stejně jako u jakéhokoli jiného typu prostředku. Dostupné obory jsou skupina prostředků, předplatné, skupina pro správu a tenant. Obor nasazení musí podporovat typ prostředku.

Při nasazení do skupiny prostředků přidá následující šablona k této skupině prostředků zámek.

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

Další příklad přiřadí roli k předplatnému, do něhož je nasazená.

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

Použít u prostředku

Pokud chcete na prostředek použít prostředek rozšíření, použijte scope vlastnost . Ve vlastnosti oboru odkazujte na prostředek, ke kterém přidáváte rozšíření. Na prostředek odkazujete tak, že zadáte symbolický název prostředku. Vlastnost scope je kořenová vlastnost pro typ prostředku rozšíření.

Následující příklad vytvoří účet úložiště a použije na něj roli.

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

Prostředek rozšíření můžete použít u existujícího prostředku. Následující příklad přidá zámek k existujícímu účtu úložiště.

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

Při cílení na obor, který se liší od cílového rozsahu nasazení, platí pro prostředky rozšíření stejné požadavky jako na jiné prostředky. Další informace o nasazení do více než jednoho oboru najdete v tématech:

Vlastnosti resourceGroup a předplatného jsou povoleny pouze u modulů. Tyto vlastnosti nejsou u jednotlivých prostředků povolené. Moduly použijte, pokud chcete nasadit prostředek rozšíření s oborem nastaveným na prostředek v jiné skupině prostředků.

Následující příklad ukazuje, jak použít zámek u účtu úložiště, který se nachází v jiné skupině prostředků.

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

Další kroky

For a full list of extension resource types, see Resource types that extend capabilities of other resources.