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.